新版本增加分区方式
Android 11+增加了可以自动生成parameter.txt的工具,并支持编译parameter.txt
根据配置参数。如果没有配置模板文件,工具会发现并添加修改后的parameter.txt文件。(如果想了解计算规则 请看下面的内容)
参考文档《Rockchip_Android13_SDK_Developer_Guide_EN.pdf》
>
>
> FIRMWARE_VER: 11.0 MACHINE_MODEL: rk3568_r MACHINE_ID: 007 MANUFACTURER: rockchip MAGIC: 0x5041524B ATAG: 0x00200800 MACHINE: rk3568_r CHECK_MASK: 0x80 PWR_HLD: 0,0,A,0,1 TYPE: GPT CMDLINE:mtdparts=rk29xxnand:0x00002000@0x00002000(security),0x00002000@0x00004000(uboot),0x00002000@0x00006000(trust),0x00002000@0x00008000(misc),0x00002000@0x0000a000(dtbo),0x00000800@0x0000c000(vbmeta),0x00014000@0x0000c800(boot),0x00030000@0x00020800(recovery),0x000c0000@0x00050800(backup),0x000c0000@0x00110800(cache),0x00008000@0x001d0800(metadata),0x00000800@0x001d8800(baseparameter),0x00614000@0x001d9000(super),-@0x007ed000(userdata:grow)
>
>
>
>
固件信息
以下是Rockchip RK3568设备的固件信息,包括设备的型号、制造商、固件版本等:
* FIRMWARE_VER: 固件的版本号,这里的版本号是11.0。
* MACHINE_MODEL: 设备的型号,这里的型号是rk3568_r。
* MACHINE_ID: 设备的ID,这里的ID是007。
* MANUFACTURER: 设备的制造商,这里的制造商是rockchip。
* MAGIC: 用于标识设备的特殊值,这里的值是0x5041524B。
* ATAG: 用于标识设备的特殊值,这里的值是0x00200800。
* MACHINE: 设备的型号,这里的型号是rk3568_r。
* CHECK_MASK: 用于检查设备的特殊值,这里的值是0x80。
* PWR_HLD: 用于控制设备电源的特殊值,这里的值是0,0,A,0,1。
* TYPE: 设备的类型,这里的类型是GPT。
* CMDLINE: 设备的命令行参数,包括了设备的各种分区信息。
分区信息
以下是设备的分区信息,包括分区的名称、起始地址、偏移量、大小和用途:
| 分区名称 | 分区起始地址(sector) | 分区偏移量(sector) | 分区大小(sector) | 分区大小(MB) | 分区用途 |
| security | 0x00002000 | 0x00002000 | 0x00002000 | 4MB | 用于存储安全相关的信息 |
| uboot | 0x00004000 | 0x00002000 | 0x00002000 | 4MB | 用于存储U-Boot引导加载器 |
| trust | 0x00006000 | 0x00002000 | 0x00002000 | 4MB | 用于存储TrustZone相关的信息 |
| misc | 0x00008000 | 0x00002000 | 0x00002000 | 4MB | 用于存储各种杂项信息 |
| dtbo | 0x0000a000 | 0x00002000 | 0x00002000 | 4MB | 用于存储设备树覆盖信息 |
| vbmeta | 0x0000c000 | 0x00002000 | 0x00000800 | 1MB | 用于存储AVB元数据 |
| boot | 0x0000c800 | 0x00000800 | 0x00014000 | 10MB | 用于存储引导分区 |
| recovery | 0x00020800 | 0x00014000 | 0x00030000 | 24MB | 用于存储恢复分区 |
| backup | 0x00050800 | 0x00030000 | 0x000c0000 | 96MB | 用于存储备份分区 |
| cache | 0x00110800 | 0x000c0000 | 0x000c0000 | 96MB | 用于存储缓存分区 |
| metadata | 0x001d0800 | 0x000c0000 | 0x00008000 | 16MB | 用于存储元数据分区 |
| baseparameter | 0x001d8800 | 0x00008000 | 0x00000800 | 1MB | 用于存储基本参数 |
| super | 0x001d9000 | 0x00000800 | 0x00614000 | 394MB | 用于存储超级分区 |
| userdata | 0x007ed000 | 0x00614000 | - | - | 用于存储用户数据分区 |
注意:这个表格是基于提供的CMDLINE参数生成的,实际的分区信息可能会因设备的具体配置而有所不同。另外,"userdata"分区的大小是"-",表示它会占用剩余的所有空间。
分区作用
每个分区在Android系统中都有特定的作用,以下是每个分区的简单解释:
1. boot.img:包含ramdisk、kernel、dtb,用于启动设备并加载操作系统的核心组件。
2. boot-debug.img:与boot.img的差别是用户固件可以烧写这个boot.img进行root权限操作。
3. dtbo.img:Device Tree Overlays (设备树覆盖),用于描述硬件配置的数据结构。
4. config.cfg:烧写工具的配置文件,可以直接导入烧写工具显示需要烧写的选项。
5. MiniLoaderAll.bin:包含一级loader,用于引导加载器的启动过程。
6. misc.img:包含recovery-wipe开机标识信息,烧写后会进行恢复操作。
7. parameter.txt:包含分区信息,记录了设备的分区布局。
8. pcba_small_misc.img:包含pcba开机标识信息,烧写后会进入简易版pcba模式。
9. pcba_whole_misc.img:包含pcba开机标识信息,烧写后会进入完整版pcba模式。
10. recovery.img:包含recovery-ramdisk、kernel、dtb,用于设备出现问题时进行修复操作。
11. super.img:包含odm、product、vendor、system、system_ext分区内容,是一个包含多个子分区的超级分区。
12. trust.img:包含BL31、BL32,用于存储TrustZone相关的信息,创建安全环境来运行敏感代码和处理敏感数据。
13. uboot.img:包含uboot固件,是一个在设备启动时运行的程序,负责加载内核和其他重要的系统组件。
14. vbmeta.img:包含avb校验信息,用于Android Verified Boot (AVB)的验证机制。
15. update.img:包含以上需要烧写的img文件,可用于直接烧写整个固件包。
16. security:用于存储安全相关的信息,如设备的加密密钥等。
17. cache:存储缓存分区,用于存储临时数据。
18. userdata:存储用户数据分区,包括用户的应用数据、下载的文件等。
19. metadata:存储元数据分区,用于存储系统的元数据,如设备的IMEI号等。
20. backup:存储备份分区,用于在系统更新或恢复时备份重要的数据。
增加新分区计算规则
如果想要添加一个新的分区,例如名为"odm"的分区,大小为15MB,需要首先确定这个分区的起始地址。这个地址应该是上一个分区的起始地址加上上一个分区的大小。例如,如果上一个分区是"super"分区,那么"odm"分区的起始地址应该是0x007ed000 + 0x00614000 = 0x00df1000。
需要将这个分区的大小转换为sector。由于1个sector等于512Bytes,所以15MB等于15 * 1024 * 1024 / 512 = 0x0000f000 sector。
可以将这个分区添加到CMDLINE参数中,像这样:0x0000f000@0x00df1000(odm)。
所以,添加"odm"分区后的CMDLINE参数应该是这样的:
mtdparts=rk29xxnand:0x00002000@0x00002000(security),0x00002000@0x00004000(uboot),0x00002000@0x00006000(trust),0x00002000@0x00008000(misc),0x00002000@0x0000a000(dtbo),0x00000800@0x0000c000(vbmeta),0x00014000@0x0000c800(boot),0x00030000@0x00020800(recovery),0x000c0000@0x00050800(backup),0x000c0000@0x00110800(cache),0x00008000@0x001d0800(metadata),0x00000800@0x001d8800(baseparameter),0x00614000@0x001d9000(super),0x0000f000@0x00df1000(odm),-@0x00e01000(userdata:grow)
这个CMDLINE参数包含了新的"odm"分区,它的起始地址是0x00df1000,大小是0x0000f000 sector(15MB)。"userdata"分区的起始地址也相应地向后移动了0x0000f000 sector,以留出空间给"odm"分区。
分区信息单位解析
在处理设备分区信息时,通常会遇到两种单位:sector和字节。
Sector
Sector是设备上的最小存储单元,通常是512字节。在分区信息中,分区大小和分区偏移量都是以sector为单位的。
字节
收集整理了一份《2024年最新物联网嵌入式全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升的朋友。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人
都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!