7. SquashFS RootFS 签名与内核验签¶
7.1. 整体目标¶
目的:保证设备上
mtdblock6等设备节点对应的 SquashFS rootfs(分区号以板级为准)未被篡改,内核在挂载前对其做签名验证,失败则拒绝挂载。实现方式:构建时对
mksquashfs产出的镜像做 SHA256 与 裸 RSA 签名,并追加自定义签名块;内核挂载前按同一规则验签。
7.2. 使用与排查建议¶
日常使用可归纳为:
menuconfig->Kernel options->Enable kernel secure boot。
执行 build_all。
烧录生成的镜像,将
install/.../rootfs.spinor(路径随板型变化)写入 ROOTFS 分区。
可选:用 check_rootfs_sig.sh 确认 rootfs 已签名(sig_len>0)。更换证书时需同时更新 linux_5.10/certs/cert.pem 与构建端 -c / -k 参数。
验签成功:日志出现
VFS: Mounted root (squashfs filesystem) readonly on device 31:6.,随后/sbin/init正常启动。error -126:若日志出现
SquashFS raw signature requires cert with 'SquashFS Root Signing',则get_squashfs_x509_key()为 NULL。通过 fallback 修改后,单证书(如 “Internet Widgits Pty Ltd”)会被用作 SquashFS key,此错误可消除。error -129 (仅旧 PKCS#7 路径):若日志出现
Message digest doesn't match或提示 error -129,多为设备上前bytes_used字节与签名时 payload 不一致;当前已用自定义 raw 格式,无此 PKCS#7 摘要比较。
7.3. 相关文件¶
用途 |
路径(相对仓库根) |
|---|---|
私钥(签名) |
|
证书(验签) |
|
签名脚本 |
|
检查脚本 |
|
内核验签 |
|
证书加载 |
|
SquashFS key 接口 |
|
证书通过 CONFIG_SYSTEM_TRUSTED_KEYS 编入内核;构建时用上述私钥对 rootfs 签名。