MTK 开启Efuse的过程记录
MTK 平台开启SecureBoot[efuse]的配置过程
文章目录
- MTK 平台开启SecureBoot[efuse]的配置过程
- 1. 文章目标
- 2. 环境说明
- 3. Kernel配置
- 4. 证书生成
- 5. DA文件生成
- 6. 镜像和DA文件签名
- 7. Efuse和镜像烧入
- 8. 添加cmdline标识efuse是否开启
- 9. 工具汇总
1. 文章目标
记录在MTK平台下开启SecureBoot[Efuse]的整个过程。主要介绍整个配置过程和遇到的坑,该文章不含SecureBoot原理性的东西。关于SecureBoot原理,后面单独写个文章。
2. 环境说明
platform[平台] | project[项目] | Android Version |
---|---|---|
MT6761 | xqt551 | Android 12 |
注意:以下所有脚本和配置都是基于platfor=MT6761,project=xqt551编写的。如果是其他平台或项目需要对应改一下脚本!!!
3. Kernel配置
# 修改以下宏配置
# 1.路径:vendor/mediate/proprietary/bootable/bootloader/preloader/custom/xqt551/xqt551.mk
MTK_SECURITY_SW_SUPPORT=yes
MTK_SEC_BOOT=ATTR_SBOOT_ONLY_ENABLE_ON_SCHIP
MTK_SEC_USBDL=ATTR_SUSBDL_ONLY_ENABLE_ON_SCHIP
# 2.路径:vendor/mediate/proprietary/bootable/bootloader/lk/project/xqt551.mk
MTK_SECURITY_SW_SUPPORT=yes
# 3.路径:path-for-project-kernel/arch/arm/configs/xqt551_debug_defconfig
CONFIG_MTK_SECURITY_SW_SUPPORT=y
# 4.路径:path-for-project-kernel/arch/arm/configs/xqt551_defconfig
CONFIG_MTK_SECURITY_SW_SUPPORT=y
# 注意:如果是其他项目将xqt551改为对应的project,如果是64位系统将arm改为arm64
4. 证书生成
# ! /bin/bash
# generickey.shecho "1 Generate root key pair"
cd vendor/mediatek/proprietary/scripts/sign-image_v2/der_extractor# Generate private key command:
echo "1.1 Generate private key command:"
openssl genrsa -out root_prvk.pem 2048
python pem_to_der.py root_prvk.pem root_prvk.der# Generate public key command:
echo "1.2 Generate public key command:"
openssl rsa -in root_prvk.pem -pubout > root_pubk.pem
python pem_to_der.py root_pubk.pem root_pubk.derecho "2 image key pair"
echo "2.1 Generate img_prvk command:"
openssl genrsa -out img_prvk.pem 2048
python pem_to_der.py img_prvk.pem img_prvk.derecho "2.2 Generate img_pubk command:"
openssl rsa -in img_prvk.pem -pubout > img_pubk.pem
python pem_to_der.py img_pubk.pem img_pubk.derecho "3 DA key pair"
echo "3.1 Generate da_prvk command:"
openssl genrsa -out da_prvk.pem 2048
python pem_to_der.py da_prvk.pem da_prvk.derecho "3.2 Generate da_pubk command:"
openssl rsa -in da_prvk.pem -pubout > da_pubk.pem
python pem_to_der.py da_pubk.pem da_pubk.derchmod 777 der_extractor
echo "4 Generate oemkey.h"
./der_extractor root_pubk.der oemkey.h ANDROID_SBCecho "4.1 export oemkey.h"
# mtkbuild -o ./ -x oemkey.h
cp -r oemkey.h ../../../bootable/bootloader/preloader/custom/xqt551/inc/
cp -r oemkey.h ../../../bootable/bootloader/lk/target/xqt551/inc/echo "5 Generate dakey.h"
./der_extractor da_pubk.der dakey.h ANDROID_SBC
sed -i "s/OEM/DA/g" dakey.h
cp -r dakey.h ../../../bootable/bootloader/preloader/custom/xqt551/inc/
将上述脚本复制到源码根目录执行,会生成3组密钥。该脚本在刷入efuse后不能再执行,生成的密钥需要做好备份!!!
密钥组 | 生成的密钥文件 | 作用 |
---|---|---|
root keys |
root_prvk.pem(pem格式的私钥) root_prvk.der(der格式的私钥) root_pubk.pem(pem格式的公钥) root_pubk.der(der格式的公钥) oemkey.h(十六进制格式的私钥) |
该组密钥为根密钥需要烧写到efuse中, 烧入后就无法更改所以一旦生成需要做好备份!!! |
img keys |
img_prvk.pem(pem格式的私钥) img_prvk.der(der格式的私钥) img_pubk.pem(pem格式的公钥) img_pubk(der格式的公钥) |
该组密钥用于镜像签名和验签 |
da keys |
da_prvk.pem(pem格式的私钥) da_prvk.der(der格式的私钥) da_pubk.pem(pem格式的公钥) da_pubk.der(der格式的公钥) dakey.h(十六进制格式的公钥) |
该组密钥用于DA文件签名和验签 |
5. DA文件生成
DA文件包含需要刷入到设备的分区信息。需要使用FLASHLIB_DA_EXE(Official)_ALPS工具配合GCC和GnuWin32生成,工具下载路径见:工具汇总。以下是使用该工具生成DA文件的过程。
将GCC放到C:\Program Files
将GnuWin32放到C:\Program Files (x86)并配置环境变量
修改base.mk中GCCDIR的路径, base.mk路径:
FLASHLIB_DA_EXE(Official)_ALPS\FLASHLIB_DA_EXE_v5.2228.00.000\bin\Customization_Kit_buildspec\Raphael-da\make\base.mk
GCCDIR := c:/progra~1/GCC/arm-2015q1/bin
(注意:c:/progra~1/ 在window系统中就是指向C:\Program Files,GCCDIR有两个位置一个是linux环境一个是window环境)配置custom分区为不需要签名的分区,配置文件路径:
FLASHLIB_DA_EXE(Official)_ALPS\FLASHLIB_DA_EXE_v5.2228.00.000\bin\Customization_Kit_buildspec\Raphael-da\custom\MT6761\DA_BR\sec_policy_config_common.h
将CUST1_IMG_NAME 宏修改为:
#define CUST1_IMG_NAME “custom”替换oemkey.h
将源码下的oemkey.h替换到:
FLASHLIB_DA_EXE(Official)_ALPS\FLASHLIB_DA_EXE_v5.2228.00.000\bin\Customization_Kit_buildspec\Raphael-da\custom\MT6761\oemkey.h编译生成未签名的DA文件
执行目录:
FLASHLIB_DA_EXE(Official)_ALPS\FLASHLIB_DA_EXE_v5.2228.00.000\bin\Customization_Kit_buildspec
执行:make BBCHIP=MT6761
编译出来的DA路径:
FLASHLIB_DA_EXE(Official)_ALPS\FLASHLIB_DA_EXE_v5.2228.00.000\bin\Customization_Kit_buildspec\bin\MTK_AllInOne_DA.bin
(注意查看编译过程中有没有报error!!!如果很快就编译完成很可能是文件丢失需要重新解压Customization_Kit_buildspec.zip重新操作!!!)
6. 镜像和DA文件签名
将生成的MTK_AllInOne_DA.bin复制到源码vendor/mediatek/proprietary/scripts/secure_chip_tools/prebuilt/resignda/路径下
#!/bin/bash
# copy keys
cp -r vendor/mediatek/proprietary/scripts/sign-image_v2/der_extractor/img_prvk.pem \
vendor/mediatek/proprietary/bootable/bootloader/preloader/custom/xqt551/security/chip_config/s/keycp -r vendor/mediatek/proprietary/scripts/sign-image_v2/der_extractor/root_prvk.pem \
vendor/mediatek/proprietary/bootable/bootloader/preloader/custom/xqt551/security/chip_config/s/keycp -r vendor/mediatek/proprietary/scripts/sign-image_v2/der_extractor/da_prvk.pem \
vendor/mediatek/proprietary/scripts/secure_chip_tools/keys/resigndacp -r vendor/mediatek/proprietary/scripts/sign-image_v2/der_extractor/da_prvk.pem \
vendor/mediatek/proprietary/scripts/secure_chip_tools/keys/resignda/epp_prvk.pemcp -r vendor/mediatek/proprietary/scripts/sign-image_v2/der_extractor/da_prvk.pem \
vendor/mediatek/proprietary/scripts/secure_chip_tools/keys/toolauthcp -r vendor/mediatek/proprietary/scripts/sign-image_v2/der_extractor/da_prvk.pem \
vendor/mediatek/proprietary/scripts/secure_chip_tools/keys/toolauth/epp_prvk.pemcp -r vendor/mediatek/proprietary/scripts/sign-image_v2/der_extractor/root_prvk.pem \
vendor/mediatek/proprietary/scripts/secure_chip_tools/keys/toolauth#generate cert1 and cert2 key
python ./vendor/mediatek/proprietary/scripts/sign-image_v2/img_key_deploy.py mt6761 xqt551 \
cert1_key_path=./vendor/mediatek/proprietary/scripts/sign-image_v2/der_extractor/root_prvk.pem \
cert2_key_path=./vendor/mediatek/proprietary/scripts/sign-image_v2/der_extractor/img_prvk.pem \
root_key_padding=pss 2>&1 | tee SecureGen.log#build images
make clean-preloader
./build.sh xqt551 1 1 1 1 64 (MTK的编译脚本,如果没有直接make -j64)#sign DA and auth file
cd vendor/mediatek/proprietary/scripts/secure_chip_tools/
python resign_da.py prebuilt/resignda/MTK_AllInOne_DA.bin MT6761 settings/resignda/bbchips_pss.ini all \
out/resignda/MTK_AllInOne_DA-resing.binpython toolauth.py -i settings/toolauth/toolauth_key.ini -g settings/toolauth/toolauth_gfh_config_pss.ini \
out/toolauth/auth_sv5.auth
cd -
#sign images
MTK_PLATFORM_DIR=mt6761 #(注意替换为自己的平台)
MTK_BASE_PROJECT=xqt551 #(注意替换为自己的项目)
PYTHONDONTWRITEBYTECODE=True PRODUCT_OUT={out/image/dirs(编译出来的镜像路径)} BOARD_AVB_ENABLE=true \
python ./vendor/mediatek/proprietary/scripts/sign-image_v2/sign_flow.py \
-env_cfg ./vendor/mediatek/proprietary/scripts/sign-image_v2/env.cfg "mt6761" "xqt551"
在源码根目录下执行以上脚本会生成:
vendor/mediatek/proprietary/scripts/secure_chip_tools/out/resignda/MTK_AllInOne_DA-resing.bin: 签过名的DA文件
vendor/mediatek/proprietary/scripts/secure_chip_tools/out/toolauth/auth_sv5.auth: 校验文件
out/image/dirs(编译出来的镜像路径):签过名的镜像文件
7. Efuse和镜像烧入
efuse和镜像烧入需要用到SP_MDT_v5.2228.00.00_exe工具。工具下载路径见: 工具汇总
将签过名的镜像文件复制到images
将CheckSum_Generate_exe中的文件复制到images,执行CheckSum_Gen.exe生成Checksum.ini
将Checksum.ini复制到SP_MDT_v5.2228.00.00_exe目录下
修改SP_MDT_v5.2228.00.00_exe\Efuse.ini
Enable 修改为1
EfuseXmlPath指定到:images\efuse_MT6761.xml修改后的内容如下:
; 0 represents disable, 1 represents enable
; DownloadEfuseOneStep: 0 for disable, 1 for enable write efuse in format and download
[EfuseSettings]
Enable = 1
DownloadEfuseOneStep = 0
; EfuseOnly = 0
SettingsEnable = 0
LockEnable = 0
ReadBackEnable = 0
EfuseXmlPath= C:\Users\Administrator\Desktop\MTM1\Tools\SP_MDT_TOOL\images\efuse_MT6761.xml修改efuse_MT6761.xm注意三个路径要和镜像中的文件对应,pub-key-n要和oemkey.h中的内容对应
扫描设备准备烧写镜像
勾选BootRom+PreLoader COM Sel All点击scan点击是,设备断电接入再启动
搜索到设备后点击Stop all停止扫描准备开始烧写镜像
烧入efuse
烧入镜像
至此efuse的配置和烧写全部完成。
8. 添加cmdline标识efuse是否开启
为了判断efuse是否开启成功,可以在lk里面添加cmdline,用来标识efuse状态
diff --git a/vendor/mediatek/proprietary/bootable/bootloader/lk/app/mt_boot/mt_boot.c b/vendor/mediatek/proprietary/bootable/bootloader/lk/app/mt_boot/mt_boot.c
index a97d22599a0..4ed05c4e3bc 100644
--- a/vendor/mediatek/proprietary/bootable/bootloader/lk/app/mt_boot/mt_boot.c
+++ b/vendor/mediatek/proprietary/bootable/bootloader/lk/app/mt_boot/mt_boot.c
@@ -1733,6 +1733,8 @@ void get_AB_OTA_name(char *part_name, int size)}#endif /* MTK_AB_OTA_UPDATER */+extern int efuse_sbc_enabled(void);
+int boot_linux_from_storage(void){int ret = 0;
@@ -1740,10 +1742,8 @@ int boot_linux_from_storage(void)uint32_t ramdisk_target_addr = 0;uint32_t tags_target_addr = 0;uint32_t ramdisk_real_sz = 0;
-#if defined(CFG_NAND_BOOT)#define CMDLINE_TMP_CONCAT_SIZE 110char cmdline_tmpbuf[CMDLINE_TMP_CONCAT_SIZE];
-#endifswitch (g_boot_mode) {case NORMAL_BOOT:case META_BOOT:
@@ -1760,6 +1760,10 @@ int boot_linux_from_storage(void)NAND_MANF_CMDLINE, nand_flash_man_code, NAND_DEV_CMDLINE, nand_flash_dev_id);cmdline_append(cmdline_tmpbuf);#endif
+
+ snprintf(cmdline_tmpbuf, CMDLINE_TMP_CONCAT_SIZE, "%s%s", "androidboot.secureboot=", (efuse_sbc_enabled()?"enabled":"disabled"));
+ cmdline_append(cmdline_tmpbuf);
+ret = load_vfy_boot(BOOTIMG_TYPE_BOOT, CFG_BOOTIMG_LOAD_ADDR);ret = (int)handle_vboot_state(BOOTIMG_TYPE_BOOT);if (ret != STATUS_OK)
生成属性ro.boot.secureboot,enabled: efuse打开 disabled: efuse关闭
9. 工具汇总
工具下载路径:
https://download.csdn.net/download/zhuxc_001/87272156?spm=1001.2014.3001.5501
MTK 开启Efuse的过程记录相关推荐
- 将React Native 集成进现有OC项目中(过程记录) 、jsCodeLocation 生成方式总结
将RN集成到现有OC项目应该是最常见的,特别是已经有OC项目的,不太可能会去专门搞个纯RN的项目.又因为RN不同版本,引用的依赖可能不尽相同,所以特别说明下,本文参考的文档是React Native ...
- hexo 博客创建、部署、美化过程记录
hexo 博客创建.部署.美化过程记录 前言 作为一名信息工程专业的学生,编程语言没学多少,正规讲过的且了解比较深的是C++,也只是一些基本的编程,连数据库.数据结构还有各种算法都没学过,python ...
- 国标流媒体服务器GB28181协议和海康设备的交互过程记录
国标GB28181协议从2016年更新后,变得比之前更火了,到今年已经4年了,国标视频流媒体服务器基础的功能都已经发展起来,而更深层次的功能还需要进一步的研发. 在日常运用中,海康的摄像头运用较为广泛 ...
- OpenStack Train 安装过程记录(一):基础环境准备
文章目录 规划 硬件配置 IP规划 修改 hosts 解析 挂载安装磁盘,配置本地源 安装基础服务 NTP 时间同步 安装 OpenStack 包 控制节点需要安装的服务 数据库 消息队列 Memca ...
- 深度学习-在自带显卡GeForce RTX 2070的研华MIC-770工控机上安装Ubuntu18.04及显卡驱动过程记录
在自带显卡GeForce RTX 2070的研华MIC-770工控机上安装Ubuntu18.04及显卡驱动过程记录 1. 确认工控机是否带有独立显卡及显卡的型号 输入 lspci | grep -i ...
- 三星A20(SM-A205F) root过程记录
三星A20(SM-A205F) root过程记录 Root的目的: 可以让我们拥有掌控手机系统的权限,比如删除一些system/app下面的无用软件,更换开关机铃声和动画,拦截状态栏弹出的广告等. 谷 ...
- Ubuntu18.04 小米游戏本最早一代 双硬盘 安装 过程记录
Ubuntu18.04 小米游戏本最早一代 双硬盘 安装 过程记录.踩了很多坑,折腾了无数次,总结一下,方便日后查阅. UEFI+GPT 新买了一个1T的西数SN550,779元.疫情期间,价格大涨, ...
- Ubuntu 18.04 安装过程记录
Ubuntu 18.04 安装过程记录 目录 Ubuntu 18.04 安装过程记录 前言 安装步骤 制作启动U盘 分区与设置启动项 安装Ubuntu系统 Ubuntu系统换源 更改Windows启动 ...
- Python数据分析的过程记录
Python数据分析的过程记录 文章目录 Python数据分析的过程记录 一.需求介绍 二.以第1.个为例进行数据分析 1.获取一天的数据 2.开始一天的数据的分析 3.循环日期进行多天的数据分析: ...
最新文章
- python字典程序题_python字典练习题
- 加载pdf_Java 插入附件到PDF文档
- 苹果手机还原网络设置会怎样_装维技巧|手机能连wifi但网不通?
- 如何利用云原生技术构建现代化应用
- PowerShell 2.0 实践(四)管理Windows进程
- Spring Boot学习总结(8)——SpringBoot Common application properties(application.properties)详解
- tensorflow 实现打印预训练的模型中的变量名和变量值
- 进了小公司的应届程序员如何翻身进入大公司?
- ROS2_Foxy学习1——前言与安装
- CDH6.0.1环境Hadoop集群性能测试
- 第1143期AI100_机器学习日报(2017-11-04)
- locked肆虐,不少人已经中招-是否也有你
- 关于服务器端和客户端的区别
- Coursera无法播放视频问题的解决
- python脚本计算STM32的bxCAN的波特率
- python-----因子分析
- Google Play如何做ASO优化?影响搜索排名的主要因素.
- 设计复数类 Complex继承于数字类 Number,私有成员变量包括 double类型的实部rea(父类 Number中已定义)和虚部imag,公有成员方法包括两个构造方法(一个不带参数的和一个带两
- STM32软件学习笔记(一)基于HAL库的STM32F429单片机串口打印程序
- 7-6 学号识别(分数 10)