移植uboot第九步:支持yaffs映像烧写

写在前面:

我的博客已迁移至自建服务器:博客传送门,CSDN博客暂时停止,如有机器学习方面的兴趣,欢迎来看一看。

此外目前我在gitHub上准备一些李航的《统计学习方法》的实现算法,目标将书内算法全部手打实现,欢迎参观并打星。GitHib传送门

正文

uboot启动以后,先烧写jffss看看能不能用

tftp 30000000 fs_mini_mdev.jffs2
nand erase.part rootfs
nand write.jffs2 30000000 0x00260000 5b89a8

“5b89a8”是实际文件的大小,下载以后会显示的,直接copy过来就可以了。这个时候还不能直接启动,uboot传给内核的参数需要修改

bootargs=console=ttySAC0 root=/dev/mtdblock3 

修改为

bootargs=console=ttySAC0 root=/dev/mtdblock3 rootfstype=jffs2

说明根文件系统的格式是jffs2的。
命令:boot 启动。
结果:成功启动jffs格式的根文件系统

再来试试yaffs格式的根文件
uboot的参数修改为

bootargs=console=ttySAC0 root=/dev/mtdblock3 rootfstype=yaffs2

烧写YAFFS

tftp 30000000 fs_mini_mdev.yaffs2
nand erase.part rootfs
nand write.yaffs 30000000 260000  889bc0

出现错误,说没有yaffs,进入文件查找

#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,
						(u_char *)addr, WITH_YAFFS_OOB);
#endif

CONFIG_CMD_NAND_YAFFS没有宏定义,将其在s3c2440.h文件中宏定义。
此外还需要一些修改,我直接跟着韦东山改的,是uboot里面逻辑之类的错误,不好好查代码根本查不出来。
在刚才的函数中找到nand_write_skip_bad函数,进入
a.找到下面这段代码

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;
			}

修改为

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;
			}

b.在上面代码的上方的

ops.mode = MTD_OOB_AUTO;

修改为

ops.mode = MTD_OOB_RAW;

编译,烧写。成功启动根文件系统

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值