我的NPI项目之设备系统启动(三) -- CDT的一个实例

上面说了这么多,这里就添加一个CDT的使用实例和简单的代码解析。

首先生成cdt_configure.xml配置文件,然后执行如下命令:

python cdt_generator.py cdt_configure.xml CDT.bin; 

就可以生成对应的CDT.bin文件。同时也会生成, 我们会利用hardware major/minor version number来定义同平台的不同SKU.

同样,对应我们可以定义sku的dtsi中的board id。 bootloader透过的CDT中的board id进行对应device tree的选择。

对应,同平台的多SKU的情况,利用CDT进行ID的定义,大概就是这样一个情况。

bootloaer中对cdt的解析代码,先参考如下的高通的说明,知道具体是使用什么接口进行CDT的解析的;

对应目录搜索涉及到的文件:

核心代码如下:

/*===========================================================================**  Function :  get_config_data_block** ==========================================================================
*/
/*!
* 
* @brief
*    given a pointer to the start of cdt and an configuration data block index,
*    return a pointer to beginning of that configuration data block.
*     //此时CDT是刷在ufs/emmc中。其实如果有好的方案,我们建议把CDT.bin备份到eeprom中,那样即使使用高通的刷机软件/或者手动 full reset ,CDT.bin依然保留;某种层度上可以避免机器便转。
* @param[in] uint8* pointer to the start of cdt table //怎么理解这里的指针呢?emmc文件系统中的地址?
* @param[in] uint32 Index of the configuration data block.
*
* @param[out] uint32* length of the configuration data block   
* 
* @return   pointer to the beginning of request cdb. 
*           Null if error or cdb doesn't exist 
*
* @par Dependencies
*   None
*   
* @retval
*   None
* 
* @par Side Effects
*   None
*/
bl_error_boot_type boot_get_config_data_block(const uint8 *raw_cdt, uint32 index, uint32 *length, uint8** cdb_data_ptr)
{struct cdb_meta *cdb_meta_ptr;uint8 *cdb_ptr;bl_error_boot_type return_status = BL_ERR_NONE; *length = 0;do{if(raw_cdt != NULL){cdb_meta_ptr = (struct cdb_meta*)((uintnt)raw_cdt + sizeof(struct cdt_header));//直接跳过header部分;/* Integer overflow check */if(((uintnt)raw_cdt > ((uintnt)raw_cdt + (uintnt)cdb_meta_ptr->offset))){return_status = BL_ERR_INTEGER_OVERFLOW;break;}cdb_ptr = (uint8*)((uintnt)raw_cdt + (uintnt)cdb_meta_ptr->offset);/*get the meta data of request block*/      cdb_meta_ptr += index;if(/*first check if cdt has valid magic number*/(((struct cdt_header*)raw_cdt)->magic == CONFIG_DATA_MAGIC) &&/*then check if meta data pointer of requested block is in valid range*/((uintnt)cdb_meta_ptr < (uintnt)cdb_ptr)  &&(((uintnt)raw_cdt + (uintnt)cdb_meta_ptr->offset) >= (uintnt)cdb_ptr) &&((uintnt)cdb_meta_ptr->offset < CONFIG_DATA_TABLE_MAX_SIZE) &&/*at last check if requested block has valid size*/(cdb_meta_ptr->size > 0) &&(((uintnt)cdb_meta_ptr->offset + (uintnt)cdb_meta_ptr->size) > (uintnt)cdb_meta_ptr->offset) &&(((uintnt)cdb_meta_ptr->offset + (uintnt)cdb_meta_ptr->size) < CONFIG_DATA_TABLE_MAX_SIZE) ){*length = cdb_meta_ptr->size;*cdb_data_ptr = (uint8*) (uintnt)((uintnt)raw_cdt + (uintnt)cdb_meta_ptr->offset); }}if(*cdb_data_ptr == NULL){return_status =  BL_ERR_GET_CDT_FAIL;break;}}while(FALSE);return return_status;
}

看下参数:@param[in] uint8* pointer to the start of cdt table //溯源地址来源:

//* @param[in] uint8* pointer to the destination CDT
boot_copy_config_data_block(uint8 *dst_cdt, uint32 cdb_index, const uint8 *src_cdb_data, uint32 src_cdb_size
);

 这个boot_copy_config_data_blcok(..);的调用点,在源码里面尽然没有找到,后面提个case问问高通。

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

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

相关文章

『 C++ 』AVL树详解 ( 万字 )

&#x1f988;STL容器类型 在STL的容器中,分为几种容器: 序列式容器&#xff08;Sequence Containers&#xff09;: 这些容器以线性顺序存储元素&#xff0c;保留了元素的插入顺序。 支持随机访问&#xff0c;因此可以使用索引或迭代器快速访问任何位置的元素。 主要的序列式…

03 SpringMVC响应数据之接收Cookie和请求头+原生API+共享域对象操作

下载postman,测试传json数据 1. 接收cookie 用CookieValue注解将cookie值绑定到控制器中的handler参数。 Controller类中的一个handler GetMapping("/CookieTest") public void handle(CookieValue("cookie的id(name)") String cookie) { //... }2. 接收…

leetcode-2085.统计出现过一次的公共字符串

题目链接&#xff1a;2085. 统计出现过一次的公共字符串 - 力扣&#xff08;LeetCode&#xff09; 解题思路&#xff1a; 1、暴力破解 首先想到的是暴力破解&#xff0c;用两个循环遍历列表&#xff0c;然后将单词出现的情况都记录在一个字典里面。最后遍历字典找到满足条件…

DBA技术栈(三):MySQL 性能影响因素

文章目录 前言一、影响MySQL性能的因素1.1 商业上的需求1.2 应用架构规划1.3 查询语句使用方式1.4 Schema的设计1.5 硬件环境 总结 前言 大部分人都一致认为一个数据库应用系统&#xff08;这里的数据库应用系统概指所有使用数据库的系统&#xff09;的性能瓶颈最容易出现在数…

MOSS 混元 巅峰对话!2024大模型发展都在这里

引言 2023 年&#xff0c;各大厂商争先投入 LLM 研发&#xff0c;一年内&#xff0c;在国内累计就有 200 余个大模型正式发布。尽管很多大模型并不完善&#xff0c;但行业内的研究专家及产业领袖都在为大模型的突破甚至 AGI 的发展&#xff0c;做着不懈探索。 但同时&#xff0…

基于Java (spring-boot)的停车场管理系统

一、项目介绍 基于Java (spring-boot)的停车场管理系统、预订车位系统、停车缴费系统功能&#xff1a; 登录、注册、后台首页、用户信息管理、车辆信息管理、新增车辆、车位费用设置、停泊车辆查询、车辆进出管理、登录日志查询、个人中心、预定停车位、缴费信息。 适用人群&…

Windows系统缺失api-ms-win-crt-runtime-l1-1-0.dll的修复方法

“在Windows操作系统环境下&#xff0c;用户经常遇到丢失api-ms-win-crt-runtime-l1-1-0.dll文件的问题&#xff0c;这一现象引发了广泛的关注与困扰。该dll文件作为Microsoft Visual C Redistributable Package的重要组成部分&#xff0c;对于系统内许多应用程序的正常运行起着…

CMake入门教程【高级篇】编译选项target_compile_options

文章目录 1.概述2.命令作用3.使用说明4.完整代码示例5.实际使用中的技巧6.实际使用中注意事项1.概述 target_compile_options命令允许用户为特定目标(如可执行文件或库)指定编译器选项,这对于优化构建过程和确保代码兼容性至关重要。 #mermaid-svg-q5VxDlvxzfEgUXvs {font-…

MATLAB介绍

MATLAB是MATrix LABoratory即矩阵实验室的缩写&#xff0c;是由美国MathWorks公司开发的专业工程与科学计算软件&#xff0c;是一个集科学计算、数值分析、矩阵计算、数据可视化及交互式程序设计于一体的计算环境&#xff0c;形成一个易于使用的视窗环境。 MATLAB执行由MATLAB…

C++ λ表达式

λ表达式提供了函数对象的另一种编程机制。 在 C 11 和更高版本中&#xff0c;Lambda 表达式&#xff08;通常称为 Lambda&#xff09;是一种在被调用的位置或作为参数传递给函数的位置定义匿名函数对象&#xff08;闭包&#xff09;的简便方法。 Lambda 通常用于封装传递给算法…

论文笔记(三十九)Learning Human-to-Robot Handovers from Point Clouds

Learning Human-to-Robot Handovers from Point Clouds 文章概括摘要1. 介绍2. 相关工作3. 背景3.1. 强化学习3.2. 移交模拟基准 4. 方法4.1. Handover Environment4.2. 感知4.3. 基于视觉的控制4.4. 师生两阶段培训 (Two-Stage Teacher-Student Training) 5. 实验5.1. 模拟评估…

linux修改文件名称的三种方法

方法一、mv mv name1 newname; 把name1 改成文件名name2 方法二 rename 1、rename命令批量修改 rename DUS1 DUS2 * 把所有DUS1结尾或者开头的文件修改为DUS2 方法三 cp -r oldname newname

CSS实现平行四边形

1、为什么实现平行四边形 在日常开发过程中&#xff0c;有些时候我们可以会遇到一种情况&#xff0c;如可视化大屏中要求我们横线实现对应的进度条&#xff0c;但进度条的内容是由无数个平行四边形组装类似于进度条的形式&#xff0c;那么我们就需要使用CSS来进行对应的实现。 …

OPT(erlang)打造一套缓存系统(一)

缓存的设计 这个简易缓存存储的是键/值对&#xff0c;其中键与键之间不得重复&#xff0c;并且每个键只能映射到一个值。这个设计背后的核心思想是为写人缓存的每一个值都分配一个独立的存储进程再将对应的键映射至该进程。你可能会对这种为每个值分配一个进程的设计感到惊讶&…

20240114-寻找零损失或一损失的玩家

题目要求 给定一个整数数组 matches&#xff0c;其中 matches[i] [winneri, Loseri] 表示玩家 Winneri 在一场比赛中击败了玩家 Loseri。 返回大小为 2 的列表答案&#xff0c;其中&#xff1a; answer[0] 是所有未输掉任何比赛的玩家的列表。answer[1] 是仅输掉一场比赛的…

京东年度数据报告-2023全年度笔记本十大热门品牌销量(销额)榜单

2023年度&#xff0c;在电脑办公市场整体销售下滑的环境下&#xff0c;笔记本市场的整体销售也不景气。 根据鲸参谋平台的数据显示&#xff0c;京东平台上笔记本的年度销量为650万&#xff0c;同比下滑约16%&#xff1b;销售额约为330亿&#xff0c;同比下滑约19%。同时&#…

71.网游逆向分析与插件开发-角色数据的获取-修复角色名与等级显示问题

内容参考于&#xff1a;易道云信息技术研究院VIP课 上一个内容&#xff1a;自动化助手UI显示角色数据-CSDN博客 码云地址&#xff08;ui显示角色数据 分支&#xff09;&#xff1a;https://gitee.com/dye_your_fingers/sro_-ex.git 码云版本号&#xff1a;0049452c079867779…

微软Office 2021 批量许可版

软件介绍 微软办公软件套件Microsoft Office LTSC 2021 专业增强版2024年1月批量许可版更新推送&#xff01;Office2021正式版和Windows11系统同时于2021年10月份正式推出&#xff0c;Office LTSC 2021相比 Office2019正式版变化不太&#xff0c;最主要强化了LOGO设计趋势&…

Visual Studio Code 1.67调整文件嵌套、Markdown导航

2022年4月发布的微软代码编辑器也为Java和Visual Studio code for Web扩展包带来了改进。 Visual Studio Code 1.67发布于5月5日&#xff0c;可以从项目网站下载&#xff0c;适用于Linux、Windows或Mac。新特性中特别关注的是浏览器文件嵌套和Markdown代码导航。该版本还带来了…

你读过哪些令你有跪感的书?

推荐知友们去看看这本书《绝密人性天书》&#xff0c;绝对是本好书&#xff0c;教你如何洞察人性。 原文地址&#xff08;建议及时保存&#xff0c;估计过几天就会被河蟹了&#xff09;: https://pan.quark.cn/s/6d80d65761a1 备用链接&#xff1a;https://pan.xunlei.com/s/…