http://bbs.dualwan.cn/thread-26722-1-1.html
?jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x0050e154: 0xfbeb instead
的问题,是制作文件系统时使用 mkfs.jffs2 命令有误,FS2410板的nand flash是三星的K9F1208U0B。使用的命令是:
mkfs.jffs2 -r /source/rootfs -o rootfs.jffs2 -e 0x4000 --pad=0x800000 -n
各参数的意义:
(1)-r : 指定要做成image的源資料夾.
(2)-o : 指定輸出image檔案的文件名.
(3)-e : 每一塊要抹除的block size,預設是64KB.要注意,不同的flash,其block size會不一樣.我的是三星的K9F1208U0B.
(4)--pad (-p): 用16進制來表示所要輸出檔案的大小,也就是root.jffs2的size。很重要的是,為了不浪費flash空間,這個值最好符合flash driver所規劃的區塊大小.这里使用的是8MB.
(5)如果挂载后会出现类似:CLEANMARKER node found at 0x0042c000 has totlen 0xc != normal 0x0 的警告,则加上 -n 就会消失。
(6) 还有的选项,自己看帮助!-h
总结在FS2410上制作jffs2文件系统的过程:
详细过程请参考:《在nand flash上实现JFFS2根文件文件系统》
1. 下载 mtd-snapshot-20050519.tar.bz2 ,生成mkfs.jffs2的工具;
[fs2410@home]$ tar –jxvf mtd-snapshot-20050519.tar.bz2
[fs2410@home]$ cd mtd/util
[fs2410@home]$ make
用ls命令,可以看的mkfs.jffs2文件;
2. 生成JFFS2文件镜像
[fs2410@home]$ mkfs.jffs2 -r /source/rootfs -o rootfs.jffs2 -e 0x4000 --pad=0x800000 -n
3. 设置uboot启动参数:
FS2410#setenv bootargs root=/dev/mtdblock/2 rootfstype=jffs2 rw console=ttySAC0,115200 init=/linuxrc mem=64M
4.下载rootfs.jffs2镜像
下载到Nand Flash第二个分区。
FS2410#nand erase 200000 800000
FS2410#nand write.jffs2 300008000 200000 800000
方法二:
[fs2410@home]#mkfs.jffs2 -r /source/rootfs -o rootfs.jffs2 -e 0x4000 -n
启动开发板烧写rootfs.jffs2镜像
FS2410#nand erase 200000 800000//(注意把整个存放文件系统的分区全部给擦除)。
FS2410#nand write.jffs2 30008000 200000 31a28c//(必须是rootfs.jffs2的实际大小。如果是你写成了4M,那么分区的其余部分JFFS2文件系统将无法识别)。
附相关jffs2的内核配置:
File systems ---> Miscellaneous filesystems --->
? ? <*>JournallingFlash File System v2 (JFFS2) support
? ?
JFFS2write-bufferingsupport
? ?
AdvancedcompressionoptionsforJFFS2
? ?
JFFS2ZLIBcompressionsupport
? ?
JFFS2RTIMEcompressionsupport
? ?
JFFS2 RUBIN compression support
注意:
配置内核时,我没有选择:
NAND Flash Kevice Drivers--->
[] S3C2410 NAND Hardware ECC
在drivers/mtd/nand/s3c2410.c 中的ecc校验使用的是:
chip->eccmod = NAND_ECC_SOFT
有相关问题,且给出自己情况的解决办法:
jffs2文件系统在redboot下
http://blog.sina.com.cn/s/blog_4a082210010005dq.html
http://www.smth.edu.cn/pc/pccon. ... ;nid=129263&p=n
这里主要存在两个问题,分别说明一下。
6.1.2 创建jffs2文件系统注意事项
引导过程中出现的数十行”jffs2_scan_eraseblock(): Magic bitmask 0x198
5 not found…”信息说明jffs2文件系统有问题。另外,如果我先用远程NFS根文件
系统引导,然后在目标机系统中直接 mount -t jffs2 /dev/mtdblock/2 /mnt 也会
得到同样的警告信息,不过可以在 /mnt 下面看到正确的文件系统内容。
为了解决这个问题,我首先仔细看了 mkfs.jffs2 的手册页,发现 --erasebl
ock 参数似乎比较重要,而我没有使用,于是找到该参数值 0x20000,用该参数重
新生成了映像文件。测试表明问题仍然存在。
查找资料发现,有人强调在 mkfs.jffs2 时使用 -p 选项,其作用是从文件末
尾到最后一个erase block填充0xFF。这时我意识到FLASH的未分配空间必须以0xFF
填充。而我先前的做法不能保证这一点。首先没有指定-p选项;其次,由于-l参数
指定了远远大于实际映像文件大小的长度,而将内存区域中大量垃圾数据写到了FL
ASH中。
因此,重新带参数-p制作jffs2文件系统映像,并改-l 0x200000为0x140000写
FLASH,这样再次mount该设备就OK了,没有再出现警告信息。但是Kernel panic仍
然存在,这是另外一个问题。 ?
?
搞定了, 启动脚本里,去掉教程里面写的 mount /dev/mtdblock/4 /mnt 这样就没有错误了。