总结前面遇到的问题:
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
http://www.smth.edu.cn/pc/pccon.php?id=2150&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仍
然存在,这是另外一个问题。
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.
上一篇:SPCOMM控件在Delphi7.0串口通信中的应用
下一篇:最后一页
设计资源 培训 开发板 精华推荐
- LTC1433 最高效率 3.3V/5V 转换器的典型应用电路
- LTC1403-1 的典型应用 - 具有关断功能的串行 12 位、2.8Msps 采样 ADC
- 使用 Analog Devices 的 LT1579CGN-3.3 的参考设计
- SPT10_AirTouch_5Key_20190715
- 借助这款高效的单电感同步降压-升压稳压器,可更轻松地将锂离子电池电压转换为 3.3V,可在 600mA 时将 3 节电池电压转换为 3.3V,并带有可选的肖特基二极管
- EVAL-ADF4108EBZ1,ADF4108 评估板,用于 PoE 无线接入点的 8000 MHz PLL 时钟发生器
- 适用于二氧化碳或火焰检测应用的 IRD1011-A、IR1011 中红外光电二极管参考设计
- LT1172CT、1.25A 背光 CCFL 电源的典型应用
- 降压稳压器的限流电路
- #第八届立创电赛#地平线专用方向盘手柄
- 贸泽开售适用于AI和机器学习应用的 AMD Versal AI Edge VEK280评估套件
- 触觉行业论坛 (HIF) 发布提案征集,推进通用触觉API 的触觉基元标准化
- Imagimob的边缘AI解决方案现已用于AURIX™产品系列
- 国内首家:纳芯微CAN收发器NCA1044-Q1全面通过IBEE/FTZ-Zwickau EMC认证
- 安森美Hyperlux图像传感器将用于斯巴鲁新一代集成AI的EyeSight系统
- Gartner:到2027年,40%的AI数据中心将因电力短缺而受限
- 兆易创新选择 Arteris产品用于开发 符合增强型 FuSa 标准的下一代汽车 SoC
- NVIDIA 助力谷歌量子 AI 通过量子器件物理学模拟加快处理器设计
- 生成式AI新助力:IBM 携手 AMD 明年部署推出 MI300X 加速器服务
- 英伟达Blackwell芯片存在“发热问题”,引发客户担忧