历史上的今天
今天是:2025年11月17日(星期一)
2022年11月17日 | S3C2440移植linux3.4.2内核之支持YAFFS文件系统
2022-11-17 来源:知乎
获取yaffs2源码并给内核打补丁
首先获取yaffs2源码(参考git命令使用详解)
cd /work/nfs_root
git clone git@github.com:lifeyx/yaffs2.git
//若下载出现error:403,可以试试vi /etc/resolv.conf,将nameserver地址改为: 114.114.114.114
将yaffs2源码来配置到内核里(使内核支持yaffs2)
vi /work/nfs_root/yaffs2/README-linux

参考上图:
/*给内核打补丁*/
cd /work/nfs_root/yaffs2/
./patch-ker.sh c m /work/system/linux-3.4.2//c:将yffs2文件夹copy到linux-3.4.2/fs里, m:指定多版本
/*通过menuconfig,来使内核支持yaffs2*/
cd /work/system/linux-3.4.2/
make menuconfig
搜索yaffs,找到位于:
-> File systems
-> Miscellaneous filesystems (MISC_FILESYSTEMS [=y])
<*> yaffs2 file system support //按Y键,使内核支持yaffs2
编译内核make uImage
如下图所示,出现很多错误:
如上图,问题都是出在fs/yaffs2/下,很多error都讲述:调用的成员名,在struct mtd_info结构体里没有定义.
修改yaffs2源码
接下来我们便将fs/yaffs2文件夹添加到内核3.4的si工程中. 然后进入yaffs2/yaffs_vfs.c,第1958行: (linux下显示的是yaffs_vfs.c,vi可以打开yaffs_vfs.c。但是在si工程中没有找到yaffs_vfs.c,所以从ubuntu中拷贝一份yaffs_vfs.c添加到si中。)

然而发现struct mtd_info *mtd的结构体mtd_info定义的是_sync成员,如下图所示:
所以接下来只有遇到与struct mtd_info有关的error,都在成员前加上: _
比如: 将yaffs_vfs.c文件2514~2515行的mtd->sync 改为: mtd->_sync 将yaffs_vfs.c文件2702行的mtd->erase改为: mtd->_erase 将yaffs_vfs.c文件2703行的mtd->read改为: mtd->_read ... ... 并将yaffs_vfs.c的第2967行的 root = d_alloc_root(inode);改为: root = d_make_root(inode);
全部修改后,将yaffs_vfs.c上传到ubuntu,再次make uImage, 报错如下![]()
内核没有定义 d_alloc_root

我们在内核搜索下s_root看下别的文件系统怎么使用的。


全部修改后,将yaffs_vfs.c上传到ubuntu,再次make uImage,报错如下

估计是缺少下划线
修改完后重新编译 报错
同样,没有在SI工程中找到yaffs_mtdif1.c,从ubuntu中拷贝下来,添加到si工程中。 上图报错的各个文件内的函数都要添加下划线
编译报错
把ubuntu上的yaffs_mtdif2.c文件拷贝到本地假如si工程,继续上述文件中的下划线
最终编译成功

拷贝
cp arch/arm/boot/uIamge /work/nfs_root/uImage_yaffs
由于上章-我们制作了文件系统,名为fs_mini_mdev_new,所以直接使用mkyaffs2image工具制作:
mkyaffs2image fs_mini_mdev_new fs_mini_mdev_new.yaffs2
然后通过uboot来烧写yaffs2、烧写uImage发现没成功,我们用替代法查找问题 UBOOT可能有问题:换上1.1.6的UBOOT,文件系统启动成功 发现1.1.6的UBOOT没问题,所以就是我们移植的新UBOOT有BUG:
driversmtdnandNand_util.c
if (!need_skip && !(flags & WITH_DROP_FFS)) {改为
if (!need_skip && !(flags & WITH_DROP_FFS) && !(flags & WITH_YAFFS_OOB)) {最后启动yaffs2成功:

史海拾趣
|
单片机开发只用C和汇编? 原来想搞单片机 不会C 从C学起 听人讲:既然学习C,可以直接从C++起步 开始学习C++ 又听人讲: 要是想搞单片机的话 单片机开发只用C和汇编 C++没有用 ¥#@……%@&%……*&%……(… 查看全部问答> |
|
嵌入式培训专家华清远见600元代金券200元转让 具体内容请看www.farsight.com.cn 培训内容很精,我听过驱动班,很不错的。 需要的请联系13581898986, 北京… 查看全部问答> |
|
有没人在弄IMX51+WINCE60? 我的系统怎么跑不起来啊,也不知道是软件问题还是硬件问题 有没人在弄IMX51+WINCE60? 我的系统怎么跑不起来啊,也不知道是软件问题还是硬件问题… 查看全部问答> |
|
在修改config.h文件时,引导行写的网卡类型为fei,发现下载不了!想问问是不是pc104的网卡(82559er)需要添加驱动网卡驱动??请各位指点迷津!谢谢了!!!… 查看全部问答> |
|
4种模式旋转LED,通过红外遥控切换任何一种模式。分别有立体显示字模式(通过上位机改立体显示字),平面显示字模式,平面显示数字钟模式,平面模拟表盘模式。 采用无线供电也很给力,支持平面和立体一起显示,非常赞 ...… 查看全部问答> |
|
为什我我的modelsim始终添加不上xilinx的库文件呢?请各位看看我哪里操作的不对? 大家好: 我想用modelsim对xilinx工程进行仿真,但是现在xilinx库文件怎么都加不进去,各位帮我看看,我是不是漏掉了什么操作 首先 modelsim 和 ISE肯定都安装好了 然后点击ISE的“ Simulation Libra ...… 查看全部问答> |




