在高端嵌入式場景中,RK3588憑借8nm制程、6TOPS NPU算力及8K多媒體處理能力,成為AIoT、邊緣計(jì)算的熱門選擇。而安全啟動(dòng)(Secure Boot)作為設(shè)備防護(hù)的第一道防線,是保障RK3588平臺(tái)穩(wěn)定運(yùn)行的核心。本文結(jié)合瑞芯微官方文檔與RK3588實(shí)測數(shù)據(jù),聚焦官方build.sh指令集,從環(huán)境配置、密鑰生成、固件簽名到第三方系統(tǒng)適配,完整拆解安全開發(fā)流程,同時(shí)分享實(shí)測踩坑經(jīng)驗(yàn),確保方案可直接落地。
一、核心認(rèn)知:RK3588安全啟動(dòng)關(guān)鍵特性
RK3588作為瑞芯微旗艦級(jí)芯片,其安全啟動(dòng)機(jī)制基于FIT方案(官方推薦,支持靈活鏡像校驗(yàn)),核心特性如下:

1.硬件可信根:公鑰哈希固化于OTP(不可逆熔斷),作為校驗(yàn)起點(diǎn),防止固件篡改;
2.分層校驗(yàn)鏈路:Bootrom→Loader→U-Boot→Kernel→系統(tǒng),任一環(huán)節(jié)校驗(yàn)失敗則終止啟動(dòng);
3.安全存儲(chǔ)支持:默認(rèn)使用RPMB(eMMC物理安全分區(qū))存儲(chǔ)加密密鑰,非eMMC設(shè)備可啟用Security邏輯分區(qū);
4.系統(tǒng)安全增強(qiáng):支持System-Verity(系統(tǒng)校驗(yàn))與System-Encryption(系統(tǒng)加密),適配EXT4等主流文件系統(tǒng)。
二、基礎(chǔ)準(zhǔn)備:環(huán)境與指令前置說明
1.環(huán)境要求
?硬件:RK3588開發(fā)板(如EVB7 V11),確保OTP引腳(VCC_18)供電穩(wěn)定;
?軟件:Linux SDK(本文基于rk3576 linux6.1)、OpenSSL、瑞芯微升級(jí)工具(upgrade_tool);
?系統(tǒng):目標(biāo)第三方系統(tǒng)為Debian(本文以debian/linaro-rootfs.img為例)。
2.核心指令約定
本文所有操作基于SDK根目錄下的官方build.sh指令,無需額外添加非官方腳本,指令格式及功能以./build.sh -h輸出為準(zhǔn),關(guān)鍵指令分類如下:
|
指令類型
|
核心指令示例
|
作用
|
|
配置類
|
./build.sh menuconfig
|
圖形化配置SDK安全參數(shù)
|
|
密鑰生成類
|
./build.sh security-createkeys
|
生成安全啟動(dòng)所需RSA密鑰對
|
|
固件編譯類
|
./build.shuboot./build.sh kernel
|
編譯簽名Loader、U-Boot、Kernel
|
|
安全系統(tǒng)類
|
./build.sh security-system
|
生成加密/校驗(yàn)后的系統(tǒng)鏡像
|
|
鏡像打包類
|
./build.sh updateimg
|
打包完整可燒錄固件(update.img)
|
|
清理類
|
./build.sh clean:security
|
清理安全相關(guān)編譯產(chǎn)物
|
三、分步實(shí)戰(zhàn):基于build.sh的安全開發(fā)流程
1.第一步:SDK安全配置(關(guān)鍵前置)
通過menuconfig開啟安全功能,確保后續(xù)編譯指令生效:
# 進(jìn)入SDK根目錄,啟動(dòng)圖形化配置界面make menuconfig
在配置菜單中按以下路徑勾選關(guān)鍵選項(xiàng)(RK3588默認(rèn)FIT方案):
RK_SECURITY (安全功能總開關(guān))[*] security feature (啟用安全功能)Secureboot Method (FIT) -> 選中FIT(RK3588官方推薦)Optee Storage (RPMB) -> 選中RPMB(eMMC設(shè)備默認(rèn),F(xiàn)lash設(shè)備選SECURITY)security check method -> 按需選擇(system-verity=系統(tǒng)校驗(yàn),system-encryption=系統(tǒng)加密)[ ] burn security key (默認(rèn)關(guān)閉,調(diào)試階段不熔斷OTP,量產(chǎn)時(shí)再開啟)RK_SECURITY_INITRD_BASE_CFG (自動(dòng)勾選,生成安全Ramdisk)
配置完成后保存退出,SDK會(huì)自動(dòng)生成output/.config文件(若提示文件過時(shí),按提示確認(rèn)更新即可)。
2.第二步:生成安全密鑰(僅需執(zhí)行一次)
使用官方指令生成RSA密鑰對(密鑰丟失將導(dǎo)致設(shè)備變磚,務(wù)必備份):
# 生成簽名用密鑰(自動(dòng)存儲(chǔ)于u-boot/keys目錄)./build.sh security-createkeys
指令執(zhí)行后,在u-boot/keys目錄下生成3個(gè)核心文件:
?dev.key:私鑰(簽名用,需離線備份);
?dev.pubkey:公鑰(驗(yàn)簽用,編譯時(shí)自動(dòng)嵌入固件);
?dev.crt:自簽名證書(等效于公鑰,用于FIT鏡像校驗(yàn))。
踩坑提示:若執(zhí)行時(shí)報(bào)錯(cuò)“Can't load ~/.rnd into RNG”,需手動(dòng)創(chuàng)建隨機(jī)數(shù)文件:
touch~/.rnd
3.第三步:編譯簽名核心固件(Loader/U-Boot/Kernel)
RK3588的Loader(含SPL)、U-Boot需編譯時(shí)簽名,Kernel需開啟安全模塊支持,均通過build.sh指令完成:
(1)編譯簽名Loader與U-Boot
Loader是Bootrom校驗(yàn)的第一個(gè)固件,必須簽名;U-Boot需關(guān)聯(lián)密鑰并支持FIT校驗(yàn):
# 編譯Loader(含SPL)與U-Boot,開啟防回滾(版本號(hào)1,可自定義)./build.sh loader --spl-new --rollback-index-uboot 1
?--spl-new:使用當(dāng)前編譯的SPL(含公鑰)打包Loader,RK3588必須添加(官方SDK無預(yù)編譯安全SPL);
?--rollback-index-uboot 1:設(shè)置U-Boot防回滾版本號(hào)(需與menuconfig中“防回滾”配置匹配,不開啟防回滾可省略)。
編譯成功后,在output/firmware目錄生成已簽名的loader.bin、uboot.img。
(2)編譯支持安全模塊的Kernel
Kernel需開啟Device-Mapper(系統(tǒng)校驗(yàn)/加密依賴)與OPTEE(密鑰存儲(chǔ)依賴),通過指令直接編譯:
# 編譯Kernel(自動(dòng)加載menuconfig中配置的安全模塊)./build.sh kernel# 編譯Kernel模塊(若需驅(qū)動(dòng)適配,可選執(zhí)行)./build.sh modules
關(guān)鍵安全模塊(已在menuconfig中開啟,無需額外配置):
?CONFIG_BLK_DEV_DM=y:啟用Device-Mapper;
?CONFIG_DM_VERITY=y/CONFIG_DM_CRYPT=y:支持系統(tǒng)校驗(yàn)/加密;
?CONFIG_TEE=y/CONFIG_OPTEE=y:啟用OPTEE可信執(zhí)行環(huán)境。
編譯完成后,在kernel/arch/arm64/boot/目錄生成Image(內(nèi)核鏡像)與dtbs/rockchip/rk3588-evb7-v11.dtb(設(shè)備樹)。
4.第四步:生成安全Ramdisk(系統(tǒng)啟動(dòng)關(guān)鍵)
Ramdisk是中間小系統(tǒng),負(fù)責(zé)啟動(dòng)時(shí)解密/校驗(yàn)?zāi)繕?biāo)系統(tǒng),通過官方指令編譯:
# 生成適配安全啟動(dòng)的Ramdisk(自動(dòng)集成veritysetup/dmsetup工具)./build.sh security-ramboot
指令會(huì)基于Buildroot生成rootfs.cpio.gz(Ramdisk鏡像),存儲(chǔ)于buildroot/output/rockchip_rk3588_ramboot/images/目錄,且自動(dòng)關(guān)聯(lián)menuconfig中配置的安全參數(shù)(如加密算法、密鑰存儲(chǔ)路徑)。
5.第五步:第三方系統(tǒng)(Debian)安全處理
RK3588官方build.sh支持第三方系統(tǒng)適配,以Debian為例,需先對系統(tǒng)鏡像加密/校驗(yàn),再打包簽名:
(1)處理Debian系統(tǒng)鏡像
# 進(jìn)入固件輸出目錄cdoutput/firmware# 鏈接加密后的Debian鏡像(替換默認(rèn)rootfs)ln-rsf ../../debian/security_system.img rootfs.img# 打包完整可燒錄固件update.imgcd../.../build.sh updateimg
?指令自動(dòng)生成加密后的debian/security_system.img(密文落盤,需密鑰解密);
?同時(shí)生成debian/security.info,記錄加密算法(如aes-cbc-plain)、密鑰信息(暫存于misc分區(qū),首次開機(jī)轉(zhuǎn)存RPMB)。
若需系統(tǒng)校驗(yàn)(僅防篡改,明文落盤),需先在menuconfig中切換“security check method”為system-verity,再執(zhí)行上述指令。
(2)關(guān)聯(lián)系統(tǒng)鏡像與打包固件
將加密后的Debian鏡像鏈接到固件打包目錄,生成完整update.img:
# 1. 重新配置SDK,開啟密鑰燒錄./build.sh menuconfig-> RK_SECURITY -> [*] burn security key (勾選,啟用OTP熔斷)# 2. 重新編譯Loader(觸發(fā)密鑰哈希燒錄邏輯)./build.sh loader --spl-new --burn-key-hash
6.第六步:密鑰燒錄與固件刷寫(量產(chǎn)關(guān)鍵)
(1)熔斷OTP(僅量產(chǎn)執(zhí)行,不可逆!)
調(diào)試階段無需燒錄密鑰(避免設(shè)備變磚),量產(chǎn)前需開啟密鑰燒錄功能并熔斷OTP:
# 1. 重新配置SDK,開啟密鑰燒錄./build.sh menuconfig-> RK_SECURITY -> [*] burn security key (勾選,啟用OTP熔斷)# 2. 重新編譯Loader(觸發(fā)密鑰哈希燒錄邏輯)./build.sh loader --spl-new --burn-key-hash
?--burn-key-hash:編譯時(shí)添加該參數(shù),首次開機(jī)時(shí)Loader會(huì)將公鑰哈希寫入OTP,完成熔斷;
?熔斷成功后,串口會(huì)打印“RSA: Write key hash successfully”。
(2)燒錄固件到開發(fā)板
使用瑞芯微upgrade_tool工具燒錄update.img:
# 燒錄完整固件(開發(fā)板進(jìn)入Maskrom模式)upgrade_tool uf output/firmware/update.img
四、實(shí)測驗(yàn)證:安全機(jī)制生效測試(基于RK3588)
通過替換未簽名固件,驗(yàn)證安全機(jī)制是否生效,實(shí)測結(jié)果如下:
|
測試場景
|
操作方式
|
結(jié)果
|
關(guān)鍵現(xiàn)象
|
|
合法固件啟動(dòng)
|
燒錄簽名后的update.img
|
成功
|
串口打印“EXT4-fs (dm-0): mounted filesystem”,正常進(jìn)入Debian系統(tǒng)
|
|
替換未簽名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
|
失敗
|
開發(fā)工具不識(shí)別設(shè)備,無日志輸出(OTP已熔斷,拒絕未簽名固件)
|
|
燒錄未簽名完整系統(tǒng)
|
燒錄未簽名update.img
|
失敗
|
升級(jí)工具提示“下載Boot失敗”,Maskrom模式下無法識(shí)別固件
|
替換非簽名加密的rootfs之后,報(bào)錯(cuò)進(jìn)不了系統(tǒng)


燒錄回簽名加密鑰的之后,又成功進(jìn)入系統(tǒng)

替換未簽名的boot.img,密鑰校驗(yàn)失敗,進(jìn)不了kernel,停留在loader模式

更新未簽名uboot.img,校驗(yàn)失敗,進(jìn)不了uboot,還是進(jìn)入maskrom模式


如果是替換沒有簽名的MiniLoaderAll.bin,燒錄不了,芯片不識(shí)別,也沒有log,因?yàn)槊荑€已經(jīng)燒錄到芯片otp中,固化在芯片了

如果燒錄沒有完全沒有簽名的整個(gè)系統(tǒng),根本燒錄不進(jìn)去,根本原因還是MiniLoaderAll.bin沒簽名并且密鑰已經(jīng)燒錄到芯片otp中,固化在芯片了

五、關(guān)鍵指令速查表與注意事項(xiàng)
1.核心指令速查表(官方build.sh指令)
|
操作目標(biāo)
|
指令
|
|
開啟圖形化配置
|
./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系統(tǒng)
|
./build.sh security-system:debian/linaro-rootfs.img
|
|
打包完整固件
|
cd output/firmware && ./build.sh updateimg
|
|
熔斷OTP(量產(chǎn))
|
./build.sh loader --spl-new --burn-key-hash
|
|
清理安全編譯產(chǎn)物
|
./build.sh clean:security
|
2.注意事項(xiàng)(實(shí)測踩坑總結(jié))
1.密鑰備份:u-boot/keys目錄下的dev.key務(wù)必離線備份,OTP熔斷后密鑰丟失將導(dǎo)致設(shè)備變磚;
2.調(diào)試階段不熔斷OTP:未確認(rèn)固件穩(wěn)定性前,不要勾選“burn security key”,避免無法回滾;
3.Ramdisk日志調(diào)試:若系統(tǒng)跳轉(zhuǎn)失敗,需修改Ramdisk的init腳本,將MSG_OUTPUT=/dev/null改為/dev/kmsg,通過串口查看啟動(dòng)日志(具體修改可私信獲?。?;
4.RPMB與Security分區(qū):RK3588(eMMC設(shè)備)默認(rèn)用RPMB存儲(chǔ)密鑰,若為Flash設(shè)備,需在menuconfig中切換“Optee Storage”為SECURITY,并添加4M大小的Security分區(qū);
5.指令依賴順序:必須先執(zhí)行makemenuconfig配置安全參數(shù),再執(zhí)行security-createkeys、loader等指令,否則參數(shù)不生效。
總結(jié)
RK3588的安全開發(fā)核心是圍繞官方build.sh指令集,構(gòu)建“配置→密鑰→編譯→燒錄”的完整鏈路。本文通過實(shí)測驗(yàn)證,確認(rèn)該流程可有效防止未簽名固件啟動(dòng),且適配Debian等第三方系統(tǒng)。需注意,量產(chǎn)前務(wù)必完成OTP熔斷與密鑰備份,同時(shí)根據(jù)硬件類型(eMMC/Flash)選擇合適的安全存儲(chǔ)方案。
若需Ramdisk調(diào)試腳本、Debian鏡像優(yōu)化等細(xì)節(jié),可私信交流,后續(xù)將推出專題文章深入講解。
-
嵌入式
+關(guān)注
關(guān)注
5198文章
20449瀏覽量
334043 -
Linux
+關(guān)注
關(guān)注
88文章
11760瀏覽量
219030 -
固件
+關(guān)注
關(guān)注
11文章
569瀏覽量
24978 -
瑞芯微
+關(guān)注
關(guān)注
27文章
794瀏覽量
54317 -
RK3588
+關(guān)注
關(guān)注
8文章
556瀏覽量
7326
發(fā)布評(píng)論請先 登錄
RK3588操控終端
RK3588 CPU?隔離:AB/非?AB?系統(tǒng)雙方案適配實(shí)戰(zhàn)
保姆級(jí)教程!RK3588 Linux6.1?固件簽名完整實(shí)現(xiàn)方案(不含rootfs)
RK3588采集Cameralink圖像快速搭建系統(tǒng)辦法
【技術(shù)分享】RK3588如何搭建xenomai3+ethercat
RK3588核心板/開發(fā)板RT-Linux系統(tǒng)實(shí)時(shí)性及硬件中斷延遲測試
RK這2款旗艦芯片RK3588 PK RK3576,誰是最優(yōu)選
干貨分享 | RK3588 Ubuntu系統(tǒng)Docker容器使用指南
技術(shù)分享|iTOP-RK3588開發(fā)板Ubuntu20系統(tǒng)旋轉(zhuǎn)屏幕方案
迅為iTOP-RK3588S開發(fā)板/核心板瑞芯微RK3588S處理器6TOPS算力內(nèi)置NPU
RK3588主板:多元場景的硬核“芯”力量
RK3588+Linux固件簽名與系統(tǒng)安全開發(fā)全指南
評(píng)論