0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

RK3588+Linux固件签名与系统安全开发全指南

jf_44130326 来源:Linux1024 作者:Linux1024 2026-01-20 07:07 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

在高端嵌入式场景中,RK3588凭借8nm制程、6TOPS NPU算力及8K多媒体处理能力,成为AIoT、边缘计算的热门选择。而安全启动(Secure Boot)作为设备防护的第一道防线,是保障RK3588平台稳定运行的核心。本文结合瑞芯微官方文档与RK3588实测数据,聚焦官方build.sh指令集,从环境配置、密钥生成、固件签名到第三方系统适配,完整拆解安全开发流程,同时分享实测踩坑经验,确保方案可直接落地。

一、核心认知:RK3588安全启动关键特性

RK3588作为瑞芯微旗舰级芯片,其安全启动机制基于FIT方案(官方推荐,支持灵活镜像校验),核心特性如下:

wKgZPGluucqAA3_FAABQVf3pmv4889.png

1.硬件可信根:公钥哈希固化于OTP(不可逆熔断),作为校验起点,防止固件篡改;

2.分层校验链路Bootrom→Loader→U-Boot→Kernel→系统,任一环节校验失败则终止启动;

3.安全存储支持:默认使用RPMBeMMC物理安全分区)存储加密密钥,非eMMC设备可启用Security逻辑分区;

4.系统安全增强:支持System-Verity(系统校验)与System-Encryption(系统加密),适配EXT4等主流文件系统。

二、基础准备:环境与指令前置说明

1.环境要求

硬件:RK3588开发板(如EVB7 V11),确保OTP引脚(VCC_18)供电稳定;

软件:Linux SDK(本文基于rk3576 linux6.1)、OpenSSL、瑞芯微升级工具(upgrade_tool);

系统:目标第三方系统为Debian(本文以debian/linaro-rootfs.img为例)。

2.核心指令约定

本文所有操作基于SDK根目录下的官方build.sh指令,无需额外添加非官方脚本,指令格式及功能以./build.sh -h输出为准,关键指令分类如下:

指令类型

核心指令示例

作用

配置类

./build.sh menuconfig

图形化配置SDK安全参数

密钥生成类

./build.sh security-createkeys

生成安全启动所需RSA密钥对

固件编译类

./build.shuboot./build.sh kernel

编译签名LoaderU-BootKernel

安全系统类

./build.sh security-system

生成加密/校验后的系统镜像

镜像打包类

./build.sh updateimg

打包完整可烧录固件(update.img

清理类

./build.sh clean:security

清理安全相关编译产物

三、分步实战:基于build.sh的安全开发流程

1.第一步:SDK安全配置(关键前置)

通过menuconfig开启安全功能,确保后续编译指令生效:

# 进入SDK根目录,启动图形化配置界面make menuconfig

在配置菜单中按以下路径勾选关键选项(RK3588默认FIT方案):

->RK_SECURITY (安全功能总开关) ->[*] security feature (启用安全功能) ->Secureboot Method (FIT) -> 选中FIT(RK3588官方推荐) ->Optee Storage (RPMB) -> 选中RPMB(eMMC设备默认,Flash设备选SECURITY) ->security check method -> 按需选择(system-verity=系统校验,system-encryption=系统加密) ->[ ] burn security key (默认关闭,调试阶段不熔断OTP,量产时再开启) ->RK_SECURITY_INITRD_BASE_CFG (自动勾选,生成安全Ramdisk)

配置完成后保存退出,SDK会自动生成output/.config文件(若提示文件过时,按提示确认更新即可)。

2.第二步:生成安全密钥(仅需执行一次)

使用官方指令生成RSA密钥对(密钥丢失将导致设备变砖,务必备份):

# 生成签名用密钥(自动存储于u-boot/keys目录)./build.sh security-createkeys

指令执行后,在u-boot/keys目录下生成3个核心文件:

dev.key:私钥(签名用,需离线备份);

dev.pubkey:公钥(验签用,编译时自动嵌入固件);

dev.crt:自签名证书(等效于公钥,用于FIT镜像校验)。

踩坑提示:若执行时报错Can't load ~/.rnd into RNG”,需手动创建随机数文件:

touch~/.rnd

3.第三步:编译签名核心固件(Loader/U-Boot/Kernel

RK3588Loader(含SPL)、U-Boot需编译时签名,Kernel需开启安全模块支持,均通过build.sh指令完成:

1)编译签名LoaderU-Boot

LoaderBootrom校验的第一个固件,必须签名;U-Boot需关联密钥并支持FIT校验:

# 编译Loader(含SPL)与U-Boot,开启防回滚(版本号1,可自定义)./build.sh loader --spl-new --rollback-index-uboot 1

--spl-new:使用当前编译的SPL(含公钥)打包LoaderRK3588必须添加(官方SDK无预编译安全SPL);

--rollback-index-uboot 1:设置U-Boot防回滚版本号(需与menuconfig防回滚配置匹配,不开启防回滚可省略)。

编译成功后,在output/firmware目录生成已签名的loader.binuboot.img

2)编译支持安全模块的Kernel

Kernel需开启Device-Mapper(系统校验/加密依赖)与OPTEE(密钥存储依赖),通过指令直接编译:

# 编译Kernel(自动加载menuconfig中配置的安全模块)./build.sh kernel# 编译Kernel模块(若需驱动适配,可选执行)./build.sh modules

关键安全模块(已在menuconfig中开启,无需额外配置):

CONFIG_BLK_DEV_DM=y:启用Device-Mapper

CONFIG_DM_VERITY=y/CONFIG_DM_CRYPT=y:支持系统校验/加密;

CONFIG_TEE=y/CONFIG_OPTEE=y:启用OPTEE可信执行环境。

编译完成后,在kernel/arch/arm64/boot/目录生成Image(内核镜像)与dtbs/rockchip/rk3588-evb7-v11.dtb(设备树)。

4.第四步:生成安全Ramdisk(系统启动关键)

Ramdisk是中间小系统,负责启动时解密/校验目标系统,通过官方指令编译:

# 生成适配安全启动的Ramdisk(自动集成veritysetup/dmsetup工具)./build.sh security-ramboot

指令会基于Buildroot生成rootfs.cpio.gzRamdisk镜像),存储于buildroot/output/rockchip_rk3588_ramboot/images/目录,且自动关联menuconfig中配置的安全参数(如加密算法、密钥存储路径)。

5.第五步:第三方系统(Debian)安全处理

RK3588官方build.sh支持第三方系统适配,以Debian为例,需先对系统镜像加密/校验,再打包签名:

1)处理Debian系统镜像

# 进入固件输出目录cdoutput/firmware# 链接加密后的Debian镜像(替换默认rootfs)ln-rsf ../../debian/security_system.img rootfs.img# 打包完整可烧录固件update.imgcd../.../build.sh updateimg

指令自动生成加密后的debian/security_system.img(密文落盘,需密钥解密);

同时生成debian/security.info,记录加密算法(如aes-cbc-plain)、密钥信息(暂存于misc分区,首次开机转存RPMB)。

若需系统校验(仅防篡改,明文落盘),需先在menuconfig中切换“security check method”system-verity,再执行上述指令。

2)关联系统镜像与打包固件

将加密后的Debian镜像链接到固件打包目录,生成完整update.img

# 1. 重新配置SDK,开启密钥烧录./build.sh menuconfig-> RK_SECURITY -> [*] burn security key (勾选,启用OTP熔断)# 2. 重新编译Loader(触发密钥哈希烧录逻辑)./build.sh loader --spl-new --burn-key-hash

6.第六步:密钥烧录与固件刷写(量产关键)

1)熔断OTP(仅量产执行,不可逆!)

调试阶段无需烧录密钥(避免设备变砖),量产前需开启密钥烧录功能并熔断OTP

# 1. 重新配置SDK,开启密钥烧录./build.sh menuconfig-> RK_SECURITY -> [*] burn security key (勾选,启用OTP熔断)# 2. 重新编译Loader(触发密钥哈希烧录逻辑)./build.sh loader --spl-new --burn-key-hash

--burn-key-hash:编译时添加该参数,首次开机时Loader会将公钥哈希写入OTP,完成熔断;

熔断成功后,串口会打印“RSA: Write key hash successfully”

2)烧录固件到开发板

使用瑞芯微upgrade_tool工具烧录update.img

# 烧录完整固件(开发板进入Maskrom模式)upgrade_tool uf output/firmware/update.img

四、实测验证:安全机制生效测试(基于RK3588

通过替换未签名固件,验证安全机制是否生效,实测结果如下:

测试场景

操作方式

结果

关键现象

合法固件启动

烧录签名后的update.img

成功

串口打印“EXT4-fs (dm-0): mounted filesystem”,正常进入Debian系统

替换未签名rootfs.img

替换output/firmware/rootfs.img

失败

Kernel panic,提示“Attempted to kill init! exitcode=0x00000100”

替换未签名boot.img

替换output/firmware/boot.img

失败

停留在Loader模式,打印“Failed to verify required signature 'key-dev'”

替换未签名loader.bin

烧录未签名Loader

失败

开发工具不识别设备,无日志输出(OTP已熔断,拒绝未签名固件)

烧录未签名完整系统

烧录未签名update.img

失败

升级工具提示下载Boot失败Maskrom模式下无法识别固件

替换非签名加密的rootfs之后,报错进不了系统

wKgZPGluucqAduRCAADb55Cf9-Q751.pngwKgZPGluucqADSluAADooECLpuQ272.png

烧录回签名加密钥的之后,又成功进入系统

wKgZPGluucqAdnTBAALVszsRnVk547.png

替换未签名的boot.img,密钥校验失败,进不了kernel,停留在loader模式

wKgZPGluucqAKY26AAGbilkKhv8480.png

更新未签名uboot.img,校验失败,进不了uboot,还是进入maskrom模式

wKgZPGluucqAWaa-AAIPrTjN-8E269.pngwKgZPGluucqADPVoAAEMILgcfu0487.png

如果是替换没有签名的MiniLoaderAll.bin,烧录不了,芯片不识别,也没有log,因为密钥已经烧录到芯片otp中,固化在芯片了

wKgZPGluucuASbKwAAC7PM-mHG8036.png

如果烧录没有完全没有签名的整个系统,根本烧录不进去,根本原因还是MiniLoaderAll.bin没签名并且密钥已经烧录到芯片otp中,固化在芯片了

wKgZPGluucuAfeT5AABR6WIuAE0563.png

五、关键指令速查表与注意事项

1.核心指令速查表(官方build.sh指令)

操作目标

指令

开启图形化配置

./build.sh menuconfig

生成安全密钥

./build.sh security-createkeys

编译签名Loader/U-Boot

./build.sh loader --spl-new --rollback-index-uboot 1

编译Kernel

./build.sh kernel

生成安全Ramdisk

./build.sh security-ramboot

处理Debian系统

./build.sh security-system:debian/linaro-rootfs.img

打包完整固件

cd output/firmware && ./build.sh updateimg

熔断OTP(量产)

./build.sh loader --spl-new --burn-key-hash

清理安全编译产物

./build.sh clean:security

2.注意事项(实测踩坑总结)

1.密钥备份u-boot/keys目录下的dev.key务必离线备份,OTP熔断后密钥丢失将导致设备变砖;

2.调试阶段不熔断OTP:未确认固件稳定性前,不要勾选“burn security key”,避免无法回滚;

3.Ramdisk日志调试:若系统跳转失败,需修改Ramdiskinit脚本,将MSG_OUTPUT=/dev/null改为/dev/kmsg,通过串口查看启动日志(具体修改可私信获取);

4.RPMBSecurity分区RK3588eMMC设备)默认用RPMB存储密钥,若为Flash设备,需在menuconfig中切换“Optee Storage”SECURITY,并添加4M大小的Security分区;

5.指令依赖顺序:必须先执行makemenuconfig配置安全参数,再执行security-createkeysloader等指令,否则参数不生效。

总结

RK3588的安全开发核心是围绕官方build.sh指令集,构建配置密钥编译烧录的完整链路。本文通过实测验证,确认该流程可有效防止未签名固件启动,且适配Debian等第三方系统。需注意,量产前务必完成OTP熔断与密钥备份,同时根据硬件类型(eMMC/Flash)选择合适的安全存储方案。

若需Ramdisk调试脚本、Debian镜像优化等细节,可私信交流,后续将推出专题文章深入讲解。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式
    +关注

    关注

    5196

    文章

    20402

    浏览量

    332887
  • Linux
    +关注

    关注

    88

    文章

    11746

    浏览量

    218811
  • 固件
    +关注

    关注

    11

    文章

    569

    浏览量

    24816
  • 瑞芯微
    +关注

    关注

    27

    文章

    784

    浏览量

    54099
  • RK3588
    +关注

    关注

    8

    文章

    550

    浏览量

    7249
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    RK3588 CPU 隔离:AB/非 AB 系统双方案适配实战

    RK3588嵌入式产品开发中,CPU隔离是提升系统实时性的核心手段,能让关键任务独占核心资源,规避系统调度与中断干扰。本次基于RK3588
    的头像 发表于 02-09 07:12 69次阅读
    <b class='flag-5'>RK3588</b> CPU 隔离:AB/非 AB <b class='flag-5'>系统</b>双方案适配实战

    保姆级教程!RK3588 Linux6.1 固件签名完整实现方案(不含rootfs)

          在嵌入式 Linux 开发中,固件签名是保障设备安全的关键环节 —— 它能有效防止恶意固件
    的头像 发表于 01-14 17:21 1588次阅读
    保姆级教程!<b class='flag-5'>RK3588</b> <b class='flag-5'>Linux</b>6.1 <b class='flag-5'>固件</b><b class='flag-5'>签名</b>完整实现方案(不含rootfs)

    RK3588采集Cameralink图像快速搭建系统办法

    : CL-U3,便携式应用。 瑞芯微的RK3588开发板很多,种类各式各样。如何快速搭建一套自己的基于RK3588的嵌入式Cameralink图像采集处理方案呢。下面推荐一下。 快速原型机的搭建方案如下: (1
    发表于 12-19 10:07

    【技术分享】RK3588如何搭建xenomai3+ethercat

    说明使用的RK3588的分支版本是linux-6.1-stan-rkr6内核版本是6.1.99把瑞芯微的SDK更新到linux-6.1-stan-rkr6这个版本即可。编译xenomai3的内核请参考上一篇技术分享:技术分享|
    的头像 发表于 12-11 17:26 927次阅读
    【技术分享】<b class='flag-5'>RK3588</b>如何搭建xenomai3+ethercat

    迅为RK3588开发板Android系统烧写及注意事项

    迅为RK3588开发板Android系统烧写及注意事项
    的头像 发表于 12-03 15:17 7090次阅读
    迅为<b class='flag-5'>RK3588</b><b class='flag-5'>开发</b>板Android<b class='flag-5'>系统</b>烧写及注意事项

    RK3588核心板/开发板RT-Linux系统实时性及硬件中断延迟测试

    本文介绍瑞芯微RK3588芯片平台RT-Linux系统实时性及硬件中断延迟测试,基于触觉智能RK3588核心板/开发板演示。
    的头像 发表于 11-28 18:57 584次阅读
    <b class='flag-5'>RK3588</b>核心板/<b class='flag-5'>开发</b>板RT-<b class='flag-5'>Linux</b><b class='flag-5'>系统</b>实时性及硬件中断延迟测试

    RK3588数据手册

    RK3588的资料
    发表于 08-01 16:08 51次下载

    RK3588参数与主要特性 RK3588数据手册解读

    RK3588参数与主要特性 RK3588数据手册解读
    的头像 发表于 05-19 18:34 1.2w次阅读
    <b class='flag-5'>RK3588</b>参数与主要特性  <b class='flag-5'>RK3588</b>数据手册解读

    技术分享|iTOP-RK3588开发板Ubuntu20系统旋转屏幕方案

    技术分享|iTOP-RK3588开发板Ubuntu20系统旋转屏幕方案
    的头像 发表于 04-18 15:19 1278次阅读
    技术分享|iTOP-<b class='flag-5'>RK3588</b><b class='flag-5'>开发</b>板Ubuntu20<b class='flag-5'>系统</b>旋转屏幕方案

    RK3588 EVB开发板原理图讲解【八】 RK3588 power Tree

    本帖最后由 瑞芯微方案开发老王 于 2025-3-1 11:41 编辑 一、RK3588电源架构核心特点 ​多电源域设计​ 芯片通常划分为多个独立电源域(Power Domain),例如
    发表于 03-01 11:38

    rk3588硬件原理图

    RK3588的硬件参考设计
    发表于 02-25 17:44 42次下载

    RK3588原理图

    RK3588开发板原理图文件
    发表于 02-24 15:57 59次下载

    Banana Pi开源社区基于瑞芯微RK3588开发板,DeepSeek开发利器

    Banana Pi开源社区基于瑞芯微RK3588开发板,DeepSeek开发利器
    的头像 发表于 02-19 18:25 3693次阅读
    Banana Pi开源社区基于瑞芯微<b class='flag-5'>RK3588</b><b class='flag-5'>开发</b>板,DeepSeek<b class='flag-5'>开发</b>利器

    迅为RK3588开发板实时系统编译-Preemption系统/ Xenomai系统编译-实时系统烧写-烧写固件

    演示烧写过程使用的镜像地址是“iTOP-3588 开发板\\\\01_【iTOP-RK3588 开发板】基础资料\\\\10_实时系统配套资
    发表于 02-18 11:32

    迅为RK3588S开发板/核心板介绍

    输出、PCle2.0、USB3.0、USB2.0. RS485、TypeC、SARADC等接口一应俱全。 系统支持 我们已经在RK3588开发了稳定又好用的Android13、Debian. Buildroot、Ubuntu等
    发表于 02-13 14:40