终于搞定u-boot1.3.3烧写yaffs文件系统

还记得半年前我写的《[2410]都是nand ecc惹得祸》文章吗?

当时移植u-boot1.2.0,没有搞定烧写yaffs文件系统,经过半年的学习,特别是和leeming同志写了mtd层的nand驱动后,发现给u-boot添加write.yaffs指令还是很简单的。

先简单记录下,又可以写篇小论文嘿嘿。

1)u-boot1.3.3的移植,不多说了。

2)u-boot使用Linux的MTD层驱动,需要自己写NAND底层驱动,我用的sep4020开发板,直接从Linux下移植即可。当然要修改很多地方,比如虚拟地址全部不能用,很多Linux的头文件也要处理下。

3)给u-boot添加write.yaffs函数,我是按照韦东山的书来做的,网上资料满天飞,比如这个http://blog.chinaunix.net/u2/89327/showart_1828970.html,先尝试下,不行再修改。

4)编译后,貌似write.yaffs就可以用了。。尝试烧录阳初板子提供的yaffs文件,烧录成功!

5)挂载试试,囧了,报了一堆错误:

**>>mtd ecc error unfixed on chunk 3866:0
**>>mtd ecc error unfixed on chunk 3866:1
**>>Block 120 marked for retirement
**>>mtd ecc error unfixed on chunk 3867:0
**>>mtd ecc error unfixed on chunk 3867:1
**>>Block 120 marked for retirement
**>>mtd ecc error unfixed on chunk 3868:0
**>>mtd ecc error unfixed on chunk 3868:1
**>>Block 120 marked for retirement
**>>mtd ecc error unfixed on chunk 3869:0
**>>mtd ecc error unfixed on chunk 3869:1
**>>Block 120 marked for retirement

6)怀疑是Linux内核和u-boot对MTD层的OOB处理不一样,看来要修改其一。

7)因为u-boot使用了NAND_ECC_NONE,抱着试一试的心理,把内核的NAND_ECC_SOFT改成NAND_ECC_NONE,然后打开yaffs的ecc校验:

│ <*> YAFFS2 file system support                                                                                                                                         │ │ 
│ │ ---   512 byte / page devices                                                                                                                                          │ │ 
│ │ [*]     Lets Yaffs do its own ECC

8)重启,竟然挂上了,激动!

VFS: Mounted root (yaffs filesystem).
Freeing init memory: 116K
Warning: unable to open an initial console.
Reading data from NAND FLASH without ECC is not recommended
Reading data from NAND FLASH without ECC is not recommended

9)用NFS加载,手动挂载yaffs,添加那个该死的console节点,再次从nand启动,终于成功挂载yaffs!

yaffs: dev is 32505859 name is "mtdblock3"
yaffs: Attempting MTD mount on 31.3, "mtdblock3"
Reading data from NAND FLASH without ECC is not recommended
Reading data from NAND FLASH without ECC is not recommended
VFS: Mounted root (yaffs filesystem).
Freeing init memory: 116K
Reading data from NAND FLASH without ECC is not recommended
Reading data from NAND FLASH without ECC is not recommended
mount /etc as ramfs
re-create the /etc/mtab entries
init started: BusyBox v1.00-pre2 (2007.07.06-03:31+0000) multi-call binary
Reading data from NAND FLASH without ECC is not recommended
mount: Mounting none on /dev/pts failed: No such file or directory
mount: Mounting tmpfs on /dev/shm failed: No such file or directory
sepether_open!
<6>eth0: Link now 10-HalfDuplex
SIOCDELRT: No such process
mount: Mounting ramfs on /.kde failed: No such file or directory
Writing data without ECC to NAND-FLASH is not recommended
Writing data without ECC to NAND-FLASH is not recommended
Writing data without ECC to NAND-FLASH is not recommended
Writing data without ECC to NAND-FLASH is not recommended
Writing data without ECC to NAND-FLASH is not recommended
Writing data without ECC to NAND-FLASH is not recommended
Writing data without ECC to NAND-FLASH is not recommended
Writing data without ECC to NAND-FLASH is not recommended
Writing data without ECC to NAND-FLASH is not recommended
Writing data without ECC to NAND-FLASH is not recommended
Writing data without ECC to NAND-FLASH is not recommended
Writing data without ECC to NAND-FLASH is not recommended
Writing data without ECC to NAND-FLASH is not recommended
Writing data without ECC to NAND-FLASH is not recommended
Writing data without ECC to NAND-FLASH is not recommended
/etc/init.d/rcS: 83: qtopia: not found

Please press Enter to activate this console.


BusyBox v1.00-pre2 (2007.07.06-03:31+0000) Built-in shell (ash)
Enter 'help' for a list of built-in commands.

# ls

感觉写了这么多都没写到重点,再补充两句吧,其实yaffs的oob区和u-boot无关,u- boot做的事情就是把yaffs镜像的内容全部写入到nand中,注意,yaffs镜像是包含16字节的oob区信息的,所以u-boot在烧写 yaffs也要烧写oob区,也就是528字节。还有就是不能用MTD的ECC校验,烧录时要跳过第一个block,好像yaffs会用第一个block 记录信息。

撒~感觉又没有说到重点,既然u-boot不负责计算yaffs的ECC,那yaffs的oob是怎么填充的呢?

答案是mkyaffsimage程序,用这个程序生成yaffs镜像时,同时会生成yaffs的oob内容。

于是,这个程序定制的oob区规则一定要和内核的yaffs驱动相同,我就遇到过用了错误使用了mini2440提供的mkyaffsimage,结果烧录进入,内核全认为是坏块。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值