目录
介绍
配置数据表(CDT)是编程到平台设备上的EEPROM或eMMC/UFS的软件表。它包含硬件信息,如平台ID和DDR参数,这对于初始化各种软件模块至关重要。
理想情况下,CDT信息应在工厂编程到设备上的EEPROM芯片中。然而,较低成本的设备或开发设备通常没有EEPROM芯片。当EEPROM不存在时,CDT信息需要在源代码中定义,并在编译时链接到构建中。
在引导期间,引导加载程序从EEPROM或源代码中获取CDT信息,并将信息加载到共享内存中。然后,其他模块可以自由地访问信息以执行动态初始化。
从用户的角度来看,CDT只是内存中的一个连续字节数组。
CDT是存储在SBL的数据区域(用作默认设置)中的字节数组,此外,还存储在外部非易失性数据分区(在eMMC或EEPROM上)中。在设备启动期间,SBL在恢复到默认设置之前检查是否存在外部非易失性CDT分区。
CDT提供特定于平台/设备的数据,例如硬件平台ID、DDR/SDRAM配置等,各种系统模块利用这些数据在启动时或启动后执行动态配置。CDT中必须有正确的平台ID,才能正确操作各种系统模块。错误配置的平台ID会导致难以调试的稳定性问题,例如,由于错误的PMIC操作、GPIO错误配置、图像之间的内存映射重叠等。
CDT结构
CDT由三个主要部分组成:
- The CDT header consists of:
- A magic number
- A version number
- Two reserved fields
- The block metadate section
- Individual CDBs
- CDB0-Platform ID // 通常需要修改
- CDB1-DDR parameters
- Additional CDBs-user-defined data
创建CDT文件
A sample CDT file:cdp_0_1.xml。
Path:boot_images\QcomPkg\Tools\cdp_0_1.xml
定义:
CDT是一个软件表,包含初始化各种软件模块所需的硬件信息,如平台ID、子类型(subtype)。QTI汽车平台使用Platfrom ID=25(对应图中0x19),而子类型取决于OEM定制,图中为0x01。
CDT与QUP分配表链接
1. 定义CDT是在硬件上编程的定义
2. 将OEM定义的平台ID和子类型添加到QUPAC_Access.xml文件下定义的权限,该文件位于:<repo.location>\tz_8155\trustzone_images\core\settings\buses\qup_accesscontrol\qupv3\config\855\QUPAC_Private.xml
图中的25,x 对应<OEM platform_id>, <OEM subtype_id>, // OEM Platform
生成二进制文件
$ python cdt_generator.py cdp_0_1.xml CDT.bin
最后的CDT.bin 即为生成的二进制文件。最后通过fastboot烧写进车机系统。
$ fastboot flash cdt Test_Device/boot_8155/boot_images/QcomPkg/Tools/CDT.bin
最后重启车机即可正常进入系统。