[Android]更换EMMC后,userdata容量为何不正确
在Android的开发过程中,我们经常会碰到,更换了一个较大的EMMC芯片后,烧录完镜像,手机中userdata容量显示仍然和之前一样,并没有变大,具体是为什么呢?
操作方法
- 01
在Android最新的代码中,分区表partition.xml里面定义了宏:GROW_LAST_PARTITION_TO_FILL_DISK=true. 这个宏的作用就是:动态分配data分区的大小;就是说EMMC的总容量减去其它分区的容量,剩下的都是data分区的。所以分区的大小不用修改,会自动适应。 这一点可以通过adb shell -》cat /proc/partitions 看到类似如下图的内容,其中最大的分区mmcblk0p40就是data分区了。(这里的单位是KB)
- 02
那么既然data分区的实际大小没问题,为什么手机中看到的容量不对呢? 这就需要提到文件系统的概念了,因为每次烧录手机的时候,是将data.img烧录到分区中,所以分区的文件系统中的容量信息都是包含在data.img中了。 这个容量是通过文件/device/platform/BoardConfig.mk中的参数来定义的: BOARD_USERDATAIMAGE_PARTITION_SIZE := 1860632576 (单位是Byte)
- 03
所以,解决方法很简单,就是将BOARD_USERDATAIMAGE_PARTITION_SIZE 的值设置为我们在/proc/partitions 中看到的分区实际大小,也就是12460032(KB)x1024(Byte/KB)=12759072768(Byte)
- 04
注意1:其实在容量显示不对的状态下,我们对手机执行下恢复出厂设置也会变为正确的容量的。因为这个操作会重新根据分区大小对data分区进行格式化操作,不再以data.img中的容量为准了。
- 05
注意2:如果直接设置成分区实际容量无法启动的话,不妨设置一个比分区容量小10MB的值,因为有时文件系统需要一些空间才能启动。