2020-09-19

学习目标:jz2440移植实践-制作yaffs2根文件系统

提示:已经移植好了uboot-2016.9,linux-4.14,然后需要构建文件系统
目标:

1. uboot支持yaffs2文件烧录

2. kernel支持yaffs2文件系统

3. 手动制作根文件系统


学习内容:

1. uboot支持yaffs2烧录

<1> 文件:cmd/nand.c

更改目的:增加对nand write.yaffs2命令的支持

<2> 文件:driver/mtd/nand/nand_util.c

更改目的:增加nand write对yaffs2文件系统的支持

<3> 文件:include/configs/jz2440.h

更改目的:增加对YAFFS编译选项,使增加的改动代码编译入uboot

<4> 文件:include/nand.h

2. kernel支持yaffs2

{

<1> kernel更改mtd分区
  https://blog.csdn.net/qq_36576792/article/details/86526796
<2> kernel增加对yaffs2支持
  https://blog.csdn.net/gatieme/article/details/53157829
<3> yaffs2编译问题
  https://blog.csdn.net/hanpca/article/details/80220929
  <1>f_dentry错误
    frank@ubuntu:~/workSpace/linux-4.1.4/fs/yaffs2$ diff yaffs_vfs.c yaffs_vfsbak.c 
    258c258
    < #define Y_GET_DENTRY(f) ((f)->f_dentry)
    ---
    > #define Y_GET_DENTRY(f) ((f)->f_path.dentry)
    1927c1927
    <             (int)f->f_dentry->d_parent->d_inode->i_ino);
    ---
    >             (int)f->f_path.dentry->d_parent->d_inode->i_ino);
    1930c1930
    <                 f->f_dentry->d_parent->d_inode->i_ino,
    ---
    >                 f->f_path.dentry->d_parent->d_inode->i_ino,

}

3. 制作根文件系统

https://www.cnblogs.com/electronic/p/11146614.html

 

 


遇到的问题bug:

1. 每次烧录文件系统后uboot下命令nand bad会新增坏块?uboot和kernel识别的坏块不一致?

问题定论:mkyaffs2image生成的yaffs2文件系统会将oob数据的第1,2字节写成0x00 0x01,而uboot和kernel判定坏块原则是第1,2字节只要不是[0xff,0xff]就是坏块,所以每次烧录文件系统后,重启uboot后nand识别的坏块会增加。

问题定位过程:控制变量法,由于根文件系统是新制作的,所以先采用韦东山教程中给的yaffs2进行烧录,发现可以正常启动。后来下载hex16阅读器,发现确实是oob数据区错误。

问题定位中的收获:

<1> 认知nandflash结构

<2> oob有什么作用?

oob存放标记坏块,和ecc,uboot和kernel都是通过识别第1,2字节非[0xff,0xff]则是坏块。

<2> yaffs2如何利用oob数据

yaffs2会在oob中存放坏块标记,ecc校验,以及yaffs2相关信息,制作好的yaffs2文件包含oob数据,在写入时一起写入nand,所以可能会在成认为坏块的出现

<3> 伪坏块处理

nand scrub -y 擦除起始地址 总共擦除的大小

2.问题解决

mkyaffs2image工具的问题

最终发现,由于Jz2440使用256M nandflash,所以应该使用mkyaffs2image-128M工具,后续我会贴上资源。

 


学习产出:

1.yaffs2文件系统支持

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值