OpenHarmony标准系统编译内核ko并打包到chip_ckm分区
·
说明:
文章由移远通信技术股份有限公司提供
以下内容包含了个人理解,仅供参考,如有不合理处,请联系笔者修改13677951658(微信同号)
笔者在前段时间完成了一款芯片适配oh标准系统的工作,遇到了编译ko的需求。本文将介绍如何在OpenHarmony标准系统中编译内核ko并打包到chip_ckm分区,读者可以参考开源仓库的内容在其他芯片oh上编译内核ko
开源地址:https://gitee.com/OpenHarmony_rk_equipment_transplantation/oh_ko
以rk3568为例
repo init -u https://gitcode.com/openharmony/manifest -b refs/tags/OpenHarmony-v5.0.3-Release --no-repo-verify
repo sync -c
repo forall -c 'git lfs pull'
# 进入oh源码目录
cd oh_src
# 拉取本仓库
git clone https://gitee.com/OpenHarmony_rk_equipment_transplantation/oh_ko.git
# 应用补丁
chmod 777 oh_ko/patch.sh
./oh_ko/patch.sh
# 编译rk3568镜像
rm -rf out && ./build.sh --product-name rk3568 --ccache
编译ko原理
1.首先需要打开相关内核配置(社区rk3568已经默认打开了)
CONFIG_MODULE_SIG=y
CONFIG_MODULE_SIG_FORCE=y
CONFIG_MODULE_SIG_ALL=y
CONFIG_MODULE_SIG_SHA1=y
# CONFIG_MODULE_SIG_SHA224 is not set
# CONFIG_MODULE_SIG_SHA256 is not set
# CONFIG_MODULE_SIG_SHA384 is not set
# CONFIG_MODULE_SIG_SHA512 is not set
CONFIG_MODULE_SIG_HASH="sha1"
CONFIG_MODULE_SIG_KEY="certs/signing_key.pem"
CONFIG_MODULE_SIG_KEY_TYPE_RSA=y
这些配置选项是 Linux 内核中关于内核模块签名验证的配置,用于增强内核的安全性。它们决定了内核如何处理模块(.ko文件)的签名,确保只有经过签名的、可信的模块才能被加载到内核中。下面逐一解释每个选项的含义:
| 配置项 | 含义 |
|---|---|
CONFIG_MODULE_SIG=y |
启用模块签名支持。内核会识别并验证模块的数字签名,但未签名的模块可能仍被加载(取决于其他设置)。 |
CONFIG_MODULE_SIG_FORCE=y |
强制所有模块必须签名。如果设置为 y,任何没有有效签名的模块都无法加载;如果设为 n,未签名模块只会导致内核报出警告,但仍可加载。 |
CONFIG_MODULE_SIG_ALL=y |
自动对所有模块签名。在内核编译过程中,所有编译好的模块会自动使用指定的私钥进行签名。 |
CONFIG_MODULE_SIG_SHA1=y |
使用 SHA‑1 哈希算法进行签名。注意:SHA‑1 现在被认为安全性较弱,建议使用更强的算法(如 SHA‑256)。 |
# CONFIG_MODULE_SIG_SHA224 … 等未设置 |
表示不选用 SHA‑224、SHA‑256、SHA‑384 或 SHA‑512 作为签名哈希算法。 |
CONFIG_MODULE_SIG_HASH="sha1" |
指定默认哈希算法为 sha1,与上面的 CONFIG_MODULE_SIG_SHA1=y 一致。 |
CONFIG_MODULE_SIG_KEY="certs/signing_key.pem" |
签名私钥的路径。内核构建时会使用该 PEM 文件中的私钥对模块进行签名。该文件通常包含 RSA 私钥和 X.509 证书。 |
CONFIG_MODULE_SIG_KEY_TYPE_RSA=y |
密钥类型为 RSA。表示签名密钥使用 RSA 算法(而不是 ECDSA 等其他算法)。 |
2.使用 Linux 内核源码提供的 scripts/sign-file 工具,对内核ko进行数字签名
# 执行签名操作
${ROOT_DIR}/out/kernel/OBJ/linux-6.6/scripts/sign-file sha512 \
${ROOT_DIR}/out/kernel/OBJ/linux-6.6/certs/signing_key.pem \
${ROOT_DIR}/out/kernel/OBJ/linux-6.6/certs/signing_key.pem \
out/kernel/OBJ/linux-6.6/drivers/bluetooth/rtk_btusb.ko
3.然后将签名后的内核ko拷贝到$root_out_dir/packages/phone/chip_ckm下。
具体脚本和实现可以参考开源仓库 https://gitee.com/OpenHarmony_rk_equipment_transplantation/oh_ko
更多推荐



所有评论(0)