2440超详细uboot移植笔记(十五)------支持YAFFFS文件系统
你好!这里是风筝的博客,欢迎和我一起交流。
如果本篇博客对您有帮助,或许可以在下方评论给我留个言。
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左右,感觉还是有点大,应该还可以继续剪裁下