如果想要添加一个新的分区,例如添加名为"userdata"的分区,大小为,除了预留6G的system文件系统根目录分区(我这里是rootfs分区),剩下的空间全部给userdata。
需要首先确定这个分区的起始地址。这个地址应该是上一个分区的起始地址加上上一个分区的大小。
例如,如果上一个分区是"rootfs"分区,那么"userdata"分区的起始地址应该是0x0044000 + 0x00c00000 = 0x00c44000
如果需要将这个分区的大小转换为sector。由于1个sector等于512Bytes,所以10MB等于10 * 1024 * 1024 / 512 = 0x00005000 sector。
可以将这个分区添加到CMDLINE参数中,像这样:0x00c44000(userdata:grow)。
所以,添加"odm"分区后的CMDLINE参数应该是这样的:
#KERNEL_IMG: 0x00280000
#FDT_NAME: rk-kernel.dtb
#RECOVER_KEY: 1,1,0,20,0
#in section; per section 512(0x200) bytes
CMDLINE: mtdparts=rk29xxnand:0x00002000@0x00006000(uboot),0x00002000@0x00008000(trust),0x00002000@0x0000a000(resource),0x00038000@0x0000c000(boot:-bootable),0x00c00000@0x0044000(rootfs),-@0x00c44000(userdata:grow)
uuid:rootfs=B921B045-1DF0-41C3-AF44-4C6F280D3FAE
这个CMDLINE参数包含了新的"userdata:grow"分区,它的起始地址是0x00c44000,大小是剩下的除去rootfs分区之后的sector。
分区信息单位解析
在处理设备分区信息时,通常会遇到两种单位:sector和字节。
Sector
Sector是设备上的最小存储单元,通常是512字节。在分区信息中,分区大小和分区偏移量都是以sector为单位的。
字节
字节是计算机中的基本存储单元,通常用B表示。一个sector等于512个字节,也就是说,一个sector可以存储512个B的数据。
为什么使用Sector?
使用sector为单位可以更好地对齐设备上的存储空间,提高存储效率和性能。如果使用字节为单位,可能会造成设备上的空间浪费或者读写错误。
例如,如果一个分区的大小是8192字节,那么它占用了16个sector(8192 / 512 = 16)。如果一个分区的大小是8193字节,那么它占用了17个sector(8193 / 512 = 16.00195),但是实际上只用了第17个sector的一个字节,剩下的511个字节就浪费了。如果一个分区的大小是8191字节,那么它占用了16个sector(8191 / 512 = 15.99805),但是实际上少用了第16个sector的一个字节,可能会导致读写错误。
单位转换
如果想看以字节为单位的分区信息,可以把sector乘以512来转换成字节。同样地,如果想看以MB(兆字节)为单位的分区信息,可以把sector乘以512 / 1024 / 1024来转换成MB。
例如,如果一个分区的大小是0x00002000 sector,那么它的大小是0x00002000 * 512字节,或者0x00002000 * 512 / 1024 / 1024 MB。