Android Qcom board-id加载镜像学习

news/2025/1/31 6:53:54/文章来源:https://www.cnblogs.com/linhaostudy/p/18693280

很早就听说过board-id能用来区分项目,没负责过这个,也一直没有时间去了解。board-id的可以通过gpio或者eeprom来存放,board-id也就是CDT中的部分内容,如果时gpio的方式,可配置的项目有些而且在主板上的都是hardcode,这样不利于维护。

XBL-CDT

default:
BOOT.XF.4.1/boot_images/QcomPkg/Library/PlatformInfoLib/PlatformInfoLoader.c typedef struct PACK(PlatformInfoCDTType){uint8                 nVersion;uint8                 nPlatform;uint8                 nHWVersionMajor;uint8                 nHWVersionMinor;uint8                 nSubtype;uint8                 nNumKVPS;PlatformInfoKVPSCDTType  aKVPS[];} PlatformInfoCDTType;CDT中存放 Platform ID和DDR参数 ■ The CDT header consists of
□ A magic number
□ A version number
□ Two reserved fields
■ The block metadata section
■ Individual CDBs
□ CDB0 – Platform ID
□ CDB1 – DDR parameters
□ Additional CDBs – user-defined databoot_config_data_table_initboot_update_config_data_table  default table boot_cdt_array_a/b.cboot_flash_configure_target_image for loading CDT bin image BOOT.XF.4.1/boot_images/QcomPkg/Tools 生成boot_cdt_array.c可以覆盖defaultpython cdt_generator.py cdp_1.0_jedec_lpddr4.xml custom_cdt.binBOOT.XF.4.1/boot_images/QcomPkg/Tools/cdp_1.0_jedec_lpddr4.xml<device id="cdb0"><props name="platform_id" type="DALPROP_ATTR_TYPE_BYTE_SEQ">       0x03, 0x44, 0x00, 0x00, 0x01, 0x00, end       </props>cdt platform_id  具体要看平台定义
Version number       Platform type      HW MajorVersion      HW MinVersion   platform subtype   fusion false(KVP)0x03                 0x44                   0x00              0x00          0x01               0x00devicetree borad_id
Platform subtype   Platform MajorVersion   Platform MinVersion  Platform typeId0x01                 0x00                   0x00               0x44
devicetree qcom,board-id = <0x01000044 0x0>;

ABL-LinuxLoader

abl/tianocore/edk2/QcomModulePkg/Application/LinuxLoader/LinuxLoader.inf
abl/tianocore/edk2/QcomModulePkg/Application/LinuxLoader/LinuxLoader.c
LinuxLoaderEntryabl/bootloader/edk2/QcomModulePkg/Library/BootLib/BootLinux.c
BootLinuxGetImage                IsBuildUseRecoveryAsBoot boot or recovery 获取image buffer and sizeGZipPkgCheck            depress gzip(kernel)DTBImgCheckAndAppendDT (1)根据不同boot_img_hdr部署bootimage (BootImage.h中有3种部署,后续再讨论)(2)GetSocDtb GetBoardDtb (msm-id) (board-id)去匹配dtb以及dtboApplyOverlay将主设备树和叠加设备树从存储中加载到内存中,将合并后的地址用于内核启动中(3)board-id是由BoardTargetId去组合得到0x01000044,组合规则如下(((platform_board_info.PlatformInfo.subtype & 0xff) << 24) |(((platform_board_info.PlatformInfo.version >> 16) & 0xff) << 16) |((platform_board_info.PlatformInfo.version & 0xff) << 8) |(platform_board_info.PlatformInfo.platform & 0xff));UpdateCmdLine           将MfgDataBoardId即BoardTargetId更新到cmdline中LinuxKernel = (LINUX_KERNEL) (UINT64)BootParamlistPtr.KernelLoadAddr;LinuxKernel ((UINT64)BootParamlistPtr.DeviceTreeLoadAddr, 0, 0, 0);

boot_img_hdr

Device Tree Overlays
Boot Image Header

Android 12 can use boot header version 3 or 4. 如果是kernel 5.4 引入GKI的版本, version 4 is the primary boot image.
Android 11 can use boot header version 3. 如果是GKI, this version must be used for the primary boot image.
Android 10 must use boot header version 2.
Android 9 must use boot header version 1.
Android 8 and lower are considered as using a boot image header version 0./* When the boot image header has a version of BOOT_HEADER_VERSION_ZERO/ONE/TWO,* the structure of the boot image is as follows:* +-----------------+             ------- -------- -------* | boot header     | 1 page* +-----------------+* | kernel          | n pages* +-----------------+               v0* | ramdisk         | m pages               v1* +-----------------+                                v2       * | second stage    | o pages                       * +-----------------+            ------- * | recovery dtbo   | p pages           * +-----------------+                    --------* | dtb.img         | q pages                     --------

Android是支持A/B分区分别用于boot和ota,在DTBImgCheckAndAppendDT 这个函数中会去判断boot image header;GKI后可以看到partition xml会有新增vendor_boot_a,引入一个vendor_boot.img镜像,dtb的镜像存放也就从boot转移到vendor_boot中(原先的位置时在bootimage的ramdisk下面),以及原先的camera驱动转变成camera.ko后,烧写boot是不生效的。

/* When the boot image header has a version of 3, the structure of the boot* image is as follows:** +---------------------+* | boot header         | 4096 bytes* +---------------------+* | kernel              | m pages* +---------------------+* | ramdisk             | n pages* +---------------------+** m = (kernel_size + 4096 - 1) / 4096* n = (ramdisk_size + 4096 - 1) / 4096** Note that in version 3 of the boot image header, page size is fixed at 4096 bytes.** The structure of the vendor boot image (introduced with version 3 and* required to be present when a v3 boot image is used) is as follows:** +---------------------+* | vendor boot header  | 1 page* +---------------------+* | vendor ramdisk      | o pages* +---------------------+* | dtb                 | p pages* +---------------------+* o = (vendor_ramdisk_size + page_size - 1) / page_size* p = (dtb_size + page_size - 1) / page_size

LOG

way one:
mfg_load_from_eeprom failed -22
PlatformID:: Read PlatformID from GPIOway two:
PlatformID:: Read PlatformID from eepromDecompressing kernel image total time: 476 ms
Find Best Dtbo count = 46 DtPlatformtype = 0x44 DtPlatformSoctype = 0x0, DtPlatformSubtype = 0x1

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/876471.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

阿里云2025年免费领取300元无门槛优惠券

综合传送门详情免责声明 版权声明 交流群 公众hao服务器有什么用 服务器可以用于管理网络资源,比如控制网络访问、发送/接收电子邮件和 托管网站。服务器用于网站和大型数据库等应用,具有高速计算能力、长期可靠运行、强大的数据吞吐量、高可用性、可靠性、可扩展性和可管理性…

美团面试:MySQL为什么 不用 Docker部署?

本文原文链接 文章很长,且持续更新,建议收藏起来,慢慢读!疯狂创客圈总目录 博客园版 为您奉上珍贵的学习资源 : 免费赠送 :《尼恩Java面试宝典》 持续更新+ 史上最全 + 面试必备 2000页+ 面试必备 + 大厂必备 +涨薪必备 免费赠送 :《尼恩技术圣经+高并发系列PDF》 ,帮你 …

Java 异常

目录异常介绍异常概念异常体系异常分类异常的产生过程解析异常的处理抛出异常 throwObjects 非空判断声明异常 throws捕获异常 try…catchfinally 代码块异常注意事项自定义异常概述例 异常介绍 异常概念 异常,就是不正常的意思。在生活中:医生说,你的身体某个部位有异常,该部…

macOS Sequoia 15.3 (24D60) Boot ISO 原版可引导镜像下载

macOS Sequoia 15.3 (24D60) Boot ISO 原版可引导镜像下载macOS Sequoia 15.3 (24D60) Boot ISO 原版可引导镜像下载 iPhone 镜像、Safari 浏览器重大更新和 Apple Intelligence 等众多全新功能令 Mac 使用体验再升级 请访问原文链接:https://sysin.org/blog/macOS-Sequoia-bo…

新春“码”启 | Cocos 3D 开发微信小游戏(第3天):场景搭建与游戏链路基础开发

新春开发 Cocos 3D 微信小游戏计划的第3天,包括总体设计方案,包括关卡模式、时间限制、复活机制等。接着详细展示基础框架研发,如开始场景和游戏场景(关卡一)的开发,包括创建场景、画布、立方体、材质,以及按钮的功能实现和场景切换等……今天是实施新春小游戏计划的第 …

macOS Sonoma 14.7.3 (23H417) 正式版 ISO、IPSW、PKG 下载

macOS Sonoma 14.7.3 (23H417) 正式版 ISO、IPSW、PKG 下载macOS Sonoma 14.7.3 (23H417) 正式版 ISO、IPSW、PKG 下载 利用小组件进行个性化设置、令人眼前一亮的全新屏幕保护、Safari 浏览器和视频会议的重大更新 请访问原文链接:https://sysin.org/blog/macOS-Sonoma/ 查看…

macOS Sequoia 15.3 (24D60) 正式版 ISO、IPSW、PKG 下载

macOS Sequoia 15.3 (24D60) 正式版 ISO、IPSW、PKG 下载macOS Sequoia 15.3 (24D60) 正式版 ISO、IPSW、PKG 下载 iPhone 镜像、Safari 浏览器重大更新和 Apple Intelligence 等众多全新功能令 Mac 使用体验再升级 请访问原文链接:https://sysin.org/blog/macOS-Sequoia/ 查看…

macOS Sonoma 14.7.3 (23H417) Boot ISO 原版可引导镜像下载

macOS Sonoma 14.7.3 (23H417) Boot ISO 原版可引导镜像下载macOS Sonoma 14.7.3 (23H417) Boot ISO 原版可引导镜像下载 本站下载的 macOS 软件包,既可以拖拽到 Applications(应用程序)下直接安装,也可以制作启动 U 盘安装,或者在虚拟机中启动安装。另外也支持在 Windows…

CF750C

New Year and Rating 题目链接 题目样例 输入 3 -7 1 5 2 8 2输出 1907思路 二分 二分rating,从1到n遍历,若碰到不满足条件的:1却max小于1900,2却min大于1899,则直接返回,修改mid的区间重新取 若满足条件,则直接加减所给值 模拟 和上面一样,若不满足直接输出,满足则一…

TextMeshPro系列 —— Font Asset Properties

PropertiesFace Info The Face Info 属性控制字体的行度量。它们还包括只读属性,这些属性是字体资产创建器在创建资产时生成的。Update Texture Atlas 打开字体资产创建器,预先配置以修改和重新生成此字体资产。Family Name 用于创建此字体资产的字体名称(TextMesh Pro 在生…