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

MTK 平台项目security boot 开启/关闭 及 系统签名流程

以 https://online.mediatek.com/FAQ#/SW/FAQ26691 为基础做如下记录以做备忘:

How to Enable/Disable Secure Boot for Security 3.0:

1、 How to Enable


      Path      Enable
Preloader      /vendor/mediatek/proprietary/bootable/bootloader/preloader/custom/{Project Name}/{Project Name}.mk     

MTK_SECURITY_SW_SUPPORT=yes

MTK_SECURITY_ANTI_ROLLBACK=yes    

     \\Note:配置该项会打开anti-rollback

MTK_SEC_BOOT = ATTR_SBOOT_ENABLE

     \\ATTR_SBOOT_ENABLE: always enable       

     \\ATTR_SBOOT_ONLY_ENABLE_ON_SCHIP:enable depend on SBC_EN

MTK_SEC_USBDL = ATTR_SUSBDL_ENABLE

    \\ATTR_SUSBDL_ENABLE: always enable)

    \\ ATTR_SUSBDL_ONLY_ENABLE_ON_SCHIP: enable depend on SBC_EN
lk2     /vendor/mediatek/proprietary/bootable/bootloader/lk2/project/{Project name}.mk     

MTK_SECURITY_SW_SUPPORT=yes

MTK_SECURITY_ANTI_ROLLBACK=yes 

    \\Note:配置该项会打开anti-rollback
Kernel     

/kernel-5.10/arch/arm64/configs/{Project Name}_defconfig

/kernel-5.10/arch/arm64/configs/{Project Name}_debug_defconfig

   ( e.g.   /kernel-5.10/arch/arm64/configs/k6983v1_64_defconfig)
    

CONFIG_MTK_SECURITY_SW_SUPPORT=m
/device/mediateksample/{PROJECT}/ko_order_table.csv     

在ko_order_table.csv新增如下配置:

sec.ko,/drivers/misc/mediatek/masp/sec.ko,vendor,Y,Y,user/userdebug/eng

2、 How to Disable:

      Path      Enable
Preloader      /vendor/mediatek/proprietary/bootable/bootloader/preloader/custom/{Project Name}/{Project Name}.mk     

MTK_SECURITY_SW_SUPPORT=no

MTK_SECURITY_ANTI_ROLLBACK=no    

MTK_SEC_BOOT = ATTR_SBOOT_DISABLE

MTK_SEC_USBDL = ATTR_SUSBDL_DISABLE
lk2     /vendor/mediatek/proprietary/bootable/bootloader/lk2/project/{Project name}.mk     

MTK_SECURITY_SW_SUPPORT=no

MTK_SECURITY_ANTI_ROLLBACK=no  
Kernel     

/kernel-5.10/arch/arm64/configs/{Project Name}_defconfig/kernel-5.10/arch/arm64/configs/{Project Name}_debug_defconfig   ( e.g.   /kernel-5.10/arch/arm64/configs/k6983v1_64_defconfig) 
    CONFIG_MTK_SECURITY_SW_SUPPORT=n 
/device/mediateksample/{PROJECT}/ko_order_table.csv     sec.ko,/drivers/misc/mediatek/masp/sec.ko,vendor,N,N,user/userdebug/eng

 How to Enable/Disable Secure download

      1、 How to Enable

Features     Path     How to Enable
Security Download     /vendor/mediatek/proprietary/bootable/bootloader/preloader/platform/{Platform}/flash/make_script/mode/DA_BR.mk     

C_OPTION += -DDA_ENABLE_SECURITY=1 
DA Anti-rollbck     C_OPTION += -DDA_ENABLE_ANTI_ROLLBACK=1 

      2、How to Disable

Features     Path     How to Enable
Security Download     /vendor/mediatek/proprietary/bootable/bootloader/preloader/platform/{Platform}/flash/make_script/mode/DA_BR.mk     

删除:  C_OPTION += -DDA_ENABLE_SECURITY=1 
DA Anti-rollbck     删除: C_OPTION += -DDA_ENABLE_ANTI_ROLLBACK=1 

签名流程

 Generate Root /Img key :   (需要安装openssl 环境)

    Step1:    cd  /vendor/mediatek/proprietary/scripts/sign-image_v2/der_extractor 

    Step2:    For Root key:  openssl genrsa -out root_prvk.pem 2048  

                  For Img  key:   openssl genrsa -out img_prvk.pem 2048

    Step3:     openssl rsa -in root_prvk.pem -pubout > root_pubk.pem

                   openssl rsa -in img_prvk.pem -pubout > img_pubk.pem

    Step4:     python pem_to_der.py root_prvk.pem root_prvk.der

                   python pem_to_der.py img_prvk.pem img_prvk.der

    Step5:     python pem_to_der.py root_pubk.pem root_pubk.der

    Step6:    Generate oemkey.h for key config:

                 chmod 777 der_extractor

                 cd 根目录

                 ./vendor/mediatek/proprietary/scripts/sign-image_v2/der_extractor/der_extractor root_pubk.der oemkey.h ANDROID_SBC

config key for verify img/DA:

将前面生成的oemkey.h,替换到如下Path
Preloader     

/vendor/mediatek/proprietary/bootable/bootloader/preloader/custom/{Project_Name}/inc/oemkey.h

/vendor/mediatek/proprietary/bootable/bootloader/preloader/custom/{Project_Name}/inc/dakey.h     - Note:  dakey.h为Pubk key, 生成方式参考oemkey.h,  用于preloader verify da,
lk2     /vendor/mediatek/proprietary/bootable/bootloader/lk2/target/{Project_Name}/include/oemkey.h
DA     /vendor/mediatek/proprietary/bootable/bootloader/preloader/platform/{Platform}/flash/custom/oemkey.h

regenerate cert1 & cert2 if key change

           Step1:  cd 根目录

           Step2:  python vendor/mediatek/proprietary/scripts/sign-image_v2/img_key_deploy.py mt6983 cert1_key_path={KEY_PATH}/root_prvk.pem cert2_key_path={KEY_PATH}/img_prvk.pem root_key_padding=pss | tee gen_cert1_cert2_key.log

           Step3:  到path /vendor/mediatek/proprietary/bootable/bootloader/preloader/custom/mt6983/security/cert_config/  检查cert1 cert2_key的修改日期是否正确

Resign for all img:

             Step1.     在img_list.txt检查需配置Sign的image:    /vendor/mediatek/proprietary/custom/{platform}/security/cert_config/img_list.txt 

             Step2.    把生成的root_prvk.pem和img_prvk.pem 私钥更新替换到此路径: /vendor/mediatek/proprietary/scripts/sign-image_v2/hsm_test_keys

             Step3.    copy需resign的image到此路径:   /vendor/mediatek/proprietary/scripts/sign-image_v2/out

             Step4.    generate cert1 cert2, cd 根目录:

             python vendor/mediatek/proprietary/scripts/sign-image_v2/img_key_deploy.py {Platform} {Project} cert1_key_path={KEY_PATH}/root_prvk.pem cert2_key_path={KEY_PATH}/img_prvk.pem root_key_padding=pss | tee gen_cert1_cert2_key.log

             到path /vendor/mediatek/proprietary/custom/{platform}/security/cert_config/  检查cert1 cert2_key的修改日期是否正确

             Step5.    cd 根目录

             Step6.    python vendor/mediatek/proprietary/scripts/sign-image_v2/sign_flow.py { Platform }  { Project }

     3) Resign for single img:

PYTHONDONTWRITEBYTECODE=True python sign_flow.py -env_cfg env.cfg -target lk.img { Platform }  { Project } | tee sign_lk.log

     4) How To Customize Remote Security Server Sign: [FAQ26693]: Security 3.0 Sign Tool Usage


MTK 平台项目(L400) antirollback升级 demo:


1.
从签名服务器~/project/SecurityKey/Sign/MTK6765/L400/signimage/keys/目录下拷贝root_prvk.pem和img_prvk.pem 到本地L400项目android/vendor/mediatek/proprietary/scripts/sign-image_v2/der_extractor/der_extractor目录下

2.
修改本地L400项目android/vendor/mediatek/proprietary/scripts/secure_chip_tools/settings/pbp/目录和android/vendor/mediatek/proprietary/bootable/bootloader/preloader/custom/L400/security/chip_config/s/key/目录下的pl_content.ini和pl_key.ini文件,将sw_ver修改为升级的antirollback的值,例如antirollback的值2则为sw_ver = "2"

3.
从签名服务器~/project/SecurityKey/Sign/MTK6765/L400/signimage/pbp/目录下拷贝root_prvk.pem和img_prvk.pem 私钥更新替换路径: /vendor/mediatek/proprietary/bootable/bootloader/preloader/custom/L400/security/chip_config/s/key/下的root_prvk.pem和img_prvk.pem

4.
(1)cd android 
(2)source build/envsetup.sh 
(3)lunch 
(4)full_L400-user
(5)cd vendor/mediatek/proprietary/scripts/sign-image_v2/
(6)python img_key_deploy.py mt6765 L400 cert1_key_path=./der_extractor/root_prvk.pem cert2_key_path=./der_extractor/img_prvk.pem root_key_padding=pss -workspace=../../../../../| tee deploy.log

5.
编译user版本 
查看sign_result文件imgVer INTEGER值是否为升的值
例如antirollback值为2
imgVer INTEGER::= 2

6.
使用avbtool工具查看img的antirollback的值
$sudo ./android/out/soong/host/linux-x86/bin/avbtool info_image --image ./android/out/target/product/L400/boot.img

Rollback Index:     2

7.
开机查看系统imei是否有来判断系统的modem是否起来。
 

相关文章:

  • autowired注解底层实现代码
  • Ant Design Vue Pro流程分析记录
  • JMeter源码解析之SplashScreen.java
  • [每日一题]170:分糖果 II
  • 今日好料推荐(ARM嵌入式)
  • chatgpt4和文心一言的简单对比
  • 某红书旋转滑块验证码分析与协议算法实现(高通过率)
  • C++ B (1124) : 斐波那契数列第n项Plus
  • SpringBoot+百度地图+Mysql实现中国地图可视化
  • RabbitMQ-直连交换机(direct)使用方法
  • Linux--线程的分离、线程库的地址关系的理解、线程的简单封装(二)
  • Kubernetes 之 Secret
  • App开发前端开发语言:深度解析与应用探索
  • MySQL—函数—函数小结
  • 民国漫画杂志《时代漫画》第33期.PDF
  • css的样式优先级
  • CSS实用技巧干货
  •  D - 粉碎叛乱F - 其他起义
  • Git同步原始仓库到Fork仓库中
  • IOS评论框不贴底(ios12新bug)
  • JavaScript 基础知识 - 入门篇(一)
  • JAVA并发编程--1.基础概念
  • python 装饰器(一)
  • ReactNative开发常用的三方模块
  • React-生命周期杂记
  • Yeoman_Bower_Grunt
  • 阿里中间件开源组件:Sentinel 0.2.0正式发布
  • 前端技术周刊 2018-12-10:前端自动化测试
  • 前端临床手札——文件上传
  • 前端面试之CSS3新特性
  • 什么软件可以剪辑音乐?
  • 问:在指定的JSON数据中(最外层是数组)根据指定条件拿到匹配到的结果
  • 限制Java线程池运行线程以及等待线程数量的策略
  • 小程序、APP Store 需要的 SSL 证书是个什么东西?
  • 学习ES6 变量的解构赋值
  • 小白应该如何快速入门阿里云服务器,新手使用ECS的方法 ...
  • ​​快速排序(四)——挖坑法,前后指针法与非递归
  • ‌JavaScript 数据类型转换
  • # Pytorch 中可以直接调用的Loss Functions总结:
  • #565. 查找之大编号
  • #define与typedef区别
  • #NOIP 2014# day.1 生活大爆炸版 石头剪刀布
  • #我与Java虚拟机的故事#连载08:书读百遍其义自见
  • (javaweb)Http协议
  • (pojstep1.1.2)2654(直叙式模拟)
  • (Redis使用系列) Springboot 实现Redis消息的订阅与分布 四
  • (附源码)计算机毕业设计高校学生选课系统
  • (考研湖科大教书匠计算机网络)第一章概述-第五节1:计算机网络体系结构之分层思想和举例
  • (四)Linux Shell编程——输入输出重定向
  • (微服务实战)预付卡平台支付交易系统卡充值业务流程设计
  • (原創) 如何讓IE7按第二次Ctrl + Tab時,回到原來的索引標籤? (Web) (IE) (OS) (Windows)...
  • (转)程序员疫苗:代码注入
  • (转)大型网站架构演变和知识体系
  • (转)关于多人操作数据的处理策略
  • .net 无限分类