当前位置: 首页 > news >正文

qcom 平台系统签名流程

security boot

平台的东东,oem 可定制的功能有限,只能参考平台文档,可以在高通的网站上搜索:Secure Boot Enablement,然后找对应平台的文档xxx-Secure Boot Enablement User Guide, step by step 操作即可

开机校验流程:


生成key step:

工具路径: Clarence.LA.2.0/common/sectoolsv2/ext/Linux_aarch64/

1、Clarence.LA.2.0/common/sectoolsv2/ext/Linux_aarch64/test_key/test_L400_key-secp384r1
    生成:v3.ext v3_attest.ext
    拷贝:opensslroot.cfg          LA.QSSI.14.0.r1/LINUX/android/vendor/qcom/proprietary/common/scripts/gensecimage/qpsa/alt_resources/default/openssl/opensslroot.cfg
2、生成qpsa_rootca.key
    openssl ecparam -genkey -name secp384r1 -outform PEM -out qpsa_rootca.key
3、生成 rootca_pem.crt
    sudo openssl req -new -key qpsa_rootca.key -sha384 -out rootca_pem.crt -subj /C=CN/ST=ChinaGD/L="ChinaSZh"/OU="General test Key"/OU="CDMA Technologies"/O=test/CN="test Root CA 1" -config opensslroot.cfg -x509 -days 7300 -set_serial 1

4、生成qpsa_rootca.cer
    openssl x509 -in rootca_pem.crt -inform PEM -out qpsa_rootca.cer -outform DER
    查看刚才生成的证书
    openssl x509 -text -inform DER -in qpsa_rootca.cer


5、生成CA key和证书
    openssl ecparam -genkey -name secp384r1 -outform PEM -out qpsa_ca.key
    sudo openssl req -new -key qpsa_ca.key -out ca.CSR -subj /C=CN/ST=ChinaGD/L="ChinaSZh"/OU="CDMA Technologies"/O=test/CN="test Attestation CA" -config opensslroot.cfg -sha384
    openssl x509 -req -in ca.CSR -CA rootca_pem.crt -CAkey qpsa_rootca.key -out ca_pem.crt -set_serial 1 -days 7300 -extfile v3.ext -sha384 -CAcreateserial
    openssl x509 -inform PEM -in ca_pem.crt -outform DER -out qpsa_ca.cer


6.生成root key的hash值
    openssl dgst -sha384 qpsa_rootca.cer >sha384rootcert.txt
 

参考文档:80-49880-42_REV_AA_SM4450_Secure_Boot_Enablement_User_Guide.pdf


给img签名


使用LOCAL 的方式签名命令:

$./Linux/sectools\
    secure-image \
    --sign /path/to/tz.mbn \
    --image-id=TZ \
    --security-profile  /path/to/clarence_security_profile.xml \
    --oem-id=0x1234 \
    --oem-product-id=0x00 \
    --anti-rollback-version=0x00 \
    --signing-mode=LOCAL \
    --root-certificate=./OEM-KEYS/qpsa_rootca.cer \
    --ca-certificate=./OEM- KEYS/qpsa_attestca.cer \
    --ca-key=./OEM-KEYS/qpsa_attestca.key \
    --outfile ./signed_images_out/tz.mbn

note:
oem-id、oem-product-id、root-certificate、ca-certificate、ca-key:需要根据项目的时间情况填写。(和生成sec.elf 一样)

anti-rollback-verision:是用于bp镜像防回滚的,一般我们保持为0,因为我们不会对BP 镜像定制。如果要定制升级为1或者其他值,也是可以的,但是需要慎重,因为这里是更新到了efuse中。我们的项目暂时没动这部分,所以我是一直写的0,如果有需求,可以参考《SM4450 Secure Boot Enablement User Guide》第七章进行深入了解。

image-id:这个是高通定好了的,bp的每个镜像都有对应的值,这个和anti-rollbcak-verison 也是密切相关的,要注意不要用错了。具体需参考《SM4450 Secure Boot Enablement User Guide》 中3.2.1 Software ID field的表。当然也可以查看contents.xml 中oem_imageid 字段。

参考:《KBA-230410213415_REV_2_QCM4490_QCS4490_Enable_secure_boot_with_sectools_version2.0.pdf》

sec.elf 文件生成


作用:用于烧写efuse的,就是我们常说的熔断。所以刷这个文件需要慎重,由于efuse的特殊性,熔断是不可逆的。
时机:刷入到secdata分区中,设备启动时,BROM会检测secdata分区,如果有数据或者数据有变化,并且签名校验通过,那么就将其内容更新到efuse(QFPROM)中。
描述:efuse后,加载了TZ部分,系统会初始化RPMB 的key。这里说的是加载了TZ 才初始化RPMB key(在efuse 中有一位,是表征是否要使能RPMB的,所以我们会在日志中看到,只有efuse的设备才会使用RPMB),这属于软件部分的设置,所以我们也可以配置TZ,不进行某些操作。而TZ 是闭源的,所以我们只能配置,如何配置?只能咨询高通,或者查看高通TZ 相关的文档。

参考文档:《QCM4490/QCS4490 Enable secure boot with sectools version 2.0》

FAQ:

设备熔断后,将签名镜像刷入,要保证能正常启动、一些基本功能正常,如果有异常,需要获取日志(一般是串口日志)看看是否有镜像漏签或者错签。
一般会遇到的问题:
1.还未进入kernel之前就挂掉:BP 中某个镜像签名有问题。
2.进入kernel之后挂掉:可能是某个子系统固件签名有问题。
3.指纹、人脸等功能无法使用:可能是相关TA 签名有问题。
4.综测、校准等工厂问题:可能是fsg 的签名问题。
5.firehose 无法刷入:可能是firehose 签名有问题。

单独签名一个img文件: 
Run the following command to sign XBL:
    python sectools.py secimage -s -i "<path to xbl.elf>" -g xbl -p sm6150 --cfg_selected_cert_config= OEM-KEYS
note :
    -s is to sign the image
    -i: is the path to the image file
    -g is the sign ID corresponding to the image_file provided
    -p is the ID of the chipset corresponding to the image_file
    --cfg_selected_cert_config is the OEM certificate configuration selection
Check the secimage_log.txt output file of XBL for following prints in the metadata:
    | debug | 0x00000002 |
    | multi_serial_numbers | 0x12345678 |

相关文章:

qcom 平台系统签名流程

security boot 平台的东东&#xff0c;oem 可定制的功能有限&#xff0c;只能参考平台文档&#xff0c;可以在高通的网站上搜索&#xff1a;Secure Boot Enablement&#xff0c;然后找对应平台的文档xxx-Secure Boot Enablement User Guide, step by step 操作即可 开机校验流…...

从零开始实现自己的串口调试助手(5) -实现HEX显示/发送/接收

实现HEX显示: HEX 显示 -- 其实就是 十六进制显示 --> a - 97(10) --> 61(16) 添加槽函数(bool): 实现槽函数: 注意: 注意QString 没有处理HEX显示的相关API 需要使用 toUtf-8 来 转换位QByteArry 类型&#xff0c; 利用其中的API 来处理HEX格式(toHex fromHex) vo…...

【计算机毕设】基于SpringBoot的民宿在线预定平台设计与实现 - 源码免费(私信领取)

免费领取源码 &#xff5c; 项目完整可运行 &#xff5c; v&#xff1a;chengn7890 诚招源码校园代理&#xff01; 1. 研究目的 本研究旨在设计并实现一个基于SpringBoot的民宿在线预定平台。通过信息化手段提高民宿预定效率&#xff0c;方便用户查询房源、预定房间、在线支付和…...

大数据—数据分析概论

一、什么是数据分析 数据分析是指使用统计、数学、计算机科学和其他技术手段对数据进行清洗、转换、建模和解释的过程&#xff0c;以提取有用的信息、发现规律、支持决策和解决问题。数据分析可以应用于各种领域&#xff0c;包括商业、医学、工程、社会科学等。 二、数据分析步…...

centos7下卸载MySQL,Oracle数据库

&#x1f4d1;打牌 &#xff1a; da pai ge的个人主页 &#x1f324;️个人专栏 &#xff1a; da pai ge的博客专栏 ☁️宝剑锋从磨砺出&#xff0c;梅花香自苦寒来 操作系统版本为CentOS 7 使⽤ MySQ…...

Spring解决循环依赖

Spring框架为了解决循环依赖问题&#xff0c;设计了一套三级缓存机制&#xff1a; 一级缓存singletonObjects:这个是最常规的缓存&#xff0c;用于存放完成初始化好的bean&#xff0c;如果某个bean已经在这个缓存了直接返回。二级缓存earlySigletonObjects:这个用于存放早期暴…...

RUST运算符重载

在 Rust 中&#xff0c;可以使用特征&#xff08;traits&#xff09;来实现运算符重载。运算符重载是通过实现相应的运算符特征&#xff08;如 Add、Sub、Mul 等&#xff09;来完成的。这些特征定义在 std::ops 模块中。下面是一个简单的示例&#xff0c;展示如何为一个自定义结…...

描述一下 Array.forEach() 循环和 Array.map() 方法之间的主要区别

Array.forEach() 和 Array.map() 都是 JavaScript 数组中常用的方法,但它们之间有一些重要的区别: 返回值:forEach()&#xff1a;没有返回值,它只是对数组中的每个元素执行提供的函数。map()&#xff1a;返回一个新的数组,其元素是通过对原数组的每个元素执行提供的函数后的结…...

在GEE中显示矢量或栅格数据的边界(包含样式设计)

需要保证最后显示的数据是一个 FeatureCollection 对象。 如果数据是一个 Geometry 或 Image&#xff0c;我们也可以使用 style 方法来设置样式并将其添加到地图上。以下是针对不同类型对象的处理方式&#xff1a; 1 Geometry对象 如果 table 是一个 Geometry 对象&#xff…...

django使用fetch上传文件

在上一篇文章中&#xff0c;我包装了fetch方法&#xff0c;使其携带cookie。但是之前fetch传递的是json数据&#xff0c;现在有了一个上传文件的需求&#xff0c;因此需要进行修改&#xff1a; const sendRequest (url, method, data) > {const csrftoken Cookies.get(cs…...

linux安装docker步骤

步骤1 脚本自动安装 curl -fsSL https://get.docker.com -o get-docker.sh sudo sh get-docker.sh 步骤2 启动Docker服务: sudo systemctl start docker 步骤3 验证Docker是否正确安装并运行一个容器: sudo docker run hello-world 安装正确&#xff0c;则可拉取镜像&am…...

Unity DOTS技术(一)简介

文章目录 一.概述二.将会介绍的内容三.DOTS技术与传统方式的不同传统问题DOTS技术 四.插件安装 一.概述 传统的游戏开发中,如果有成千上万的物体在场景中运动,那么你一定会认为是疯了.但有了Dost技术这一些都将变成可能.如图场景中有10000个物体在同时运动,帧率即能保持在60Fp…...

深度解读ChatGPT基本原理

一、基本原理 ChatGPT是一个基于深度学习的自然语言生成模型&#xff0c;使用了类似于GPT&#xff08;Generative Pre-trained Transformer&#xff09;的架构。GPT是由OpenAI开发的一种语言模型&#xff0c;能够生成与输入文本相关的连续性文本。 ChatGPT的基本原理是先使用…...

python实现——分类类型数据挖掘任务(图形识别分类任务)

分类类型数据挖掘任务 基于卷积神经网络&#xff08;CNN&#xff09;的岩石图像分类。有一岩石图片数据集&#xff0c;共300张岩石图片&#xff0c;图片尺寸224x224。岩石种类有砾岩&#xff08;Conglomerate&#xff09;、安山岩&#xff08;Andesite&#xff09;、花岗岩&am…...

【安卓跨进程通信IPC】-- Binder

目录 BinderBinder是什么&#xff1f;进程空间分配进程隔离Binder跨进程通信机制模型优点AIDL常见面试题 Binder 夯实基础之超详解Android Binder的工作方式与原理以及aidl示例代码 比较详细的介绍&#xff1a;Android跨进程通信&#xff1a;图文详解 Binder机制 原理 操作系统…...

大数据之Schedule调度错误(一)

当我们在利用ooize发起整个任务的调度过程中,如果多个调度任务同时运行并且多个调度任务操作了相同的表,那么就会出现如下的错误关系: Invalid path hdfs://iZh5w01l7f8lnog055cpXXX:8000/user/admin/xxx: No files matching path hdfs://iZh5w01l7f8lnog055cpXXX:8000/user/ad…...

DiffIR论文阅读笔记

ICCV2023的一篇用diffusion模型做Image Restoration的论文&#xff0c;一作是清华的教授&#xff0c;还在NIPS2023上一作发表了Hierarchical Integration Diffusion Model for Realistic Image Deblurring&#xff0c;作者里甚至有Luc Van Gool大佬。模型分三个部分&#xff0c…...

prometheus+alertmanager+webhook钉钉机器人告警

版本&#xff1a;centos7.9 python3.9.5 alertmanager0.25.0 prometheus2.46.0 安装alertmanager prometheus 配置webhook # 解压&#xff1a; tar -xvf alertmanager-0.25.0.linux-amd64.tar.gz tar -xvf prometheus-2.46.0.linux-amd64.tar.gz mv alertmanager-0.25.0.linu…...

ctfshow 年CTF web

除夕 Notice: Undefined index: year in /var/www/html/index.php on line 16 <?phpinclude "flag.php";$year $_GET[year];if($year2022 && $year1!2023){echo $flag; }else{highlight_file(__FILE__); } 弱比较绕过很简单&#xff0c;连函数都没有直…...

原型链、闭包、手写一个闭包函数、 闭包有哪些优缺点、原型链继承

什么是原型链&#xff1f; 原型链是一种查找规则 为对象成员查找机制提供一个方向 因为构造函数的 prototype 和其实例的 __ proto __ 都是指向原型对象的 所以可以通过__proto__ 查找当前的原型对象有没有该属性, 没有就找原型的原型, 依次类推一直找到Object( null ) 为…...

golang.org/x/net WebSocket开发完全手册:实现实时双向通信

golang.org/x/net WebSocket开发完全手册&#xff1a;实现实时双向通信 【免费下载链接】net [mirror] Go supplementary network libraries 项目地址: https://gitcode.com/gh_mirrors/ne/net 在现代Web应用开发中&#xff0c;实时双向通信已成为提升用户体验的关键技术…...

Mavlink协议解析:从Pixhawk飞控到QGC地面站的完整通信流程

Mavlink协议深度解析&#xff1a;构建Pixhawk与QGC的高效通信桥梁 当Pixhawk飞控的LED指示灯开始规律闪烁&#xff0c;QGC地面站的地图上突然出现了一个蓝色圆点——这看似简单的连接背后&#xff0c;隐藏着一套精密的通信语言体系。Mavlink协议就像无人机系统的神经网络&#…...

【C++27范围库前瞻实战指南】:20年标准库专家亲授5大扩展接口的工业级应用模式

第一章&#xff1a;C27范围库扩展全景概览C27 将对标准范围库&#xff08;Ranges&#xff09;进行实质性增强&#xff0c;聚焦于提升表达力、运行时效率与编译期元编程能力。核心演进方向包括惰性求值语义强化、范围适配器的定制化组合机制、对异步与并行范围操作的原生支持&am…...

DOCX转LaTeX:从繁琐排版到学术自动化的无缝过渡

DOCX转LaTeX&#xff1a;从繁琐排版到学术自动化的无缝过渡 【免费下载链接】docx2tex Converts Microsoft Word docx to LaTeX 项目地址: https://gitcode.com/gh_mirrors/do/docx2tex 痛点场景&#xff1a;学术写作中的格式转换困境 深夜三点&#xff0c;研究生小李盯…...

大厂真实高频的 LLM 大模型面试 36 题例题详解

一、基础原理篇(8 题) 1. 什么是 Transformer?核心结构是什么? 答:Transformer 是基于自注意力机制的 seq2seq 模型,完全替代 RNN 结构。核心结构: Encoder(编码)+ Decoder(解码) 多头注意力(Multi-Head Attention) 前馈网络 FFN 层归一化、残差连接举例:GPT 只…...

大模型“语言翻译官“Token深度解析:从人类语言到机器密码的惊险旅程!

本文深入浅出地介绍了大模型如何通过Token&#xff08;词元&#xff09;这一关键组件将人类自然语言翻译成机器能理解的数字密码。文章从Token的来源、生成全过程&#xff08;分词、数字化映射、向量化、矩阵运算、采样解码&#xff09;以及四种主流分词方案&#xff08;BPE、W…...

9 鸿蒙页面渲染效率优化实战 | 鸿蒙开发筑基实战

9 鸿蒙页面渲染效率优化实战 | 鸿蒙开发筑基实战 作者&#xff1a;杨建宾&#xff08;华夏之光永存&#xff09; 摘要 本文聚焦鸿蒙应用页面渲染卡顿、掉帧、长列表加载缓慢等核心痛点&#xff0c;梳理页面渲染全流程的通用优化方案&#xff0c;从布局规范、组件复用、渲染管控…...

Win11Debloat:Windows系统深度优化工具的全方位解决方案

Win11Debloat&#xff1a;Windows系统深度优化工具的全方位解决方案 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declutter and …...

Ubuntu 24.04 主机名修改全攻略:从基础到自动化脚本

1. 主机名修改基础&#xff1a;为什么需要关注这个小细节&#xff1f; 刚接触Ubuntu系统的朋友可能会好奇&#xff1a;主机名不就是个名字吗&#xff1f;为什么需要专门写篇文章来讲修改方法&#xff1f;我刚开始用Linux时也这么想过&#xff0c;直到有次在局域网里找了半小时的…...

五大赛道齐亮相!第四届世界科学智能大赛启动报名,首设人文科学赛道

随着人工智能深入科研实践&#xff0c;它不仅在各领域课题的预测、计算等方面屡创新高&#xff0c;也正介入曾被认为高度依赖人类直觉与经验的文化阐释工作。继第四届世界科学智能大赛的创新赛道“AI4S智能体CNS挑战赛”在一个月前率先发布&#xff0c;吹响了自主科研智能体的攻…...