不同于一般的Android系统(一般Android系统分区信息在BoardConfig.mk BoardConfigCommon.mk中),RK平台的分区信息文件在自带的烧录工具包中的parameter文件中
如下是板子的parameter文件:
FIRMWARE_VER: 5.1.0
MACHINE_MODEL: Geekbox
MACHINE_ID: 007
MANUFACTURER: RK3368
MAGIC: 0x5041524B
ATAG: 0x00200800
MACHINE: 3368
CHECK_MASK: 0x80
PWR_HLD: 0,0,A,0,1
#KERNEL_IMG: 0x00280000
#FDT_NAME: rk-kernel.dtb
#RECOVER_KEY: 1,1,0,20,0
#in section; per section 512(0x200) bytes
CMDLINE: console=ttyS2 androidboot.baseband=N/A androidboot.selinux=permissive androidboot.hardware=rk30board androidboot.console=ttyS2 init=/init mtdparts=rk29xxnand:0x00002000@0x00002000(uboot),0x00002000@0x00004000(trust),0x00002000@0x00006000(misc),0x00008000@0x00008000(resource),0x00008000@0x00010000(kernel),0x00010000@0x00018000(boot),0x00010000@0x00028000(recovery),0x00038000@0x00038000(backup),0x00040000@0x00070000(cache),0x00002000@0x000B0000(kpanic),0x00200000@0x000B2000(system),0x00008000@0x002B2000(metadata),0x00002000@0x002BA000(baseparamer),0x00400000@0x002BC000(userdata),0x00020000@0x006BC000(radical_update),-@0x006DC000(user)
分区信息在mtdparts=rk29xxnand:字段后面部分,所以我们修改这部分内容就可以了
这部分信息格式介绍 如:
0x00002000@0x00002000(uboot) 分区大小计算为=0x00002000*512Bytes = 4MBytes
↑分区的sector数,每个sector=512Bytes
↑分区起始地址
↑分区名
0x00200000@0x002BC000(userdata) 分区大小0x00200000*512Bytes = 1073741824 Bytes
注: sector 512Bytes 逻辑单位???
page: FLASH操作的基本单位。 最小读/写单元 page, 1page = 4096Bytes = 4KB;
block:最小擦除单元 block,1block = (32 * page) = (32 * 4KB) = 131072Bytes = 128KB;
上述mtdparts=rk29xxnand:字段中所有分区都是连续的,当前分区起始地址+当前分区size和下个分区起始地址都是连续的,所以当修改了其中某个分区后,在它后面的分区的地址都要顺序往前或往后。
以下是我将userdata分区缩小为1GB,将user分区扩大1GB的例子:
修改前: size offset
0x00002000@0x00000000(parameter)//4MB 4MB
0x00002000@0x00002000(uboot), //4MB 8MB
0x00002000@0x00004000(trust), //4MB 12MB
0x00002000@0x00006000(misc), //4MB 16MB
0x00008000@0x00008000(resource),//16MB 32MB
0x00008000@0x00010000(kernel), //16MB 48
0x00010000@0x00018000(boot), //32MB 80
0x00010000@0x00028000(recovery),//32MB 112
0x00038000@0x00038000(backup), //112MB 224
0x00040000@0x00070000(cache), //128MB 352
0x00002000@0x000B0000(kpanic), //4MB 356
0x00200000@0x000B2000(system), //1024MB 1380
0x00008000@0x002B2000(metadata),//16MB 1396
0x00002000@0x002BA000(baseparamer), //4MB 1400MB
0x00400000@0x002BC000(userdata), //2048MB 3448
0x00020000@0x006BC000(radical_update), //64MB 3512
-@0x006DC000(user) //212MB/11394MB ...
修改后:
0x00002000@0x00002000(uboot), //4MB 8MB
0x00002000@0x00004000(trust), //4MB 12MB
0x00002000@0x00006000(misc), //4MB 16MB
0x00008000@0x00008000(resource),//16MB 32MB
0x00008000@0x00010000(kernel), //16MB 48
0x00010000@0x00018000(boot), //32MB 80
0x00010000@0x00028000(recovery),//32MB 112
0x00038000@0x00038000(backup), //112MB 224
0x00040000@0x00070000(cache), //128MB 352
0x00002000@0x000B0000(kpanic), //4MB 356
0x00200000@0x000B2000(system), //1024MB 1380
0x00008000@0x002B2000(metadata),//16MB 1396
0x00002000@0x002BA000(baseparamer), //4MB 1400MB
0x00200000@0x002BC000(userdata), //1024MB 2424MB
0x00020000@0x004BC000(radical_update), //64MB 2488MB
-@0x004DC000(user) //1024+212MB = 1236MB
注:
1.分区的大小要以4MB对齐!
2.分区总大小不能超过flash的总长度
修改parameter后效果:
shell@rk3368_32:/ # df
Filesystem Size Used Free Blksize
/dev 495.2M 36.0K 495.2M 4096
/sys/fs/cgroup 495.2M 12.0K 495.2M 4096
/mnt/asec 495.2M 0.0K 495.2M 4096
/mnt/obb 495.2M 0.0K 495.2M 4096
/system 1004.2M 403.0M 601.2M 4096
/cache 122.0M 140.0K 121.8M 4096
/metadata 11.7M 40.0K 11.7M 4096
/data 991.9M 87.5M 904.4M 4096
/mnt/shell/emulated 991.9M 87.5M 904.4M 4096
/mnt/internal_sd 1.2G 136.0K 1.2G 8192
/mnt/secure/asec 1.2G 136.0K 1.2G 8192
一般Android平台分区修改
eMMC 分区信息
# cat /proc/partitions
major minor #blocks name
254 0 520912 zram0
179 0 15267840 mmcblk0
179 1 4096 mmcblk0p1
179 2 4096 mmcblk0p2
179 3 4096 mmcblk0p3
179 4 16384 mmcblk0p4
179 5 16384 mmcblk0p5
179 6 32768 mmcblk0p6
179 7 32768 mmcblk0p7
179 8 114688 mmcblk0p8
179 9 131072 mmcblk0p9
179 10 4096 mmcblk0p10
179 11 1048576 mmcblk0p11
179 12 16384 mmcblk0p12
179 13 4096 mmcblk0p13
179 14 2097152 mmcblk0p14
179 15 65536 mmcblk0p15
179 16 11667456 mmcblk0p16
mmcblk0即emmc的容量(单位kb)
#ls /dev/block/platform/ff0f0000.rksdmmc/by-name/* -l
lrwxrwxrwx root root 2013-01-21 08:50 uboot -> /dev/block/mmcblk0p1
lrwxrwxrwx root root 2013-01-21 08:50 trust -> /dev/block/mmcblk0p2
lrwxrwxrwx root root 2013-01-21 08:50 misc -> /dev/block/mmcblk0p3
lrwxrwxrwx root root 2013-01-21 08:50 resource -> /dev/block/mmcblk0p4
lrwxrwxrwx root root 2013-01-21 08:50 kernel -> /dev/block/mmcblk0p5
lrwxrwxrwx root root 2013-01-21 08:50 boot -> /dev/block/mmcblk0p6
lrwxrwxrwx root root 2013-01-21 08:50 recovery -> /dev/block/mmcblk0p7
lrwxrwxrwx root root 2013-01-21 08:50 backup -> /dev/block/mmcblk0p8
lrwxrwxrwx root root 2013-01-21 08:50 cache -> /dev/block/mmcblk0p9
lrwxrwxrwx root root 2013-01-21 08:50 kpanic -> /dev/block/mmcblk0p10
lrwxrwxrwx root root 2013-01-21 08:50 system -> /dev/block/mmcblk0p11
lrwxrwxrwx root root 2013-01-21 08:50 metadata -> /dev/block/mmcblk0p12
lrwxrwxrwx root root 2013-01-21 08:50 baseparamer -> /dev/block/mmcblk0p13
lrwxrwxrwx root root 2013-01-21 08:50 userdata -> /dev/block/mmcblk0p14
lrwxrwxrwx root root 2013-01-21 08:50 radical_update -> /dev/block/mmcblk0p15
lrwxrwxrwx root root 2013-01-21 08:50 user -> /dev/block/mmcblk0p16
即userdata 分区 大小为2097152*1024KB = 2147483648B
BoardConfig.mk 中修改指定变量即可:
BOARD_BOOTIMAGE_PARTITION_SIZE := 16777216
BOARD_RECOVERYIMAGE_PARTITION_SIZE := 16793600
BOARD_SYSTEMIMAGE_PARTITION_SIZE := 2147483648
BOARD_OEMIMAGE_PARTITION_SIZE := 67108864
BOARD_USERDATAIMAGE_PARTITION_SIZE := 25253773312 ---> 2147483648B
BOARD_CACHEIMAGE_PARTITION_SIZE := 268435456
BOARD_CACHEIMAGE_FILE_SYSTEM_TYPE := ext4
BOARD_FLASH_BLOCK_SIZE := 131072