如需转载请表明出处,谢谢!
--------------------------------------------------------------------------------------------------------------------
分区方法
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 必须要跟你当前平台的flash的mtd-id一致,不然整个mtdparts会失效 怎样获取到
当前平台的flash的mtd-id?在bootargs参数列表中,可以指定当前flash的mtd-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)
|
可以看到,我们可以手动设置分区了。最后还要恢复默认。
|