u-boot-2016.05移植:(7)、使u-boot支持烧写文件系统
2016-08-24 21:59
567 查看
u-boot本身支持对jffs2格式文件系统的nand指令操作,但是没有支持yaffs2的格式,所以我们要修改使其支持yaffs2格式文件系统指令操作,在u-boot中搜索
1、在u-boot-2016.05\include\configs\smdk2440.h中添加宏定义:
2、在u-boot-2016.05\cmd\nand.c:do_nand函数中的
之后添加
3、在u-boot-2016.05\include\nand.h中的
之后添加
4、在u-boot-2016.05\drivers\mtd\nand\nand_util.c:nand_write_skip_bad函数中用
来替换
5、在u-boot-2016.05\include\linux\mtd\mtd.h中的
之后添加
.yaffs,并找不到相关代码,所以我们转而搜索
.jffs2,可以在u-boot-2016.05\cmd\nand.c:do_nand函数中发现相关代码,观察可发现u-boot关于nand的操作指令就是在u-boot-2016.05\cmd\nand.c:do_nand函数中。u-boot-2016.05中并没有像u-boot-2012.04.01一样有yaffs的一套代码,因此部分代码需借鉴u-boot-2012.04.01。
1、在u-boot-2016.05\include\configs\smdk2440.h中添加宏定义:
#define CONFIG_CMD_NAND_YAFFS
2、在u-boot-2016.05\cmd\nand.c:do_nand函数中的
#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(nand, off, &rwsize, NULL, maxsize, (u_char *)addr, WITH_YAFFS_OOB); #endif
3、在u-boot-2016.05\include\nand.h中的
#define WITH_WR_VERIFY (1 << 1) /* verify data was written correctly */
之后添加
#define WITH_YAFFS_OOB (1 << 0) /* whether write with yaffs format. This flag * is a 'mode' meaning it cannot be mixed with * other flags */
4、在u-boot-2016.05\drivers\mtd\nand\nand_util.c:nand_write_skip_bad函数中用
#ifdef CONFIG_CMD_NAND_YAFFS if (flags & WITH_YAFFS_OOB) { int page, pages; size_t pagesize = nand->writesize; size_t pagesize_oob = pagesize + nand->oobsize; struct mtd_oob_ops ops; ops.len = pagesize; ops.ooblen = nand->oobsize; ops.mode = MTD_OOB_RAW; ops.ooboffs = 0; pages = write_size / pagesize_oob; for (page = 0; page < pages; page++) { WATCHDOG_RESET(); ops.datbuf = p_buffer; ops.oobbuf = ops.datbuf + pagesize; rval = nand->_write_oob(nand, offset, &ops); if (rval) break; offset += pagesize; p_buffer += pagesize_oob; } } else #endif { truncated_write_size = write_size; #ifdef CONFIG_CMD_NAND_TRIMFFS if (flags & WITH_DROP_FFS) truncated_write_size = drop_ffs(nand, p_buffer, &write_size); #endif rval = nand_write(nand, offset, &truncated_write_size, p_buffer); if ((flags & WITH_WR_VERIFY) && !rval) rval = nand_verify(nand, offset, truncated_write_size, p_buffer); offset += write_size; p_buffer += write_size; }
来替换
truncated_write_size = write_size; #ifdef CONFIG_CMD_NAND_TRIMFFS if (flags & WITH_DROP_FFS) truncated_write_size = drop_ffs(nand, p_buffer, &write_size); #endif rval = nand_write(nand, offset, &truncated_write_size, p_buffer); if ((flags & WITH_WR_VERIFY) && !rval) rval = nand_verify(nand, offset, truncated_write_size, p_buffer); offset += write_size; p_buffer += write_size;
5、在u-boot-2016.05\include\linux\mtd\mtd.h中的
struct mtd_erase_region_info { uint64_t offset; /* At which this region starts, from the beginning of the MTD */ uint32_t erasesize; /* For this region */ uint32_t numblocks; /* Number of blocks of erasesize in this region */ unsigned long *lockmap; /* If keeping bitmap of locks */ };
之后添加
/* * oob operation modes * * MTD_OOB_PLACE: oob data are placed at the given offset * MTD_OOB_AUTO: oob data are automatically placed at the free areas * which are defined by the ecclayout * MTD_OOB_RAW: mode to read raw data+oob in one chunk. The oob data * is inserted into the data. Thats a raw image of the * flash contents. */ typedef enum { MTD_OOB_PLACE, MTD_OOB_AUTO, MTD_OOB_RAW, } mtd_oob_mode_t;
相关文章推荐
- U-Boot在FL2440上移植(四)----支持网卡DM9000和烧写yaffs文件系统
- <2012 12 06> FL2440开发板的U-boot-2010.09版本移植(十)支持烧写YAFFS2文件系统
- 移植U-BOOT之支持烧写YAFFS文件系统以及制作U-BOOT补丁
- u-boot-1.1.6下移植支持yaffs2文件系统的烧写
- 移植u-boot-2015.07-rc3之修改代码支持yaffs文件系统烧写(十)
- 06-S3C2440学习之移植2012u-boot到S3C2440(移植过程五--最终)裁剪+修改默认参数+分区设置+支持文件系统下载
- 移植u-boot-2010.09到三星SC32442平台(三):yaffs2文件系统写入支持
- u-boot移植(十三)---代码修改---支持文件系统及补丁制作
- imx515 uboot UBIFS移植及android UBIFS文件系统烧写
- 2012-03-14 22:27 U-BOOT支持烧写yaffs2文件系统
- 移植u-boot-2011.03到S3C2440(utu2440)的方法与步骤###8. u-boot引导启动nand flash中内核和根文件系统cramfs和用户文件系统yaffs2支持
- u-boot-2011.03在TQ2440上的移植(8)--支持下载yaffs2文件系统
- Porting:uboot烧写、linux内核烧写、根文件系统烧写:系统移植,nfs同步网络配置
- imx515 uboot UBIFS移植及android UBIFS文件系统烧写
- U-boot移植 (v2012.04.1 S3C2440平台) (五) DM9000驱动支持,yaffs文件系统下载支持
- imx515 uboot UBIFS移植及android UBIFS文件系统烧写
- 2440超详细uboot移植笔记(十五)------支持YAFFFS文件系统
- u-boot-2016.03 支持yaffs2文件系统烧写之添加nand write.yaffs2命令
- TX2440 ARM开发板Uboot移植(五、yaffs2文件系统的支持)
- uboot UBIFS移植及android UBIFS文件系统烧写 .