移植uboot-2012.04.01到JZ2440(六 设置mtd分区表)

前言:这节继续移植uboot,让它支持mtd分区

一、mtd分区规划及其作用

uboot支持各种设备之后,接下来的工作就是烧写内核、烧写文件系统,所以需要对整块Nand Flash的空间作以规划,大致分为以下四个空间即可:
bootloader空间
内核参数空间
内核空间
文件系统空间

但是目前我们仅知道uboot.bin被裁剪到了217KB,而不知道其它三个空间的信息,而且是第一次移植,对内核参数占用空间、内核空间的大小没有概念,所以我们需要借助别人已经制作好的内核和文件系统来查看这个信息。

启动JZ2440官方提供的uImage_4.3内核之后可以看到对整块Nand Flash的MTD分区信息:
在这里插入图片描述
mtd的作用仅仅是给地址起个别名,方便使用,比如要烧写内核时要写0x00060000这个地址,就可以用 mtd2 这个名字代替,使代码变得更加通用。

二、 开启mtdparts命令支持

2.1添加宏CONFIG_CMD_MTDPARTS

mtdparts命令的相关实现在common/cmd_mtdparts.c文件中,目前uboot命令中无此命令,所以查看其同目录的makefile文件,将此文件加入工程中编译。
在这里插入图片描述
这里编译该文件需要CONFIG_CMD_MTDPARTS这个宏,所以我们在单板的配置文件中加入该宏,这个宏之前被我们屏蔽掉了 ,现在打开:
在这里插入图片描述

2.2. 添加宏CONFIG_MTD_DEVICE

上面添加mtd之后编译发现报错,如下:
在这里插入图片描述
发现错误是命令实现文件中有函数未定义,找到该函数定义在 drivers/mtd/mtdcore.c 文件中,说明此文件没有包含到工程中,继续查看mtdcore.c 文件目录中的makefile,可以看到需要定义宏CONFIG_MTD_DEVICE:
在这里插入图片描述
我们接着打开这个宏,然后编译,发现编译成功,烧写到开发板,发现已经支持mtdparts命令了。
在这里插入图片描述
在这里插入图片描述

2.3. 添加默认配置宏

我们在串口下使用mtdparts命令,发下报错,提示mtdids没有定义,当前没有默认值。搜索此mtdids,查找问题,果然在文件common/cmd_mtdparts.c中找到结果:
在这里插入图片描述
在这里插入图片描述

既然需要这两个宏,我们就在配置文件中添加这两个宏,仿照别的文件添加就行
在这里插入图片描述

再次编译,下载到开发板进行测试:
在这里插入图片描述
这次mtd_parts正常打印出了刚刚设置的默认mtdids和mtdparts信息。

2.4. 测试mtdparts分区表是否可以正常使用

首先使用如下命令设置默认分区表,接着擦除四个分区:
在这里插入图片描述
擦除没有问题,再进行内核烧写测试:

nand write 30000000 kernel

在这里插入图片描述

2.5自动执行mtdparts default命令

这里我们想不用先手动执行mtdparts default,所以在main_loop之前添加这行代码,自动执行命令:
在这里插入图片描述

三、测试

上面修改后我们直接编译,烧写,上电之后执行mtdparts查看分区表,分区表已经设置成功,正常打印:
在这里插入图片描述
再来测试使用mtd分区名称烧写内核:
在这里插入图片描述
接着重新上电,从nand flash中读取出内核:
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值