NXP的mfgtool镜像烧写工具是如何对EMMC进行分区的

本来是想在IMX6ULL板卡上实现u-boot中显示开机logo的功能的,过程中就牵扯出了这几个问题。大概的缘由是修改了u-boot后,想在系统中直接对EMMC中u-boot进行更新,就不用通过SD卡或USB重新烧写了;在更新的时候,又需要知道u-boot、logo图片存放在EMMC中的具体位置,所以就有了下面这3个问题问题,本文主要针对第3个问题摸索的过程记录

1、u-boot中如何添加开机logo

2、如何在系统中更新u-boot、zImage、dtb

3、EMMC是如何分区的

一、EMMC分区

1、分区

对于I.MAX6U来说,烧写过Linux系统的SD卡或EMMC会分为三个分区:

第0分区:存放uboot,没有文件系统

第1分区:存放系统镜像(zImage)、设备树(.dtb),采用的是FAT格式

第2分区:存放的系统的根文件系统,采用的是EXT4格式

所以更新uboot是从第0分区开始的。可以通过下面指令查看EMMC的分区:

mmc dev 1 //切换到EMMC

mmc part //查看emmc的分区情况。会发现第0个分区识别不出来,是因为第0分区没有格式化,实际上第0个分区是存在的

烧过系统的EMMC分区如下:

可见EMMC的分区是这样的

分区/存放内容

开始扇区/起始地址

扇区数据/大小

0/uboot

0

10MByte

1/镜像、设备树

20480 / 10MByte

1024000 / 500M

2/rootfs

1228800 / 600Myte

14041088 / 6856M(6G)

可以通过下面指令查看EMMC分区里的内容:

//查看EMMC设备分区1的内容,因为该分区是FAT的,所有需要使用fat相关的命令

fatinfo mmc 1:1

2、分区的起始地址和大小

现在只是知道了EMMC有3个分区,但是这3个分区的起始地址和大小是怎么设置的,能不能修改?要想搞清楚,就得先弄清楚谁是第一个对EMMC进行分区操作的,那就是mfgtool工具,所以从mfgtool工具的.vbs烧写脚本中应该就能找到答案。mfgtool烧写原理不在这里赘述,大概的一个调用过程是 :xxx.vbs ---> MfgTool2.exe ---> \Profiles\Linux\OS Firmware\ucl2.xml。打开ucl2.xml配置

可以看出来,是调用了 mksdcard.sh脚本对 /dev/mmcblk1 设备进行了分区,该脚本就在同级目录下:

该脚本是个tar的压缩包,解压缩后打后内容如下

#!/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

sfdisk --force ${node} << EOF
${BOOT_ROM_SIZE}M,500M,0c
600M,,83
EOF

第15行,node=/dev/mmcblk1

第18行,调用sfdisk硬盘分区工具程序,对 /dev/mmcblk1进行分区,命令介绍

第19行,0C 表示windows FAT分区,83表示LINUX分区。表示从EMMC的10M位置到500M位置为第一分区,至于前面的10M作用,估计是存放UBOOT部分,而第一分区在我开发板上存放kernel和dtb的。

第20行,表示的是从600M 以后的所有内存都为第二分区,也就是存放rootfs

分析后发现这里的空间分配跟在uboot中查看的分区情况是一致的。所以如果要想修改EMMC中各分区的起始地址和大小,或是增加新的分区,只需要修改mksdcard.sh 脚本,按照 {始地址,结束地址,分区类型} 的格式添加即可,注意要添加单位M,不然分配的内容就不对了。

二、测试验证

1、将rootfs改为1G大小,之后的空间用来存放数据

sfdisk --force ${node} << EOF
${BOOT_ROM_SIZE}M,500M,0c  //分配了490M,存放kernel 、dtb
600M,1624M,83 //分配了1024M,存放rootfs
1624M,,83 //之后的空间都用作存放 appdata
EOF

2、制作并替换调原来的mksdcard.sh.tar

3、通过mfgtool重新烧写系统后,在u-boot中可查看分区情况。可以发现已经多增加了一个分区

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值