讯为三星iTOP4412 将eMMC分区扩大的问题。
讯为三星iTOP4412 使用fdisk -c 0 2700 300 300 进行分盘,
这样/dev/mmcblk0p2的大小只有2.7G。
而最后的ubuntu系统时运行在/dev/mmcblk0p2,取掉ubuntu本身的解压文件,/根目录下只剩下1G多的空间,根本不够用。
eMMC本身又16G,我想把/dev/mmcblk0p2分到12G以上。
于是使用fdisk -c 0 12700 300 300 发现分区后/dev/mmcblk0p2只有几百M,觉得很奇怪。。
多次实验后发现fdisk -c 0 X 300 300 份盘,当X=4000的时候/dev/mmcblk0p2能分到4G;但是当X=5000以上的时候/dev/mmcblk0p2能分区成功,但是只能分到几百M。
立刻开查4412的u-boot,查了几个小时后查到了原因:
/common/Cmd_mmc_fdisk.c里面的 unsigned int calc_unit(unsigned int length, SDInfo sdInfo),
length定义的是unsigned int,是32bit的。
但是调用的时候输入是unsigned long long,是64bit的。
block_offset = calc_unit((unsigned long long)simple_strtoul(argv[3], NULL, 0)*1024*1024, sdInfo);
所以这个过程中,丢了高位置信息,改掉这个bug,重新编译uboot。
再使用使用fdisk -c 0 12700 300 300 成功的将/dev/mmcblk0p2分到了12.7G。
-----------------------------上善若水,大智若愚-----------------------------------