2440超详细uboot移植笔记(十五)------支持YAFFFS文件系统

xiaoxiao2021-02-27  351

你好!这里是风筝的博客,

欢迎和我一起交流。


a.u-boot本身支持对jffs2格式文件系统的nand指令操作,但是没有支持yaffs2的格式,所以我们要修改使其支持yaffs2格式文件系统指令操作。

在u-boot中搜索.yaffs,并找不到相关代码,所以我们转而搜索.jffs2 ,可以在u-boot-2016.05\cmd\nand.c:do_nand函数中发现相关代码。

观察可发现u-boot关于nand的操作指令就是在u-boot-2016.05\cmd\nand.c:do_nand函数中。

 

b. 在nand.c文件(路径:cmd\nand.c)的do_nand函数中,

找到CONFIG_CMD_NAND_TRIMFFS的#ifdef语句,

在其#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(mtd, off, &rwsize, NULL, maxsize, (u_char *)addr, WITH_YAFFS_OOB); #endif

 

 

 

 

c. 在nand.h(路径:include\nand.h)文件中,添加一个宏定义:

#define WITH_YAFFS_OOB (1 << 0)

 

 

d .在nand_util.c(路径:drivers\mtd\nand\nand_util.c)文件中的nand_write_skip_bad函数中,添加如下代码:

接下来if (!need_skip && !(flags & WITH_DROP_FFS){修改为:

if (!need_skip && !(flags & WITH_DROP_FFS) && !(flags & WITH_YAFFS_OOB)) {

 

 

 

 

e. 在mtd.h(路径:include\linux\mtd\mtd.h)文件中,添加:

typedef enum { MTD_OOB_PLACE, MTD_OOB_AUTO, MTD_OOB_RAW, } mtd_oob_mode_t;

 

f.在smdk2440.h添加宏定义:

#define CONFIG_CMD_NAND_YAFFS

 

g.make编译之后,会发现报错:

./scripts/check-config.sh u-boot.cfg \

 

                ./scripts/config_whitelist.txt . 1>&2

comm: file 2 is not in sorted order

Error: You must add new CONFIG options using Kconfig

The following new ad-hoc CONFIG options were detected:

 

h.我们可以把顶层Makefile的这两句话用#注释掉:

 

$(srctree)/scripts/check-config.sh u-boot.cfg \

$(srctree)/scripts/config_whitelist.txt ${srctree} 1>&2

 

i. 据说把scripts/config_whitelist.txt文件中所有2410字样改成2440可以完美解决出现的报错,而不需要像h那样做,有待考证.

 

 

j. 如果烧写的是jffs2文件,记得设置bootargs=console=ttySAC0,115200 root=/dev/mtdblock3 rootfstype=jffs2

 

 

-----------------------------------------------(完)-----------------------------------------------

小记:

uboot现在是271k左右,感觉还是有点大,应该还可以继续剪裁下

 

 

 

转载请注明原文地址: https://www.6miu.com/read-5983.html

最新回复(0)