讯为三星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。

 

posted @ 2019-03-07 15:07  愚人1984  阅读(756)  评论(0编辑  收藏  举报