最近由于项目原因,要在RK3308的平台上移植一个nand flash的文件系统,有UBI和yaffs备选,由于nand flash容量的问题,最后选择了yaffs(容量低的建议选择yaffs,容量高的选择UBI)。下面详细介绍下移植yaffs的步骤。
首先去官网down下yaffs的源码,路径为:
git clone https://github.com/Aleph-One-Ltd/yaffs2.git
需要在linux下用git下载,没有git的就apt install安装一下。
代码下载之后,读一下yaffs/linux目录下的README.md,里面介绍了给kernel打patch的操作,具体如截图所示:
这样就会在Linux的menuconfig中增加yaffs相关的配置,如果要开启yaffs文件系统,需要进入kernel目录,用make menuconfig的方式打开yaffs,具体操作如下截图所示:
这样就在kernel中打开了yaffs文件系统。保存退出。然后make savedefconfig。最后编译kernel烧录进终端。
接下来需要制作mkyaffs2image工具,在下载源码中的yaffs2/utils目录下运行make脚本,但是我这里编译不过,得改make脚本,懒得改,就去网上找了个mkyaffs2image的工具,如下:
解压之后,把mkyaffsimage拷贝到sbin目录下,就可以正常使用啦(或者用绝对路径调用也可以)。然后运行打包命令
./mkyaffs2image rootfs/ rootfs.img
即把rootfs目录打包成rootfs.img,然后再把这个rootfs烧录到终端里面去,就可以啦。
我这里是把rootfs烧录到了userdata分区,然后再终端里面挂载,命令如下:
mount -w -t yaffs2 /dev/mtdblock6 /userdata
最后用mount指令查看当前挂载的文件系统:
挂载上之后就可以在userdata里面去创建文件啦。最后哪个分区要用yaffs的话需要在build.sh脚本中加mkyaffs2image打包命令,就可以把对应分区打包成yaffs文件系统。