300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > omapl138移植uboot系列之添加MTD分区(第七篇)

omapl138移植uboot系列之添加MTD分区(第七篇)

时间:2023-04-11 23:59:08

相关推荐

omapl138移植uboot系列之添加MTD分区(第七篇)

如果你刚刚使用仿真器的方式烧录了uboot镜像,你肯定会感叹实在是太慢了,先别叹气,看完本节你将爱上烧录程序。

2.6.1添加MTD分区

MTD(memory Teachno Device)中文翻译为“内存技术设备”,是Linux系统对“NorFlash”,“NandFlash”等存储设备抽象出来的一个设备层,它向上提供统一的访问接口,屏蔽底层硬件的操作,而uboot中分区只是为了方便操作,例如我想将SPIFlash地址0x00010000处偏移量为1M的数据加载到内存地址0xC2000000处,一般情况,我们都是这样写:

sf read 0xC2000000 0x00010000 100000

但如果有了uboot的分区,我们可以写

sf read 0xC2000000 uboot

一言以蔽之“uboot中的mtd分区只是代码的一种手段,方便我们使用,用名字代替一些数字”

2.6.1.1 修改uboot代码,支持MTD分区

Driver/mtd/spi/sf_mtd.c文件,增加以下代码,添加MTD设备,由于我们使用的是SPIFlash,属于norflash,故将此命名为“nor0”。

2.6.2.2 添加MTD配置

代码修改完成了,但现在还是不能编译的,不信你编译一下看看driver/mtd/spi目录下是否有sf_mtd.o文件,接下来我们要做的是通过make menuconfig图形界面将MTD相关的模块添加进编译链接。

首先> Device Drivers > SPI Flash Support> [*]SPI Flash MTD support

然后> SPL / TPL> [*] Support MTD drivers

然后保存退出,编译完成后,暂时先不要烧录。

2.6.2.3 两个重要的环境变量

对于目前的U-boot而言,设置了mtdparts变量之后,你可以在sf read/write/erase命令中直接使用分区的名字而不必指定分区的偏移位置.

按照上述代码修改,我们已经将SPIFlash添加进MTD,然后我们就可以根据自己项目的需要,对SPIFlash进行分区了,以639B项目为例,我想要将SPIFlash按照下表描述进行MTD分区。

不必修改代码,只要修改两个环境变量即可完成上述分区,uboot命令行下按照顺序输入下图红线标识的命令。

set mtdids nor0=639b_nor0

set mtdparts mtdparts=639b_nor0:64k@0(spl),512k@64k(uboot),64k@576k(env),3m@1m(kernel),1m@4m(arm_app),1m@5m(dsp_ubl),1m@6m(dsp_app),3m@7m(rootfs)

首先解释下mtdids环境变量,该变量注册了一块MTD设备,该设备是norflash类型,编号为0,该MTD设备命名为“639b_nor0”。

mtdids是对整块Flash设备进行MTD描述,那么mtdparts就是对这块MTD设备进行分区描述了,以上设置的意思是:以SPIFlash 0x0地址为参考,从第0K开始连续64k空间命名为“spl”分区,从第64K开始连续512K空间命名为“uboot”分区,从第576K开始连续64K空间命名为“env”分区,从第1M开始连续3M空间命名为“kernel”分区,从第4M开始连续1M空间命名为“arm_app”分区,从第5M开始连续1M空间命名为“dsp_ubl”分区,从第6M开始连续1M空间命名为“arm_app”分区, ,从第7M开始连续3M空间命名为“rootfs”分区。

uboot命令行下,输入“mtd”命令,分区显示如下。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。