uboot 传递的参数 mtdparts

启动uboot后,在重新烧写程序之前,查看传递给内核的参数时(命令为: printenv),看到如下内容:

bootargs=console=ttyS0,115200 mtdparts=spi0.0:256k(u-boot),64k(u-boot-env),14528k(rootfs),1408k(uImage),64k(mib0),64k(ART) board=DB120

另外一块板子打印消息却是如下:

bootargs=console=ttyS0,115200 root=31:02 rootfstype=jffs2 init=/sbin/init mtdparts=ath-nor0:256k(u-boot),64k(u-boot-env),14528k(rootfs),1408k(uImage),64k(mib0),64k(ART)

有些迷茫,查找资料,得到要点如下.

Uboot 将分区信息(形如 mtdparts=xxx)添加到bootargs中,kernel在启动的时候会解析mtdparts.

下面说一下mtdparts,以及它的用法:

要想让Uboot中的mtdparts起作用,内核中必须支持mtd,机内核配置时需要选上:

Device Drivers   -->

   Memory Technology Device (MTD) support  -->

                  Command line partition table parsing

 

mtdparts 的格式如下:

     mtdparts=<mtddef>[;<mtddef]     

     mtdparts 可以由一个或多个 mtddef 组成。每个mtddef定义如下:

      <mtddef> := <mtd-id>:<partdef>[,<partdef>]

     mtddef 可以由mtd-id 和一个或多个partdef组成,每个partdef定义如下:

     <partdef> := <size>[@offset][<name>][ro]

     <mtd-id> := unique id used in mapping driver/device

     <size> := standard linux memsize OR "-" to denote all remaining space

     <name> := (NAME)

      因此在使用的时候,需要按照下面的格式来设置:

     mtdparts=mtd-id:<size1>@<offset1>(<name1>),<size2>@<offset2>(<name2>)

     这里需要注意的地方如下:

  (1) mtd-id 必须跟当前平台 flash 的 mtd-id 一致,不然整个 mtdparts会失效。如何获取当前平台的flash 的mtd-id? 在bootarg参数立邦中,可以指定当前falsh的 mtd-id, 指定mtdids:nand0=gen_nand.1,前面的 nand0 则表示第一个flash。

(2)size在设置的时候,可以为实际的size(xxM,xxK,xx),也可以为‘-’,表示剩余的所有空间,相关信息可以查看 drivers/mtd/cmdlinepart.c中注释找到相关描述。

 

备注:

target/linux/ar71xx/image/Makefile 中有关于分区的定义:

 db120_mtdlayout=mtdparts=spi0.0:256k(u-boot)ro,64k(u-boot-env)ro,6336k(rootfs),1408k(kernel),64k(nvram),64k(art)ro,7744k@0x50000(firmware)

  其中7744 这个大小为 rootfs + kernel = 6336 + 1408 = 7744

$(eval $(call SingleProfile,AthLzma,64k,DB120,db120,DB120,ttyS0,115200,$$(db120_mtdlayout),RKuImage))

posted @ 2017-05-12 10:22  hbg-rohens  阅读(2829)  评论(0编辑  收藏  举报