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

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

3天内不再提示

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

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

扫码添加小助手

加入工程师交流群

嵌入式Linux开发中,固件签名是保障设备安全的关键环节——它能有效防止恶意固件篡改、非法刷入,从源头筑牢设备的系统安全防线。最近在RK3588平台(Linux6.1内核)上实操固件签名时,踩了不少官方文档的坑,经过反复调试终于打通全流程。今天就把这份实战经验整理成保姆级教程,从配置到问题排查,一步步带大家搞定RK3588的固件签名!

一、核心原理速览

固件签名的核心逻辑是通过非对称加密(RSA2048)验证固件完整性:

1.生成RSA密钥对(私钥用于签名,公钥用于验签);

2.ubootkernel打包生成的boot.img添加数字签名;

3.设备启动时,uboot通过内置的公钥验证boot.img签名合法性,只有验证通过才会加载kernel

本次实操基于RK3588开发板+Linux6.1内核+uboot官方源码,全程围绕「配置-密钥-签名-验证」四大环节展开。

二、前期准备

1.已编译完成的uboot源码(rk3588_defconfig配置);

2.已编译生成的kernel镜像(boot.img);

3.RK官方工具链(含rk_sign_tool);

4.OpenSSL工具(用于生成自签名证书);

5.开发环境:Ubuntu 20.04 LTS(其他Linux发行版同理)。

三、分步实操指南

第一步:uboot配置开启签名功能

首先需要在uboot中启用FIT镜像签名支持,修改配置文件:

1.进入uboot源码根目录,编辑配置文件:

vim u-boot/configs/rk3588_defconfig

2.在文件末尾添加以下两行配置,开启ubootSPL的签名功能:

CONFIG_FIT_SIGNATURE=yCONFIG_SPL_FIT_SIGNATURE=y

3.保存退出后,重新编译uboot确保配置生效(若已编译过,可直接执行后续步骤,签名时会自动应用配置)。

第二步:生成RSA密钥对与自签名证书

这一步是坑最多的地方!官方文档的指令存在路径和文件名错误,以下是验证通过的正确流程:

1.创建密钥存储目录

uboot源码根目录下创建keys文件夹,用于存放密钥和证书:

mkdir-pkeys

2.生成RSA2048密钥对

使用RK官方工具rk_sign_tool生成私钥(private_key.pem)和公钥(public_key.pem),执行命令:

../rkbin/tools/rk_sign_tool kk--bits2048--out.

注意:rk_sign_tool的路径需根据你的实际目录调整(通常在rkbin/tools下);

执行成功后,会在uboot根目录生成private_key.pem(私钥)和public_key.pem(公钥)。

3.建立密钥软链接(关键步骤)

官方文档的链接指令会导致文件找不到,正确做法是进入keys目录建立软链接,确保签名工具能识别密钥:

cdkeysln-s ../public_key.pem dev.pubkey # 公钥链接ln-s ../private_key.pem dev.key  # 私钥链接cd..

为什么要做软链接?因为签名工具默认读取keys目录下名为dev.key(私钥)和dev.pubkey(公钥)的文件,直接链接避免修改工具配置。

4.生成自签名证书

使用OpenSSL生成x509格式自签名证书(本质等同于公钥,用于设备端验签):

openssl req -batch -new -x509 -key keys/dev.key -out keys/dev.crt

参数说明:

-batch:自动填充信息,无需手动输入;

-new -x509:生成自签名证书;

-key:指定私钥路径;

-out:输出证书路径。

5.验证密钥文件

执行以下命令查看keys目录下的文件,确保3个文件都存在:

lskeys/

正确输出应为:dev.key(私钥链接)、dev.pubkey(公钥链接)、dev.crt(自签名证书)。

第三步:固件签名与打包

1.准备boot.img

kernel编译生成的boot.img复制到uboot源码根目录(与keys文件夹同级):

cp/path/to/kernel/boot.img ./ # 替换为你的boot.img实际路径

2.执行签名命令

uboot源码根目录下执行签名指令,支持两种模式:

模式1:仅签名(不烧录公钥到OTP

适合开发测试阶段,无需修改设备OTP

./make.shrk3588--spl-new--boot_imgboot.img

模式2:签名+烧录公钥哈希到OTP

./make.shrk3588--spl-new--boot_imgboot.img--burn-key-hash

适合量产阶段,公钥哈希写入OTP后,设备仅认可该密钥签名的固件:

3.验证签名结果

签名成功后,终端会输出以下提示,同时生成已签名的镜像文件:

wKgZPGlnYO6ASk1hAADuFvjqTf8688.png

********sign_tool ver1.42********privatekeyiskeys/dev.keypublickeyiskeys/dev.pubkeyloading key ok.Image(signed,version=0):uboot.img(FITwithuboot,trust...)isreadyImage(signed,version=0):boot.img(FITwithkernel,fdt,resource...)isreadyImage(signed):rk3588_spl_Loader_v1.18.113.bin(withspl, ddr...)isready

已签名的boot.img会覆盖原文件,无需手动替换;

若需保留原未签名镜像,建议先备份。

4.重新打包固件

最后执行sdk根目录的打包脚本,生成最终可烧录的完整固件:

./build.sh updateimg

打包完成后,会在输出目录生成包含签名信息的完整固件(如update.img)。

四、常见问题排查(避坑指南)

问题1:创建软链接时提示「文件已存在」

原因:之前执行过错误指令,残留了无效链接;

解决:删除keys目录下的残留文件,重新创建链接:

rm-rf keys/* # 清空keys目录cdkeysln-s ../public_key.pem dev.pubkeyln-s ../private_key.pem dev.keycd..

问题2:生成证书时提示「Can't open keys/dev.key for reading

原因:软链接路径错误,导致OpenSSL找不到私钥;

解决:必须在keys目录下创建软链接,且链接路径为../private_key.pem(相对路径不能错)。

问题3:签名后启动停留在loader阶段,提示「Failed to verify required signature

原因:uboot未加载公钥,或签名时使用的私钥与验签公钥不匹配;

解决:

a.确认uboot配置中已开启CONFIG_FIT_SIGNATURE=y

b.重新生成密钥对和证书,确保签名时使用的是keys目录下的dev.key

c.烧录已签名的boot.img(而非未签名的原文件)。

问题4:签名工具提示「load key failed

原因:密钥文件名错误(必须是dev.keydev.pubkey);

解决:检查keys目录下的文件命名,确保软链接名称正确。

五、验证签名有效性

1.将打包后的完整固件(update.img)通过RK烧录工具烧录到开发板;

2.开机查看串口日志,若出现以下信息,说明签名验证通过:

conf:sha256,rsa2048:dev-ok.Verifysignature'key-dev'success

3.设备正常进入kernel启动流程,最终进入系统,说明固件签名生效!

wKgZPGlnYO6AICR3AANINWPrIlU790.png

六、总结

RK3588的固件签名核心是「配置-密钥-签名」三步走,关键避坑点在于:

1.正确配置uboot的签名开关;

2.严格按照路径和文件名生成密钥与链接;

3.确保签名后的boot.img被正确打包进固件。

通过固件签名,我们能有效防止恶意篡改固件导致的安全风险,尤其适合量产阶段的设备安全管控。如果在实操中遇到其他问题,欢迎在评论区留言交流~后续还会分享更多RK3588的实战教程,记得点赞关注不迷路!

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

    关注

    88

    文章

    11821

    浏览量

    219592
  • RK3588
    +关注

    关注

    8

    文章

    592

    浏览量

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    瑞芯微RK3588开发板RK3588 EVB和RK3588S EVB解读

    瑞芯微RK3588开发板RK3588 EVB和RK3588S EVB解读 瑞芯微旗舰芯RK3588系列开发板受到广大开发者伙伴的关注和问询。针对相关的开发板功能、操作指南等问题,我们一
    的头像 发表于 09-22 15:54 2.3w次阅读
    瑞芯微<b class='flag-5'>RK3588</b>开发板<b class='flag-5'>RK3588</b> EVB和<b class='flag-5'>RK3588</b>S EVB解读

    RK3588 Android+Linux双系统方案实现

    linux和android分区表中需要用"_android"字段来区分。 硬件环境 基于RK3588 EVB1 开发板 实现,系统切换按键是ESC 返回键 软件环境 RK3588 An
    的头像 发表于 10-10 14:25 1.2w次阅读
    <b class='flag-5'>RK3588</b> Android+<b class='flag-5'>Linux</b>双系统<b class='flag-5'>方案</b>的<b class='flag-5'>实现</b>

    求一种基于RK3588实现SPI-NOR大容量存储方案

    1、基于RK3588S自研平板方案实现硬件存储CPU: RK3588SDDR: LPDDR5 8GBNOR: SPI接口 32MB容量SSD: PCIE接口 256GB容量软件版本要求
    发表于 05-23 14:20

    如何实现基于RK3588的Android系统与Linux系统切换呢

    linux和android分区表中需要用"_android"字段来区分。硬件环境基于RK3588 EVB1开发板实现,系统切换按键是ESC 返回键软件环境RK3588
    发表于 05-26 10:16

    TB-RK3588开发板debian11固件远程登录调试

    开机登录帐号Debian11默认的登录账号是:toybrick,登录密码是:toybrick远程登录调试TB-RK3588开发板出厂debian11固件默认支持两种远程登录:adb和sshadb登录
    发表于 06-17 15:54

    基于RK3588芯片方案开发ARM PC项目

    自己的ARM PC。RK3588虽然不是采用X1架构,但是其CPU性能和GPU性能已经完全满足PC的性能需求,并且SoC芯片有着天然的多功能、低功耗优势。在ARM PC市场,RK3588的产品解决方案有着
    发表于 07-27 16:05

    RK3588 SDK编译与固件烧写步骤

    ; make ARCH=arm64 rk3588sevb1-lp4x-v10.img -j24  单独编译uboot  $ 。/make.sh rk3588  2、固件烧写  升级工具
    发表于 08-31 17:45

    【飞凌RK3588开发板试用】源码编译

    OK3588-linux-source.tar.bz2.a*拷贝到虚拟机~/rk3588 目录。拷贝文件的方式有很多,笔者使用的是共享文件夹方式。3.解压源码$ cat
    发表于 03-28 22:32

    迅为RK3588核心板平台新增工业方案

    迅为RK3588核心板平台新增工业方案
    的头像 发表于 04-18 15:34 4042次阅读
    迅为<b class='flag-5'>RK3588</b>核心板平台新增工业<b class='flag-5'>级</b><b class='flag-5'>方案</b>

    rk3588rk3588s的区别

    rk3588rk3588s的区别 Rockchip是一家专业的半导体公司,成立于2001年,总部位于中国深圳,主要从事集成电路的设计、开发和销售。他们的热门产品RK3588RK3588
    的头像 发表于 08-15 16:44 2.1w次阅读

    RK35883588s的区别

    RK35883588s的区别 Rockchip RK3588RK3588s是两种功能强大且广受欢迎的片上系统(SoC)解决方案,用于一系
    的头像 发表于 08-15 17:03 2.9w次阅读

    迅为RK3588Linux 系统中使用 NPU

    迅为RK3588Linux 系统中使用 NPU
    的头像 发表于 09-08 14:14 2849次阅读
    迅为<b class='flag-5'>RK3588</b>在 <b class='flag-5'>Linux</b> 系统中使用 NPU

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

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

    实战复盘:RK3588 SPI+PCIe3x4方案启动修复,从节点配置到驱动适配全解析

          在 RK3588 嵌入式项目中, “ 接口配置不匹配 ” 是高频踩坑点 —— 近期 基于 linux6.1 内核 调试 SPI 闪存 +PCIe3x4 外设 方案时,就遇到了 “eMMC
    的头像 发表于 01-08 10:24 776次阅读
    实战复盘:<b class='flag-5'>RK3588</b> SPI+PCIe3x4<b class='flag-5'>方案</b>启动修复,从节点配置到驱动适配全解析

    技术分享 | RK3588如何搭建preempt_rt+ethercat

    说明:使用的RK3588的分支版本是linux-6.1-stan-rkr6内核版本是6.1.99,文件系统是DebianGNU/Linux12,把瑞芯微的SDK更新
    的头像 发表于 04-02 17:31 862次阅读
    技术分享 | <b class='flag-5'>RK3588</b>如何搭建preempt_rt+ethercat