Rockchip系列之RK3568 Android设备固件和分区信息

简介: Rockchip系列之RK3568 Android设备固件和分区信息

新版本增加分区方式

 

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为单位的。

字节

字节是计算机中的基本存储单元,通常用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。

相关文章
|
5月前
|
Android开发 iOS开发 UED
探索未来:Android与iOS在智能穿戴设备上的较量
随着科技的飞速进步,智能穿戴设备已经成为我们日常生活中不可或缺的一部分。本文将深入探讨两大操作系统——Android和iOS——在智能穿戴领域的竞争与发展,分析它们各自的优势与挑战,并预测未来的发展趋势。通过比较两者在设计哲学、生态系统、用户体验及创新技术的应用等方面的差异,揭示这场较量对消费者选择和市场格局的影响。 【7月更文挑战第31天】
56 0
|
4月前
|
Shell Linux 开发工具
"开发者的救星:揭秘如何用adb神器征服Android设备,开启高效调试之旅!"
【8月更文挑战第20天】Android Debug Bridge (adb) 是 Android 开发者必备工具,用于实现计算机与 Android 设备间通讯,执行调试及命令操作。adb 提供了丰富的命令行接口,覆盖从基础设备管理到复杂系统操作的需求。本文详细介绍 adb 的安装配置流程,并列举实用命令示例,包括设备连接管理、应用安装调试、文件系统访问等基础功能,以及端口转发、日志查看等高级技巧。此外,还提供了常见问题的故障排除指南,帮助开发者快速解决问题。掌握 adb 将极大提升 Android 开发效率,助力项目顺利推进。
114 0
|
2月前
|
Java Unix Linux
Android Studio中Terminal运行./gradlew clean build提示错误信息
遇到 `./gradlew clean build`命令执行出错时,首先应检查错误信息的具体内容,这通常会指向问题的根源。从权限、环境配置、依赖下载、版本兼容性到项目配置本身,逐一排查并应用相应的解决措施。记住,保持耐心,逐步解决问题,往往复杂问题都是由简单原因引起的。
334 2
|
4月前
|
安全 Java Android开发
【Android P】OTA升级包定制,移除不需要更新的分区,重新打包签名
如何解压OTA升级包、编辑升级包内容(例如移除不需要更新的分区)、重新打包、签名以及验证OTA文件的过程。
353 2
【Android P】OTA升级包定制,移除不需要更新的分区,重新打包签名
|
4月前
|
Android开发
基于Amlogic 安卓9.0, 驱动简说(四):Platform平台驱动,驱动与设备的分离
本文介绍了如何在基于Amlogic T972的Android 9.0系统上使用Platform平台驱动框架和设备树(DTS),实现设备与驱动的分离,并通过静态枚举在设备树中描述设备,自动触发驱动程序的加载和设备创建。
75 0
基于Amlogic 安卓9.0, 驱动简说(四):Platform平台驱动,驱动与设备的分离
|
4月前
|
Android开发 C语言
基于Amlogic 安卓9.0, 驱动简说(二):字符设备驱动,自动创建设备
这篇文章是关于如何在基于Amlogic T972的Android 9.0系统上,通过自动分配设备号和自动创建设备节点文件的方式,开发字符设备驱动程序的教程。
72 0
基于Amlogic 安卓9.0, 驱动简说(二):字符设备驱动,自动创建设备
|
4月前
|
自然语言处理 Shell Linux
基于Amlogic 安卓9.0, 驱动简说(一):字符设备驱动,手动创建设备
本文是关于在Amlogic安卓9.0平台上创建字符设备驱动的教程,详细介绍了驱动程序的编写、编译、部署和测试过程,并提供了完整的源码和应用层调用示例。
111 0
基于Amlogic 安卓9.0, 驱动简说(一):字符设备驱动,手动创建设备
|
4月前
|
传感器 Android开发 芯片
不写一行代码(三):实现安卓基于i2c bus的Slaver设备驱动
本文是系列文章的第三篇,展示了如何在Android系统中利用现有的i2c bus驱动,通过编写设备树节点和应用层的控制代码,实现对基于i2c bus的Slaver设备(如六轴陀螺仪模块QMI8658C)的控制,而无需编写设备驱动代码。
58 0
不写一行代码(三):实现安卓基于i2c bus的Slaver设备驱动
|
4月前
|
Android开发
不写一行代码(二):实现安卓基于PWM的LED设备驱动
本文介绍了在Android系统中不编写任何代码,通过设备树配置和内核支持的通用PWM LED驱动来实现基于PWM的LED设备驱动,并通过测试命令调整LED亮度级别。
59 0
不写一行代码(二):实现安卓基于PWM的LED设备驱动
|
4月前
|
Linux Android开发 C语言
不写一行代码(一):实现安卓基于GPIO的LED设备驱动
本文通过实践操作,展示了在Android系统中不编写任何代码,利用设备树(DTS)配置和内核支持的通用GPIO LED驱动来控制LED设备,并进一步通过C语言编写NDK测试APP来实现LED的闪烁效果。
188 0
不写一行代码(一):实现安卓基于GPIO的LED设备驱动