现在的位置: 首页 > 综合 > 正文

U-boot中添加mtdparts支持

2014年09月05日 ⁄ 综合 ⁄ 共 2936字 ⁄ 字号 评论关闭


 

 如需转载请表明出处,谢谢!

--------------------------------------------------------------------------------------------------------------------

      分区方法

     1)MTD层的分区

     2)通过U-boot传递给内核的命令行中的mtdparts=...

     3)其他可以让内核知道分区信息的任何办法,(内核默认的命令参数)

     下面说到mtdparts,及它的用法:

   mtdparts  

   mtdparts=fc000000.nor_flash:1920k(linux),128k(fdt),20M(ramdisk),4M(jffs2),382

72k(user),256k(env),384k(uboot)要想这个参数起作用,

      内核中的mtd驱动必须要支持,即内核配置时需要选上

       Device Drivers  --->

            Memory Technology Device (MTD) support  --->

          Command line partition table parsing

   mtdparts的格式如下:

    mtdparts=<mtddef>[;<mtddef]

    <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>)

       这有几个需要注意的地方:

      a.mtd-id 必须要跟你当前平台的flashmtd-id一致,不然整个mtdparts会失 怎样获取

当前平台的flashmtd-id在bootargs参数列表中,可以指定当前flashmtd-id指定 mtdid

s:nand0=gen_nand.1,前面的nand0则表示第一个flash

      b.size在设置的时候可以为实际的size(xxM,xxk,xx),也可以为'-'这表示剩余的所有空间。

关信息可以查看drivers/mtd/cmdlinepart.c中的注释找到相关描述。

       U-boot环境变量有两个,他们分别是: bootcmd 和bootargs。

     至于在我们自己的at91sam9263ek板子上为了实现mtdparts分区命令的支持需要在U-boot

-2010.06/include/configs/at91sam9263ek.h中添加相关的宏定义

#define CONFIG_CMD_MTDPARTS

#define CONFIG_MTD_DEVICE

#define CONFIG_MTD_PARTITIONS

加入MTD分区信息:

#define MTDIDS_DEFAULT "nand0=atmel_nand"

#define MTDPARTS_DEFAULT            "mtdparts=atmel_nand:15M@0(cramfs)," \

                                    "15M(jffs2)," \

                                    "30M(yaffs2)," \

                                    "-(user)"

        保存后退出,回到根目录,重新make

[root@localhost u-boot-2010.06]#make at91sam9263ek_dataflash_cs0_config

[root@localhost u-boot-2010.06]#make all

        将重新编译的u-boot.bin烧到dataflash中,使用mtdparts查看分区:

U-Boot> mtdparts

device nand0 <atmel_nand>, # parts = 4

 #: name               size           offset         mask_flags

 0: cramfs             0x00f00000     0x00000000     0

 1: jffs2              0x00f00000     0x00f00000     0

 2: yaffs2             0x01e00000     0x01e00000     0

 3: user               0x04400000     0x03c00000     0

active partition: nand0,0 - (cramfs) 0x00f00000 @ 0x00000000

defaults:

mtdids : nand0=atmel_nand

mtdparts: mtdparts=atmel_nand:15M@0(cramfs),15M(jffs2),30M(yaffs2),-(user)

        重新设置分区:

U-Boot> setenv mtdparts mtdparts=atmel_nand:30M@0(a),30M(b),-(c)

U-Boot> save

Saving Environment to dataflash...

U-Boot> mtdparts

device nand0 <atmel_nand>, # parts = 3

 #: name               size           offset         mask_flags

 0: a                  0x01e00000     0x00000000     0

 1: b                  0x01e00000     0x01e00000     0

 2: c                  0x04400000     0x03c00000     0

active partition: nand0,0 - (a) 0x01e00000 @ 0x00000000

defaults:

mtdids : nand0=atmel_nand

mtdparts: mtdparts=atmel_nand:15M@0(cramfs),15M(jffs2),30M(yaffs2),-(user)

        可以看到,我们可以手动设置分区了。最后还要恢复默认。

U-Boot>mtdparts default

抱歉!评论已关闭.