移植uboot-2012.04.01到JZ2440(八,烧写内核与文件系统)

一、烧写内核

在上一篇文章中设置了默认内核启动参数和命令,如图:
在这里插入图片描述
启动时内核先会进行倒数计时,如果没有操作,就会执行图中的命令,从nand flash中的kernel 分区处读取内核到内存中的0x30000000处,也就是SDRAM起始地址,然后从0x30000000处启动内核。

所以,我们只需要将JZ2440官方提供的内核文件复制到TFTP服务器目录,然后将该内核文件提前烧写到nand flash的kernel分区即可,烧写方法如下:

tftp 30000000 uImage_4.3
nand erase.part kernel
nand write 30000000 kernel

在这里插入图片描述
然后重启开发板即可看到内核成功启动:

在这里插入图片描述
但是因为nand flash中还没有烧写文件系统,所以系统会停止在挂载文件系统的地方,接下来烧写文件系统。

二、 烧写 yaffs2 文件系统

2.1. 烧写测试

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

烧写时出现了yaffs命令不支持的问题:
在这里插入图片描述

2.2. 开启nand.yaffs命令支持

接下来定位这个问题,在 common/cmd_nand.c 文件中查看该命令的代码,可以看到,只有开启了宏定义 CONFIG_CMD_NAND_YAFFS,这段代码才会加入工程中编译
在这里插入图片描述
在单板配置文件 include/configs/smdk2440.h 中开启该宏定义:
在这里插入图片描述

接下来编译uoot,烧写到开发板中,再次进行yaffs烧写测试,烧写成功后重启开发板:
在这里插入图片描述

2.3. 解决uboot的小bug

经过对比原始文件系统文件内容和烧写到nand flash中的内容,发现烧写的 nand flash 第一页的oob数据不一致,导致往后全部没有烧写进去,根据 nand write.yaffs 命令执行过程,进入在文件drivers/mtd/nand/nand_util.c中的nand_write_skip_bad 函数,改正uboot中的bug
第一个bug:
在这里插入图片描述
在这里插入图片描述
重新编译,烧写uboot到开发板中,进行yaffs烧写测试,重启之后了可以看到文件系统成功挂载,进入到linux系统:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值