linux分区命令mtd,修改IPQ4019/4018的MTD分区

简介

高通的IPQ4018的SoC使用了ARM的CPU,并使用了高通的QSDK.

在开发中发现很难在它的架构中去修改MTD分区信息。

今天就提供一种可以修改MTD分区的方式。

MTD分区信息是如何从Uboot传到linux的,有几种方式?

换一种问法 uboot如何把参数传入linux呢?

cmdline和FTD(设备树)

先讲一下简单的cmdline

Uboot以bootarg命令的方式把cmdline传递给linux内核。内核在启动过程中会读取cmdline中的各个参数,并做相关的处理。

其中一个参数是mtdparts.

mtdparts=ath-nor0:256k(u-boot),64k(u-boot-env),9600k(uImage),5760k(custom),640k(nvram),64k(art),9600k@0x50000(firmware)

mtdparts就是flash的分区信息。Linux按这个信息对flash进行区与区的隔离与读写。

除了uboot以bootarg命令传递cmdline。还有种方式IMAGE_CMDLINE_HACK的特性。这是内核编译选项,打开它后,编译linux系统的.config中配置CONFIG_CMDLINE.这样linux自己带着参数,就可以不麻烦uboot里配置了。

如果用户在uboot里配置了bootarg又在linux里编译了CONFIG_CMDLINE,有两个参数,那系统使用哪一个呢?

这个我没仔细读代码。大家可以自己试一试。

再说设备树的方式

有关设备树的知识比较庞大。大家需要有一个背景知识。高通的IPQ4018就是使用设备树的方式向linux里传入各种参数。

IPQ4019的分区信息的传递过程请见下文

uboot把系统分区的信息从相应的区块中读取(如上文的nor-system-partition-ipq40xx.bin)。然后再去把信息加工成设备树(或是of_node信息),挂到设备树的上。然后启动linux.

Linux自然就从设备树上读到了分区的信息,解析分区信息的软件模块叫ofparts。

如下图的打印,在ofpart上发现了分区信息。

a13ddc46a3501a6509ccbb0fd711d594204.jpg

修改IPQ4019的分区信息的机制

上一节讲到了两种分区信息的传递方式。那么IPQ4019用这种设备树的方式。对我们来说太麻烦了。

但是IPQ4019也是支持IMAGE_CMDLINE_HACK。

我们在内核代码中把ofparts机制关掉,在编译项目中打开IMAGE_CMDLINE_HACK并且配置好CONFIG_CMDLINE就可以了。

具体修改如下:

CONFIG_ATAGS 打开ATAGS功能,linux内核去读取CMDLINE

CONFIG_CMDLINE_FORCE 就是上文的IMAGE_CMDLINE_HACK的替换者。不处理uboot输入的参数。

9a6ab18183fbc6af1cd92046fc87a0fca98.jpg

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值