jffs2文件系统制作
2016-07-16 21:05
471 查看
jffs2文件系统,本菜鸟搞了两天
,所以写篇文章,纪念下这两天的光阴。
开头惯例科普一下:
jffs2的全名为JournallingFlashFileSystemVersion2(闪存日志型文件系统第2版),其功能就是管理在MTD设备上实现的日志型文件系统。与其他的存储设备存储方案相比,JFFS2并不准备提供让传统文件系统也可以使用此类设备的转换层。它只会直接在MTD设备上实现日志结构的文件系统。JFFS2会在安装的时候,扫描MTD设备的日志内容,并在RAM中重新建立文件系统结构本身。(来自度娘)
进入正题:
jffs2文件系统制作过程:
第一步:制作一个根文件系统(此处略过,主要就是创建根文件系统树,设备文件,符号链接文件,拷贝交叉编译器动态库,及系统启动必要的一些文件,配置文件,准备另写一篇文章,并捎上系统启动过程)
第二步:添加内核的支持
内核的支持无庸置疑的,只要是基于内核的,都要内核支持(没错,应该是这样
)。
[zhangl@centos6 linux-3.0]$ make menuconfig
File systems --->
Miscellaneous filesystems --->
<*> Journalling Flash File System v2 (JFFS2) support
(0) JFFS2 debugging verbosity (0 = quiet, 2 = noisy)
[*] JFFS2 write-buffering support
[ ] JFFS2 summary support (EXPERIMENTAL)
[ ] JFFS2 XATTR support (EXPERIMENTAL)
[ ] Advanced compression options for JFFS2
跟上述选择一样就行,主要就是一些支持。
改完后,记得make,重新编译内核。
第三步:获取mkfs.jffs2工具
因为jffs2不是内嵌的内核中的,所以需要将其制作成镜像文件存于flash中,mkfs.jffs2工具就是用来制作jffs2镜像文件的。
制作mkfs.jffs2工具
该工具主要依赖lzo-2.04,zlib-1.2.5,e2fsprogsV1.42,mtd-utils-1.4.9(版本可不一样,可自己尝试使用更新的版本),具体制作过程较为繁琐,此处略过,可百度,可留言找我要。
获取mkfs.jffs2工具
如果制作了该工具,可在mtd-utils-1.4.9中找到(顺带还能找到做ubifs2的工具),将其拷贝到usr/bin之类存放命令的路径下。
第四步:制作镜像文件
之前提到jffs2需存放在flash中,所以此处制作镜像文件。此处就用到了上面的mkfs.jffs2工具(当作命令一样用)。
主要要用到的参数:
-n:用于去除挂载后的警告CLEANMARKER node found at 0x0042c000 has totlen 0xc != normal 0x0
-s指定flash一页的大小,默认为4KiB(flash读的最小单位是页,此处要将KiB换算成bytes,具体原因我也不知道,如果用KiB,会造成镜像文件异常增大)
-e指定flash擦除块的大小,默认为64KiB(flash擦除的最小单位是块,此处可以用KiB为单位)(注:指定大小不可乱指定,任何地方指定错误均会造成镜像文件大小异常。且页和块的大小均可从芯片的datasheet上查找,上同)
-d指定做成镜像文件的源文件夹的路径(默认当前文件夹)
-o指定输出的根文件系统名,即镜像文件的名字。
-p(--pad)指定镜像文件的大小,最好符合flash所规划的区域大小,以节省flsh空间。
其他的参数不是必须的,可百度,此处略过。
具体命令:
[zhangl@centos6 opt]$ sudo mkfs.jffs2 -n -s 2048 -e 128KiB -d rootfs -o rootfs.jffs2 --pad=0x1400000
(附:1KiB=1024B,1KB=1000B,很容易搞错的)
可用命令查看大小是否正常:
[zhangl@centos opt]$ du -h rootfs.jffs2
20M rootfs.jffs2
第五步:添加uboot对jffs2支持:
即对uboot里的环境参数做相应的设置和改变。
[ s3c2440@zhangl ]# set bkr 'tftp 30008000 linuxrom-s3c2440.bin;nand erase 100000 f00000;nand write 30008000 100000 400000'
[ s3c2440@zhangl ]# set bjffs2 'tftp 30008000 rootfs.jffs2;nand erase 1000000 1400000;nand write 30008000 1000000 1400000'
[ s3c2440@zhangl ]# set bootargs 'noinitrd root=/dev/mtdblock4 rootfstype=jffs2 init=/linuxrc console=ttyS0,115200'
[ s3c2440@zhangl ]# set bootcmd 'nand read 30008000 100000 400000;bootm 30008000'
注:擦掉多少是根据内核里的分区大小决定的,可在linux-3.0/arch/arm/plat-s3c24xx/common-smdk.c中查看或修改(根据板子不同,内核不同,有些路径也不同)。
重新烧录了内核和jffs2文件系统后,正常情况下是可以正常进入文件系统的。不正常情况下会出现下列提示:
jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x004e0018: 0x34d8 instead
如果有此类的提示且进不了文件系统的话,多半在制作镜像文件的时候,擦除块的大小,读的页的大小和实际flash的大小不符,删掉旧的,重新制作即可。
如果有此类提示但可以进入系统,可以看下是否rootfs分区的大小和擦的大小不符,导致这一系列警告(可忽略,反正能用
)。
至此,jffs2文件系统制作完成。
但我还存在一个问题:就算rootfs分区的大小与擦的大小相同,与文件系统的大小也相同,还是会报这个警告,希望有大神指导我。
jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x004e0018: 0x34d8 instead
还有上述如有错误,也请各路大神指出,毕竟我只是一只小菜鸟,难免出错。
,所以写篇文章,纪念下这两天的光阴。
开头惯例科普一下:
jffs2的全名为JournallingFlashFileSystemVersion2(闪存日志型文件系统第2版),其功能就是管理在MTD设备上实现的日志型文件系统。与其他的存储设备存储方案相比,JFFS2并不准备提供让传统文件系统也可以使用此类设备的转换层。它只会直接在MTD设备上实现日志结构的文件系统。JFFS2会在安装的时候,扫描MTD设备的日志内容,并在RAM中重新建立文件系统结构本身。(来自度娘)
进入正题:
jffs2文件系统制作过程:
第一步:制作一个根文件系统(此处略过,主要就是创建根文件系统树,设备文件,符号链接文件,拷贝交叉编译器动态库,及系统启动必要的一些文件,配置文件,准备另写一篇文章,并捎上系统启动过程)
第二步:添加内核的支持
内核的支持无庸置疑的,只要是基于内核的,都要内核支持(没错,应该是这样
)。
[zhangl@centos6 linux-3.0]$ make menuconfig
File systems --->
Miscellaneous filesystems --->
<*> Journalling Flash File System v2 (JFFS2) support
(0) JFFS2 debugging verbosity (0 = quiet, 2 = noisy)
[*] JFFS2 write-buffering support
[ ] JFFS2 summary support (EXPERIMENTAL)
[ ] JFFS2 XATTR support (EXPERIMENTAL)
[ ] Advanced compression options for JFFS2
跟上述选择一样就行,主要就是一些支持。
改完后,记得make,重新编译内核。
第三步:获取mkfs.jffs2工具
因为jffs2不是内嵌的内核中的,所以需要将其制作成镜像文件存于flash中,mkfs.jffs2工具就是用来制作jffs2镜像文件的。
制作mkfs.jffs2工具
该工具主要依赖lzo-2.04,zlib-1.2.5,e2fsprogsV1.42,mtd-utils-1.4.9(版本可不一样,可自己尝试使用更新的版本),具体制作过程较为繁琐,此处略过,可百度,可留言找我要。
获取mkfs.jffs2工具
如果制作了该工具,可在mtd-utils-1.4.9中找到(顺带还能找到做ubifs2的工具),将其拷贝到usr/bin之类存放命令的路径下。
第四步:制作镜像文件
之前提到jffs2需存放在flash中,所以此处制作镜像文件。此处就用到了上面的mkfs.jffs2工具(当作命令一样用)。
主要要用到的参数:
-n:用于去除挂载后的警告CLEANMARKER node found at 0x0042c000 has totlen 0xc != normal 0x0
-s指定flash一页的大小,默认为4KiB(flash读的最小单位是页,此处要将KiB换算成bytes,具体原因我也不知道,如果用KiB,会造成镜像文件异常增大)
-e指定flash擦除块的大小,默认为64KiB(flash擦除的最小单位是块,此处可以用KiB为单位)(注:指定大小不可乱指定,任何地方指定错误均会造成镜像文件大小异常。且页和块的大小均可从芯片的datasheet上查找,上同)
-d指定做成镜像文件的源文件夹的路径(默认当前文件夹)
-o指定输出的根文件系统名,即镜像文件的名字。
-p(--pad)指定镜像文件的大小,最好符合flash所规划的区域大小,以节省flsh空间。
其他的参数不是必须的,可百度,此处略过。
具体命令:
[zhangl@centos6 opt]$ sudo mkfs.jffs2 -n -s 2048 -e 128KiB -d rootfs -o rootfs.jffs2 --pad=0x1400000
(附:1KiB=1024B,1KB=1000B,很容易搞错的)
可用命令查看大小是否正常:
[zhangl@centos opt]$ du -h rootfs.jffs2
20M rootfs.jffs2
第五步:添加uboot对jffs2支持:
即对uboot里的环境参数做相应的设置和改变。
[ s3c2440@zhangl ]# set bkr 'tftp 30008000 linuxrom-s3c2440.bin;nand erase 100000 f00000;nand write 30008000 100000 400000'
[ s3c2440@zhangl ]# set bjffs2 'tftp 30008000 rootfs.jffs2;nand erase 1000000 1400000;nand write 30008000 1000000 1400000'
[ s3c2440@zhangl ]# set bootargs 'noinitrd root=/dev/mtdblock4 rootfstype=jffs2 init=/linuxrc console=ttyS0,115200'
[ s3c2440@zhangl ]# set bootcmd 'nand read 30008000 100000 400000;bootm 30008000'
注:擦掉多少是根据内核里的分区大小决定的,可在linux-3.0/arch/arm/plat-s3c24xx/common-smdk.c中查看或修改(根据板子不同,内核不同,有些路径也不同)。
重新烧录了内核和jffs2文件系统后,正常情况下是可以正常进入文件系统的。不正常情况下会出现下列提示:
jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x004e0018: 0x34d8 instead
如果有此类的提示且进不了文件系统的话,多半在制作镜像文件的时候,擦除块的大小,读的页的大小和实际flash的大小不符,删掉旧的,重新制作即可。
如果有此类提示但可以进入系统,可以看下是否rootfs分区的大小和擦的大小不符,导致这一系列警告(可忽略,反正能用
)。
至此,jffs2文件系统制作完成。
但我还存在一个问题:就算rootfs分区的大小与擦的大小相同,与文件系统的大小也相同,还是会报这个警告,希望有大神指导我。
jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x004e0018: 0x34d8 instead
还有上述如有错误,也请各路大神指出,毕竟我只是一只小菜鸟,难免出错。
相关文章推荐
- Thinking in Java之break与continue的使用
- 在Ubuntu搭建.NET Core环境
- 已知int a[]={1,2,3,4,5};int*p[]={a,a+1,a+2,a+3};int **q=p;表达式*(p[0]+1)+**(q+2)的值是____。
- 进程管理和调度——完全公平调度类
- form表单内input框name和onclick方法不能重名(同一From表单多个按钮可以submit时发现)
- ViewPager+ListView+SwipeRefreshLayout+自定义下拉刷新
- CSS盒子模型
- 10.可连接对象和连接点原理
- 实习三个月感想
- static关键字(二)作用总结
- 合并表记录
- 【cas】cas获取登录的用户名
- 【BZOJ 1038】【ZJOI 2008】瞭望塔
- java枚举类型详解
- Toasts
- 天线设计(上)
- idea的maven项目配置---java web application项目配置
- java Swing教程
- Unity3D 第一人称视角摄像机旋转控制
- redhat系统文件简介