总结前面遇到的问题:
1.有关类似:
mtd->read(0x44 bytes from 0x68cf44) returned ECC error
jffs2_get_inode_nodes(): CRC failed on node at 0x0068c684: Read 0xe8b9b3b0, calculated 0x9402829b
的问题,是写文件系统时的错误,写cramfs用nand write就可以了,但写jffs2文件系统要用nand write.jffs2命令。
2.有关类似:
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这里主要存在两个问题,分别说明一下。
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仍
然存在,这是另外一个问题。
6.1.3 /dev/mtdblock/2 还是 /dev/mtdblock2
(首先说明,’2’只是个例子./dev/mtdblock/n,n=0,1,2,3,…)
看起来这两个设备节点应该是完全等效的。至少我原来是这么认为。所看到的
资料中,有的用/dev/mtdblock/2,有的用/dev/mtdblock2。能够看到的差别就是,
如果需要多个MTD块设备节点的话,把这些节点放在单独的/dev/mtdblock目录中,
而不是统统放在/dev下面,可以使/dev看起来清爽一些。因此,我在制作根文件系
统的时候,选择了前者,即在/dev/mtdblock目录下面创建了0-7共8个设备节点。
然而,“Kernel panic: VFS: Unable to mount root fs on 1f:00”错误说明
内核没有从引导参数“root=/dev/mtdblock/2”正确定位到根文件系统(即使已经
解决了上一个问题,保证jffs2文件系统没有问题)。
在考虑排除了多种可能性之后,无奈之下我决定试一下“root=/dev/mtdblock
2”。奇迹发生了,引导成功!特别注意,这时我并没有修改/dev设备节点,而仅仅
是修改了引导参数的写法。也就是说,不论你创建的MTD设备节点是/dev/mtdblock
/2还是/dev/mtdblock2,内核引导参数都应该是“root=/dev/mtdblock2”!
为了不致于引起更多迷惑,我还是把设备节点改变为了/dev/mtdblock2的形式
。那么内核引导参数中到底可不可以使用/dev/mtdblock/2的形式呢?后来我猜测内
核如果支持 devfs 的话应该是可以的。devfs 的目的不就是把/dev从一塌糊涂的扁
平结构改成清晰的层次结构嘛?不过我还没有验证。
另外,在内核引导参数中使用“主设备号、次设备号”的形式来指定根文件系
统的位置也是可以的。如下所示,“root=1f02”同样指定了/dev/mtdblock2。0x1
f=31是MTD块设备的主设备号,0x02=2是次设备号,即mtdblock2.
jffs2不能正常mount的问题
原来的把檫除尺寸搞错了,我是先在主机上建立映像文件
mkfs.jffs2 -e 0x20000 --pad=0x1e0000 -l -d b -o jffs2.bin
然后直接把映像文件写入到flash中,启动后现在还不能进行写入,难道非要在开发板引导以后再檫除mtd分区写入映像才可以吗
?
急问:MTD+JFFS2
现在这个错误已经找出来了,是自己的flash分去错误,
第一个分区应该用于kernel,第二个用于user,最初我分反了!
ARM 920T Samsung2440 从cross-tools到 linux2.6.24.4
3) 加载mtdblock3 的jffs2文件系统出现下述信息:
jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x0001001c: 0x3c04
建议:将此分区数据清除,更近一步,加载一个image到这个分区.
hyl大侠写的 open 2440 Linux kernel移植文档
jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x0001001c: 0x3c04
建议:将此分区数据清除,更近一步,加载一个image到这个分区
求助了 版主挂载文件系统出错
nand flash上的文件系统也要和你的硬件对应才行,如果是1G的Nand flash,mkfs.jffs2这条命令就要改了。
-s 0x200 -e 0x4000是对应页大小和块大小的,你看看datasheet修改一下吧
文章出处:
阅读(2044) | 评论(0) | 转发(0) |