u-boot访问jffs2文件系统

来源:互联网 发布:jenkins 源码管理 编辑:程序博客网 时间:2024/05/17 19:56

[Author: Bo Shen <voice.shen@gmail.com>]

 

当我们需要让u-boot从JFFS2文件系统中读取Linux内核image来启动系统,我们应该如做呢?答案其实很简单:让u-boot支持JFFS2文件系统,并且添加能访问JFFS2文件系统的命令。如下即按此步骤来实现。

u-boot版本:commit id: c2e5e802ecb7ab668ce9911b210ed68c804b349f

 

1. 添加JFFS2文件系统的支持。

    查看<fs/Makefie>发现:obj-$(CONFIG_CMD_JFFS2) += jffs2/ 所以要支持JFFS2文件系统,需要在board相关文件里面定义:CONFIG_CMD_JFFS2

    既然文件系统支持了,那么这个文件系统的载体是什么呢?它可以是NAND FLASH, NOR FLASH, ONENAND。

2. 定义文件系统的载体以及分区大小。

    我们这里使用NAND FLASH做为JFFS2文件系统的载体。所以需要定义:CONFIG_JFFS2_DEV和CONFIG_JFFS2_NAND

 ----------------------

 #define COFIG_JFFS2_DEV "nand0"

    #define CONFIG_JFFS2_NAND

 ----------------------

    既然载体有了,那么JFFS2文件系统放在NAND FLASH的什么位置呢?所以需要定义:CONFIG_JFFS2_PART_SIZE和CONFIG_JFFS2_PART_OFFSET。

 举例如下:从8MiB位置开始后的所有空间用作JFFS2文件系统。

    ----------------------

 #define CONFIG_JFFS2_PART_OFFSET        0x800000

    #define CONFIG_JFFS2_PART_SIZE              0xf800000

    ----------------------

    注:如果不定义这两个变量。那么u-boot会把整个NAND FLASH作为JFFS2文件系统。如果定义了CONFIG_JFFS2_PART_OFFSET,则是从offset开始剩余的所以空间作为JFFS2文件系统。如果定义了CONFIG_JFFS2_PART_SIZE,则从0开始,到size-1的空间用为JFFS2文件系统。

 既然一切准备就绪。那么接下来就是使能JFFS2文件系统相关的命令。

3. 使用JFFS2文件系统命令

 查看<common/Makefile>发现:obj-$(CONFIG_CMD_JFFS2) += cmd_jffs2.o 所以要支持JFFS2文件系统,需要定义:CONFIG_CMD_JFFS2。此定义已经在第一步完成了。查看cmd_jffs2.c文件,其提供三个命令:

 ls:如果不加参数,则列出JFFS2根文件夹下面的内容。如果参数为某一路径名(ls /boot),列出此路径下面的内容。

 flinfo:显示JFFS2文件系统的信息。

 fsload:从JFFS2文件系统里面load文件到内存中。

 

至此需要的配置选项已经全部加入。加入后如下patch所示:

----------------------------------------

#define CONFIG_CMD_JFFS2
#define CONFIG_JFFS2_DEV                        "nand0"
#define CONFIG_JFFS2_NAND
#define CONFIG_JFFS2_PART_OFFSET      0x800000
#define CONFIG_JFFS2_PART_SIZE            0xf800000
---------------------------------------

重新编译u-boot,就可以使用jffs2相关命令访问JFFS2文件系统了。

 

具体实例于Atmel at91sam9m10g45ek board参考:https://github.com/voiceshen/u-boot-at91/tree/at91sam9m10g45ek/enable_jffs2_command

 

原创粉丝点击