IMX6Q的EMMC分区
转载地址:http://blog.sina.com.cn/s/blog_9864c64a0102xpte.html
公司最近有个项目是用飞思卡尔的IMX6Q的核心板,刚好需要给EMMC重新分区,EMMC分区和其他的NADN或者NOR的分区不太一样。我在uboot和kernel(4.1.5)中没有找到任何给EMMC分区的相关内容。在网上找了一天的资料,都说在内核里面的什么什么对应文件,反正我找了半天没看见。自己摸索了半天,联系到PC的分区方式,转头从飞思卡尔的烧写工具mgftool入手,终于在这里找到突破口。具体的分区方法如下。
一、修改mgftool中的分区脚本
1、打开mgftool的目录,找到UCL2.XML文件,我这里的路径入下图:
2、打开ucl2.xml文件,找到你需要的启动方式的位置,我这里是EMMC-LINUX,然后查看对应的分区脚本名称,我这里的是mksdcard.sh.tar。
3、接下来就是修改分区脚本文件了,将mksdcard.sh.tar解压得到mksdcard.sh,然后打开这个脚本,修改里面的内容就行。mksdcard.sh内容如下:
#!/bin/sh
# partition size in MB
BOOT_ROM_SIZE=10
# wait for the SD/MMC device node ready
while [ ! -e $1 ]
do
sleep 1
echo “wait for $1 appear”
done
# call sfdisk to create partition table
# destroy the partition table
node=$1
dd if=/dev/zero of=${node} bs=1024 count=1
#这里的0C 表示windows FAT分区 83表示LINUX分区
sfdisk --force ${node} << EOF
${BOOT_ROM_SIZE}M,500M,0c #这里表示从EMMC的10M位置到500M位置为第一分区,至于前面的10M作用,不太清楚, 估计是存放UBOOT部分,而第一分区在我开发板上存放kernel和dtb的。
600M,,83 #这里表示的是从600M 以后的所有内存都为第二分区。
EOF
如果要添加多个分区的话,只需按下面分配规则即可,我这里的EMMC是8GB的,
第一分区存放kernel和dtb,
第二分区存放文件系统,
第三分区为设备运行数据存储区,
sfdisk --force ${node} << EOF
${BOOT_ROM_SIZE}M,500M,0c 这里分配了490M --kernel 、dtb
600M, 6744M,83 这里分配6G -- rootfs
6744M,,83 这里分配的是6G之后的所有内存 -- appdata
EOF
这里只分配了3个分区,如要分配更多分区,只需按照 {始地址,结束地址,分区类型}的格式添加即可。注意添加M,不然分配的内存就不对了。
4、修改完成后,将mksdcard.sh文件(注意这里是文件,不是文件夹,还有注意是在LINUX系统下打包为*.tar)打包为mksdcard.sh.tar并替换当前目录下的mksdcard.sh.tar压缩包文件。
二、重新烧写系统
完成上面第一步后,使用mgftool重新烧写系统。过程我就不说了~~
三、查看分区
烧写完成后,重新启动开发板,在系统启动过程中就可以看到打印的分区信息了,我这里没有开发板,就不上图了~~。我这里是有df指令是看不到新分配的分区的。系统启动完成后,到系统的/proc下查看分区信息,或者在dev目录下可以看到mmcblk*p*类似的设备。就表示分区完成了。
注意如果,修改分区的时候,更改了kernel、dtb或者文件系统的分区,注意修改uboot的环境变量,否则系统就会出现找不到kernel、dtb或者无法挂载文件系统的问题了。