我的NPI项目之设备系统启动(一) -- 客制化/给设备身份的CDT

做为设备设计和制造的公司,我们除了不能制造/生产PCB/PCBA/外壳,其它设备上的所有模块几乎都是自己设计的。那么,作为软件,会涉及到哪些设计内容呢?

  1. 选定主chipset/soc,例如qcmxxx/sdmxxx。
  2. 根据chipset,拉取Qualcomm 源码,并搭建local开发环境。当然,前提是和Qualcomm签订协议。
  3. 由于我的项目是基于服务器开发的,所以,Local 开发环境中代码部分都是在服务器上的docker中进行编辑和编译。代码有对应的gerrit服务器进行维护。
  4. 重点了来了,正如我前面所说,我的项目是基于同平台来设计和生产不同的产品,而且产品的形态和使用场景差别比较大,这就要求我们要单独定义产品代码。最好是能够在amss/kernel/framework/都可以进行相应定制。
  5. 大概的构建过程为:Qualcomm Chipset -> Qualcomm Platform Codebase & IDP identification -> Customer(ODM) product identification
  6. 既然要有不同的产品,那么到底该如何定义?在何处定义?

引入,Qualcomm的CDT机制:

什么是CDT(Configuration Data Table)?借用Qualcomm的原文内容:

CDT/eCDT is a data block that contains platform/device-dependent data, such as the hardware platform ID and DDR SDRAM configuration. Various software modules can use this information to reduce dependency and perform dynamic initialization.

A primary goal of the CDT and platform ID is to have one identical software build work across different hardware platforms and form factors and their different hardware revisions and variations. Additionally, abstracting the DDR type and configuration information to the external storage device enables the support of second source memory vendors easily without requiring separate software builds.

CDT is programmed into storage devices such as eMMC, UFS, or EEPROM at the factory. If CDT is not present/programmed in the storage device, a default copy of CDT that is linked to the build at compile time is retrieved and used. The boot loader fetches a CDT from a storage device or retrieves a linked CDT, so the process is transparent to other modules.

The CDT contains information that software must know before it can even boot successfully. It currently holds:

■ Platform ID data structure (PlatformInfoMemType)

■ DDR device type, mode (interleaved or noninterleaved), density (rank/chipselects), and JEDEC

specification default timing data; this DDR configuration may exist, depending on the target

A hardware platform may boot without a platform ID installed bootup, but there are risks involved. Boot loaders default the hardware platform as UNKNOWN in this case. Also, the DDR driver defaults to the built-in default device type and configuration (mode, density, timing). If drivers or services packaged within the boot loaders or later in the system/HLOS/kernel have a hard dependency on the hardware platform information, then behavior is undefined. Also, if the DDR configuration in the hardware platform is different from the built-in default, it fails to boot.

On the latest QTI family platforms, the DDR parameters have been migrated to the XBL configuration binary. The customer can still find the platform ID in the boot_cdt_array.c file, but no DDR parameters are included in this file. For any DDR settings information, see the XBL Configuration Guide (80-PE663-1).

简单的讲,CDT就是给目标产品定义属性,而且这个属性是运行时生效。那就涉及到定义,和对应的解析代码的编写。一般,CDT时刷在emmc或者ufs中的一个单独分区中。开机时候,xbl可以在开机的很早阶段就进行读取,并进行设备个性化的配置。CDT为同一套软件来设配多产品提供了便捷。

这里提到,CDT中目前还保留了platform ID信息,但是从上面高通的说明中,ddr信息已经放在了 XBL configuration binary(应该是比较新的一个功能,2021年开始的吗?),这个后面可以详细的再讨论。

CDT的制作:

cdt一般以name.bin的形式存在,在notepad的hex-editor中打开,可以看到类似如下的内容:

而这些内容通常是同过的一个py脚本来生成对应的.bin文件。命令如下:

python cdt_generator.py cdt_configure.xml CDT.bin; 

这样执行之后,会生成对应的CDT.bin 还有一个boot_cdt_array.c文件。这个.c文件里面其实就一个array。如果,如果启动过程中(被erase all了),emmc或者ufs中没有刷一个cdt.bin,那么这个.c文件中的配置就会被加载。后面我们最好也是同步改一下boot_cdt_array.c;

所以,要有定制的CDT.bin, 就要先配置cdt_configure.xml;那么cdt_configure.xml的内容又是什么?

CDT.bin的格式:

通常,我们比较关心的是platform ID information 这部分;

使用实例:(这里的6个byte,注意其后面的定义)

CDB0-> Platform ID, CDB1-> DDR Parameters .... 

有关代码:

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于python+selenium的二次封装的实现

这是个人对selenium.webdriver写的一些常用操作的二次封装,也就相当于重写了,不再使用自带的框架,用自己写的框架完成。这样的话使代码更简洁,用自己的思想完成代码的编写。 首先在根目录下创建子目录名为Common作为公用数据&…

前缀和算法 -- [模版]一维前缀和

个人主页:Lei宝啊 愿所有美好如期而遇 目录 本题链接 输入描述 输出描述 算法分析 算法一:暴力求解 算法二:前缀和 预处理前缀和dp表 使用前缀和dp表 解题源码 我们以一道题目为例详解一维前缀和原理。 本题链接 【模板】前缀和…

解决Redis序列化乱码问题

如果我们使用原生的JDK序列化&#xff0c;那么当我们将数据存储到Redis中就会出现乱码的情况 为了解决这个问题我们需要重写RedisTemplate从而解决序列化乱码问题 首先在Maven中引入相应的依赖 <dependency> <groupId>com.fasterxml.jackson.core</group…

ChatGPT 4.0真的值得花钱买入吗?

性能提升&#xff1a; ChatGPT 4.0的推出不仅意味着更先进的技术&#xff0c;还代表着更强大的性能。相较于3.5&#xff0c;4.0在处理任务时更为高效&#xff0c;响应更迅速。 更智能的理解&#xff1a; 随着版本的升级&#xff0c;ChatGPT 4.0对语境的理解能力得到了进一步的…

鸿蒙HarmonyOS- 弹框组件库

简介 今天介绍一个基于ArkUI框架开发的弹框组件库&#xff0c;该库基于ArkUI的弹框基础功能和自定义能力。针对通用的弹框业务场景&#xff0c;该库提供了丰富的组件弹窗功能。 包括确认输入弹窗、列表展示选择弹窗、自定义底部/顶部弹窗、自定义动画弹窗、自定义全屏弹窗、消息…

第十四章 :案例课:部暑KVM虚拟化平台

[rootLinux01 ~]# mount /dev/cdrom /mnt //挂载安装KVM需要的软件 [rootLinux01 ~]# yum -y install qemu-kvm-tools [rootLinux01 ~]# yum -y install qemu-kvm [rootLinux01 ~]# yum -y install virt-install [rootLinux01 ~]# yum -y install qemu-img [rootLinux01 ~]#…

自定义View之理解测量onMeasure和布局onLayout过程

Android应用的用户界面中&#xff0c;我们经常需要自定义View以满足特定的设计需求。在自定义视图的过程中&#xff0c;理解视图的测量&#xff08;onMeasure&#xff09;和布局&#xff08;onLayout&#xff09;过程至关重要。本篇博客将用通俗的语言&#xff0c;为你解析这两…

看似 bug 又非 bug 的一个 bug

最近的一个项目中&#xff0c;对于 CSS 的一些属性一些选择符可以大胆使用&#xff0c;然后很意外得撞上一个 iOS 中 Safari 的一个解析问题。 <Component style{{height: "calc(100vh - 46px)"}}>一个组件</Component> 这样的一段代码很简单&#xff…

浅谈接口自动化测试

昨晚在某个测试交流群&#xff0c;听了一个测试老司机分享接口自动化测试的内容&#xff0c;对接口自动化有了更深的一些认识&#xff0c;也为接下来公司的接口自动化实施&#xff0c;提供了更多的思路。 这篇博客&#xff0c;就说说功能测试到接口自动化的进阶&#xff0c;以及…

OS 7--DNS配置+Apache发布网站

环境准备 centOS 7 1.配置DNS 1.1 域名为lianxi.com 1.2 为WWW服务器、FTP服务器、NEWS服务器做域名解析 1)安装DNS yum -y install bind bind-utils (如果安装不上&#xff0c;就把磁盘在重洗挂载一下&#xff09; 2&#xff09;修改DNS配置文件 vim /etc/resolv.conf…

leetcode12 整数转罗马数字

题目描述&#xff1a;给定一个整数&#xff0c;将其转换为罗马数字。罗马数字由七个字符表示&#xff1a;I&#xff08;1&#xff09;、V&#xff08;5&#xff09;、X&#xff08;10&#xff09;、L&#xff08;50&#xff09;、C&#xff08;100&#xff09;、D&#xff08;5…

计算机网络【Cookie和session机制】

会话&#xff08;Session&#xff09;跟踪是Web程序中常用的技术&#xff0c;用来跟踪用户的整个会话。常用的会话跟踪技术是Cookie与Session。Cookie通过在客户端记录信息确定用户身份&#xff0c;Session通过在服务器端记录信息确定用户身份。 本章将系统地讲述Cookie与Sess…

数据挖掘中的数据属性特点、描述性统计度量与相似度计算

目录 1. 引言 2. 数据挖掘中的数据属性 2.1 数值属性 2.2 标称属性 2.3 有序属性 2.4 无序属性 3. 描述性统计度量 3.1 中心趋势度量 3.2 离散程度度量 3.3 分布形状度量 4. 相似度计算 4.1 欧氏距离 4.2 余弦相似度 4.3 Jaccard 5. 数据挖掘中的案例应用 5.1 …

Python open函数详解:打开指定文件与 readline和readlines函数:按行读取文件

Python open函数详解&#xff1a;打开指定文件 掌握了各种操作目录字符串或目录的函数之后&#xff0c;接下来可以准备读写文件了。在进行文件读写之前&#xff0c;首先要打开文件。 Python 提供了一个内置的 open() 函数&#xff0c;该函数用于打开指定文件。 open() 函数的…

团子杂记:SAP PS or 项目管理软件(PMIS )? PPM/P6

众所周知SAP的PS模块在项目型企业的SAP应用中扮演着核心角色&#xff0c;整个项目端到端的业务执行、财务核算、控制及分析都是通过PS作为主线&#xff0c;依赖于PS中的项目对象&#xff08;如WBS元素、网络活动等&#xff09;实现的。 在实施SAP的过程中&#xff0c;可以看到…

实战环境搭建-安装Linux

打开VMware如下图: 点击“创建新的虚拟机”如下图: 选择自定义(高级选项),点击“下一步”,如下图: 点击“下一步” 点击“浏览”选择下载好的镜像文件,如下图:

arduino ESP32 002 wokwi在线仿真点亮小灯

wokwi 点亮小灯 ESP-IDF #include <stdio.h> #include "freertos/FreeRTOS.h" #include "freertos/task.h" #include "driver/gpio.h"#define PIN_LED_1 GPIO_NUM_16void setup() {// 设置LED引脚为输出gpio_reset_pin(PIN_LED_1);// esp…

在mac上怎么方便的编辑xml文件

在Mac上 XML 文件不能默认以较直观的方式在“文本编辑”中打开&#xff0c;如果已安装 Xcode&#xff0c;你可以使用 Xcode 打开 XML 文件。在 Xcode 中&#xff0c;XML 文件通常会以可视化的方式显示&#xff0c;使得编辑更加直观&#xff0c;但是如果你不想安装 XCode&#x…

项目引入Jar包的几种方式

目录 背景 方式一 前提 创建一个jar包 使用 方式二 背景 通常情况下&#xff0c;使用SpringBoot框架开发项目的过程中&#xff0c;需要引入一系列依赖&#xff0c;首选的就是在项目的 pom.xml 文件里面通过Maven坐标进行引入&#xff08;可以通过Maven的坐标引入jar包的前…

[C#]C# OpenVINO部署yolov8实例分割模型

【官方框架地址】 https://github.com/ultralytics/ultralytics.git 【算法介绍】 YOLOv8 抛弃了前几代模型的 Anchor-Base。 YOLO 是一种基于图像全局信息进行预测的目标检测系统。自 2015 年 Joseph Redmon、Ali Farhadi 等人提出初代模型以来&#xff0c;领域内的研究者们…