10. u-boot-2016.03移植之修改源码烧写JFFS2、烧写YAFFS与制作补丁
前面我们通过修改uboot的代码让它支持串口、nand flash,nor flash,网络下载文件等功能,现在我们来实现最后一个功能,实现Uboot烧写YAFFS文件系统,同时制作uboot补丁方便以后的移植,避免重复造轮子。
10.1 烧写JFFS2文件系统
该uboot已经支持JFFS2文件系统的烧写了,我们先来烧写JFFS2文件系统,命令如下:
nfs 30000000 192.168.0.103:/home/book/works/first_fs/fs_mini_mdev.jffs2 //使用nfs下载fs_mini.jffs2文件系统到30000000地址
nand erase.part rootfs //擦除rootfs分区
nand write.jffs2 30000000 rootfs $filesize //使用nand write.jffs2将30000000地址的大小为filesize的文件写到rootfs分区
烧写完后,需要先设置文件系统的类型,在uboot中输入命令:
setenv bootargs console=ttySAC0 root=/dev/mtdblock3 rootfstype=jffs2
然后下载uImage:
nfs 32000000 192.168.0.103:/home/book/works/first_fs/uImage_4.3 //该uImage_4.3是Jz2440开发板资料提供的映像文件
然后输入以下命令,启动linux内核:
bootm 32000000
从下图的打印信息可知,linux成功挂载了JFFS2文件系统,启动成功。

10.2 修改代码支持YAFFS文件系统烧写
当前uboot不支持烧写YAFFS文件系统,可以验证一下,在uboot下执行以下命令:
nfs 30000000 192.168.0.102:/home/book/works/first_fs/fs_mini_mdev.yaffs2
nand erase.part rootfs
nand write.yaffs 30000000 rootfs $filesize
打印信息如下:

上图显示:Unknown nand command suffix '.yaffs'.,说明此时的uboot还没有支持yaffs文件系统是烧写。
在uboot源码目录中搜索:Unknown nand command suffix,定位到cmd/nand.c 的do_nand函数,发现在do_nand函数里,有nand read或write的代码,而其中有对jffs2的支持,却并没有对yaffs2的支持。我们可以参考老版本的uboot(例如u-boot-2012.04.01的),在do_nand函数里的nand write/read部分加上一段代码,如下:
#ifdef CONFIG_CMD_NAND_TRIMFFS
} else if (!strcmp(s, ".trimffs")) {
if (read) {
printf("Unknown nand command suffix '%s'\n", s);
return 1;
}
ret = nand_write_skip_bad(nand, off, &rwsize, NULL,
maxsize, (u_char *)addr,
WITH_DROP_FFS | WITH_WR_VERIFY);
#endif
/*上面是原代码,在这里添加如下代码*/
#ifdef CONFIG_CMD_NAND_YAFFS
} else if (!strcmp(s, ".yaffs")) {
if (read) {
printf("Unknown nand command suffix ‘%s‘.\n", s);
return 1;
}
ret = nand_write_skip_bad

本文详细介绍了如何在U-Boot 2016.03中移植并支持YAFFS文件系统,包括修改源码、烧写YAFFS文件系统、制作补丁等步骤,确保Linux内核能够成功启动并挂载YAFFS文件系统。

6227

被折叠的 条评论
为什么被折叠?



