Rockchip系列之RK3568 Android设备固件和分区信息_userdata grow,2024年最新物联网嵌入式开发组件化开发教程

321 阅读9分钟

新版本增加分区方式

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)分区用途
security0x000020000x000020000x000020004MB用于存储安全相关的信息
uboot0x000040000x000020000x000020004MB用于存储U-Boot引导加载器
trust0x000060000x000020000x000020004MB用于存储TrustZone相关的信息
misc0x000080000x000020000x000020004MB用于存储各种杂项信息
dtbo0x0000a0000x000020000x000020004MB用于存储设备树覆盖信息
vbmeta0x0000c0000x000020000x000008001MB用于存储AVB元数据
boot0x0000c8000x000008000x0001400010MB用于存储引导分区
recovery0x000208000x000140000x0003000024MB用于存储恢复分区
backup0x000508000x000300000x000c000096MB用于存储备份分区
cache0x001108000x000c00000x000c000096MB用于存储缓存分区
metadata0x001d08000x000c00000x0000800016MB用于存储元数据分区
baseparameter0x001d88000x000080000x000008001MB用于存储基本参数
super0x001d90000x000008000x00614000394MB用于存储超级分区
userdata0x007ed0000x00614000--用于存储用户数据分区

注意:这个表格是基于提供的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年最新物联网嵌入式全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升的朋友。 img img

如果你需要这些资料,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人

都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!