2026-10-29 · Wilber Zheng · 来源:Amlogic SDK aml-comp/uboot/fip/s7d/ 和 meta-meson/;SEI 提供的 Amlogic《Yocto SDK Enable Secureboot User Guide》0.1 版(以 T6D 为例)
fip/s7d/generate-device-keys/gen_all_device_key.sh --rsa-size 4096 --rootkey-index 0 ...dv_scs_keys/:
rootrsa-0..3-priv.pem / -pub.pem(RSA 2048 或 4096,默认 4096)。level-1/2-rsa-priv.pem,以及每一段的三级密钥(bl30、bl31、bl32、bl33、bl40、kernel)。.bin,16 字节)。openssl genrsa 生成);AES 密钥是纯二进制文件。export_dv_scs_signing_keys.sh 导出签名用的 device-keys/,里面不含根私钥。hash-device-rootcert-rsa.bin),烧进 eFuse 的就是这个。eFuse 太小,放不下完整公钥。fip/s7d/bin/efuse-gen.sh --enable-device-vendor-scs true --device-roothash ... -o pattern.efusepattern.efuse 是一串 U-Boot 命令 efuse_obj set/lock:
HASH_NORMAL_DEVICE_ROOTCERT、HASH_DFU_DEVICE_ROOTCERT:根哈希,写完锁定。FEAT_ENABLE_DEVICE_*(ROOT/LVL1/LVLX_PUBRSA_PROT、VENDOR_SIG、PROT、SCS_SIG)。efuse_obj get / get_lock 读回核对。scs,每次发版)device-keys/ 和 fw_arb.cfg 放进 aml-comp/prebuilt/hosttools/aml-linux-scs/<soc>/<chipset>/。目前只有 s4、sc2、t6d、t7,s7d 要自己加,aml-linux-scs-native_1.0.bb 的 SOC_FAMILY 也要加。DISTRO_FEATURES += "AVB scs"。scs.cfg);bl33-level-3-rsa-priv.pem 签 vbmeta 和 recovery(SHA256_RSA4096);amlogic_scs_sign_whole_pkg.bash(来自 Aml_Linux_SCS_SignTool.zip),输出 aml_upgrade_package_enc.img;开了 swupdate 的话 OTA 包也一起签。pattern.efuse(不可撤销)。usb_password.bin(vendor-keytool gen-usb-passwd,用 DVUK + 芯片 ID),再用 adnl_burn_pkg -p aml_upgrade_package_enc.img -k usb_password.bin 烧。| 选项 | 作用 | 代价 |
|---|---|---|
| 签名校验(根哈希 + 开关) | 只有我们签名的固件能启动 | 固件内容不加密;给 SEI 的文件里没有秘密 |
| DVGK / DVUK | 固件加密,只有带这把密钥的芯片能解开 | 给 SEI 的文件里带秘密密钥 |
| USB / DIF 密码 | USB 烧写、调试口要按台输入密码 | 返修、重刷要先按芯片 ID 算密码 |
流程图保留英文,避免中文字符宽度不一致导致错位。
OptiSigns (offline, once) SEI (mass production)
┌─────────────────────────────────────────┐
│ 1. gen_all_device_key.sh │
│ 4 root RSA-4096 key pairs (PEM) │
│ + lower-level signing keys (PEM) │
│ + DVGK / DVUK AES-128 (.bin) │
└───────────────┬─────────────────────────┘
│
┌───────────┴──────────────┐
▼ ▼
┌──────────────────────┐ ┌──────────────────────────────────────┐
│ 2. Root cert │ │ 4. Sign firmware (every release) │
│ 4 root public keys │ │ a. export device-keys (no root key) │
│ → SHA-256 (32 B) │ │ + fw_arb.cfg into SDK │
└─────────┬────────────┘ │ aml-linux-scs/ (add s7d) │
▼ │ b. DISTRO_FEATURES += "AVB scs" │
┌──────────────────────┐ │ c. build: signed u-boot; │
│ 3. efuse-gen.sh │ │ vbmeta/recovery signed │
│ pattern.efuse: │ │ (SHA256_RSA4096) │
│ root hash + enable │ │ d. amlogic_scs_sign_whole_pkg.bash │
│ bits (no secrets) │ │ → aml_upgrade_package_enc.img │
└─────────┬────────────┘ └──────────────────┬───────────────────┘
│ │
└──────────────► to SEI ◄──────────┘
│
▼
┌──────────────────────────────┐
│ 5. Burn signed firmware │
│ 6. Burn pattern.efuse │
│ (irreversible) │
└──────────────┬───────────────┘
▼
┌──────────────────────────────┐
│ Boot: ROM hashes root cert, │
│ compares with eFuse, then │
│ verifies each stage's sig. │
│ Unsigned firmware won't boot │
└──────────────────────────────┘
Key storage: root keys encrypted, offline, 2 copies.
Signing keys in GCP Secret Manager, pulled only to sign.
来自 Frank 给 Amlogic 的邮件草稿。他提到的名字在 SDK 里都有:fip/s7d/build.sh 里有 CONFIG_AML_SIGNED_UBOOT(第 816 行调用 device-vendor-scs-signing.sh);binary-tool/acpu-imagetool 支持 --cmd-signpipe-device-root / -lvl1 / -lvl2 / -bl30..-lvl3。
| 关键点 | Amlogic 标准做法 | 我们想要的 | 为什么 | 要 Amlogic 确认 |
|---|---|---|---|---|
| 1. 在哪签名 | Yocto 打开 scs,打包时整包签名并加密,输出 aml_upgrade_package_enc.img | 只在编译 u-boot 时给 bootloader 签名(CONFIG_AML_SIGNED_UBOOT=y),整包不签、不加密 | 改动小,烧写包和现在一样,产线流程不变 | 问题 1 |
| 2. 加不加密 | 可选:烧 DVGK/DVUK,固件加密 | 只签名,不加密 | 加密要把密钥交给 SEI;签名已能保证只有我们的固件能启动 | 问题 2 |
| 3. eFuse 烧什么 | 根哈希 + 6 个开关全开;示例里还开了 USB、调试口密码 | 只烧必要的:根哈希 + 必须的开关;不开 USB、调试口密码 | 每个开关都不可撤销;密码会让返修、重刷要按台算密码 | 问题 3 |
| 4. 私钥放哪 | openssl 在电脑上生成 PEM 文件,签名时直接读文件 | 全部 RSA-4096 在 Google Cloud KMS 里生成,导不出来,签名时由工具调用 KMS(--cmd-signpipe-*) | 任何电脑上都不存在私钥文件,不会被拷走 | 问题 4(怎么签)、问题 6(怎么生成根哈希) |
| 5. 系统怎么校验 | vbmeta、recovery 改用 bootloader 的三级密钥签 | 系统继续用我们现在的 AVB 密钥 | OS 签名和 OTA 流程不用改 | 问题 5 |
OptiSigns SEI (mass production)
┌─────────────────────────────────────────┐
│ 1. Keys in Google Cloud KMS (RSA-4096) │
│ root + lower-level keys │
│ not exportable; export public keys │
└───────────────┬─────────────────────────┘
│
┌───────────┴──────────────┐
▼ ▼
┌──────────────────────┐ ┌──────────────────────────────────────┐
│ 2. Root cert from │ │ 4. Sign bootloader (every release) │
│ root public keys │ │ u-boot build │
│ → SHA-256 (32 B) │ │ CONFIG_AML_SIGNED_UBOOT=y │
│ (tool: open Q6) │ │ → device-vendor-scs-signing.sh │
└─────────┬────────────┘ │ → acpu-imagetool --cmd-signpipe-* │
▼ │ → KMS signs → signed bootloader │
┌──────────────────────┐ ├──────────────────────────────────────┤
│ 3. efuse-gen.sh │ │ 5. OS: kernel/system via AVB │
│ pattern.efuse: │ │ with our own AVB key (as today) │
│ root hash + minimum │ │ no Yocto scs, no encrypted package │
│ bits (open Q3) │ │ │
└─────────┬────────────┘ └──────────────────┬───────────────────┘
│ │
└──────────────► to SEI ◄──────────┘
│
▼
┌──────────────────────────────┐
│ 6. Burn signed firmware │
│ 7. Burn pattern.efuse │
│ (irreversible) │
└──────────────┬───────────────┘
▼
┌──────────────────────────────┐
│ Boot: ROM checks root hash → │
│ verifies signed bootloader → │
│ u-boot verifies vbmeta with │
│ our AVB key (open Q5) │
└──────────────────────────────┘
| # | 问题 | 通俗说明 |
|---|---|---|
| 1 | 通过 u-boot 编译签名,量产是否支持?还是必须用 Yocto scs? | 文档教的是打包时整包盖章;我们只想在编译 u-boot 时给 bootloader 盖章。问这样量产行不行。 |
| 2 | S905X5M 是否必须做 bootloader 加密(DVGK/DVUK)?只签名不加密是否支持?量产建议哪种? | 盖章只保证只有我们的固件能启动,别人仍能拷出来看;加密是再加一把锁,但钥匙要交给 SEI。问能不能只盖章。 |
| 3 | 工厂该烧哪些 eFuse 项、什么顺序?哪些可选(..._PUBRSA_PROT、USB 认证、调试口锁)? | eFuse 有一排开关,烧了回不去,开得越多返修越麻烦。问最少烧哪几个、先后顺序。 |
| 4 | 用 --cmd-signpipe-* 时,传的是原文还是 SHA-256 哈希?要 RSA-PSS(SHA-256,32 字节 salt)还是 PKCS#1 v1.5?返回什么格式? | 章放在云上拿不出来,工具只能把东西递给云盖章再拿回来。要问清楚递什么、用哪种盖法、盖完交回什么格式,否则云那边配不对。 |
| 5 | 烧了 eFuse 的机器上,系统能否继续用我们自己的 AVB 密钥,还是 vbmeta 必须用三级密钥签?add-device-keys-bl33.sh 会不会替换 u-boot 信任的 AVB 密钥? | bootloader 检查系统时现在用我们的 AVB 章;Amlogic 做法会改成 bootloader 那枚章。问能不能保留现在的。 |
| 6 | 能否只用公钥生成根证书、根哈希和 pattern.efuse,再通过 --cmd-signpipe-device-root / -lvl1 / -lvl2 给下级证书签名?用什么工具和参数? | Amlogic 工具要先在电脑上造出章(私钥文件)才能做“印章样本”。我们的章在云里造、拿不出来,只有公钥。问只用公钥能不能做出样本和 eFuse 文件,各级章之间的背书能不能都交给云来盖。 |