Kernel 开发
编译内核
使用 bsp
bsp 是 Radxa 提供的一套快速构建 U-Boot Kernel 的工具,使用 bsp 非常方便就能构建出自己的 U-Boot 和 Kernel.
下面将为您展示,以 Radxa ROCK 5B 为例如何使用 bsp 构建内核。
bsp 环境配置
以下为 bsp 推荐使用环境:
硬件:推荐使用 x86_64 PC
系统:Ubuntu 22.04 或者 Debian 12
安装依赖
sudo apt update
sudo apt install -y git qemu-user-static binfmt-support
# Podman (推荐)
sudo apt install -y podman podman-docker
sudo touch /etc/containers/nodocker
# Docker
#sudo apt install docker.io
# 次要功能的可选依赖
sudo apt install -y systemd-container
获取代码
bsp 使用了 git 子模块。因此,请使用以下命令获取代码:
git clone --recurse-submodules https://github.com/radxa-repo/bsp.git
了解 bsp 的用法
在您的机器上获取了 bsp 代码后,您可以运行 bsp 查看内置帮助:
cd bsp
./bsp
构建内核
直接运行 ./bsp 会显示所有参数及其解释,根据提示可知命令: bsp [options] <linux|u-boot> <profile> [product]。
以 Radxa ROCK 5B 为例,linux profile 为 rk2410,以下是其他产品的 profile:
| product | profile | product | profile | product | profile | product | profile |
|---|---|---|---|---|---|---|---|
| rock-4se | rockchip | radxa-cm3-io | rk356x | radxa-zero | stable | rock-5a | rk2410 |
| rock-pi-4a-plus | rockchip | radxa-cm3-rpi-cm4-io | rk356x | radxa-zero-2pro | stable | rock-5b | rk2410 |
| rock-pi-4b-plus | rockchip | radxa-cm3-sodimm-io | rk356x | rock-s0 | stable | rock-5b-plus | rk2410 |
| rock-4c-plus | rockchip | radxa-cm3i-io | rk356x | rock-pi-s | stable | rock-5c | rk2410 |
| rock-pi-4a | rockchip | radxa-cm3j-rpi-cm4-io | rk356x | rock-pi-n10 | stable | rock-5d | rk2410 |
| rock-pi-4b | rockchip | radxa-e23 | rk356x | rock-pi-e | stable | rock-5t | rk2410 |
| rock-pi-4c | rockchip | radxa-e25 | rk356x | rock-5-itx | rk2410 | ||
| rock-4-core-io | rockchip | radxa-zero3 | rk356x | radxa-e52c | rk2410 | ||
| rock-3a | rk356x | radxa-e54c | rk2410 | ||||
| rock-3b | rk356x | radxa-nx5-io | rk2410 | ||||
| rock-3c | rk356x | radxa-cm4-rpi-cm4-io | rk2410 | ||||
| rock-2 | rk356x | radxa-cm5-io | rk2410 | ||||
| radxa-cm5-rpi-cm4-io | rk2410 | ||||||
| radxa-rk3576 | rk2410 |
若没有找到对应产品的型号,请根据自己产品的 SoC 型号选择对应选项。
示例:Radxa CM4 / NX4 和 ROCK 4D 使用瑞芯微 RK3576 SoC,根据表格中的 radxa-rk3576 选择 rk2410 作为 profile 参数。
然后将产品对应 profile: rk2410 填入 bsp 命令的 profile 参数即可拉取与配置代码,例如:
./bsp linux rk2410 --no-build
# `--no-build` 仅配置代码不编译
内核源码的路径位于 bsp 目录下的 .src/linux,在修改内核源码后,可再次构建内核:
cd bsp
./bsp --no-prepare-source linux rk2410 -r 999
# 参数说明:
# --no-prepare-source # 首次编译不需要加该参数,加该参数是为了使用本地修改进行编译,如果不加这个参数将会从 Radxa kernel 仓库同步最新代码并覆盖本地修改
# -r 999 # 指定内核的版本号为 999,以优先使用
编译完成后会在当前目录生成许多 deb 包, 只需要安装下面两个 deb 即可
软件包文件名会根据 profile 和 -r 参数变化
linux-headers-6.1.84-999-rk2410_6.1.84-999_arm64.deb
linux-image-6.1.84-999-rk2410_6.1.84-999_arm64.deb
将上面两个 deb 包复制到板子上使用 dpkg 指令安装即可完成内核安装
sudo dpkg -i linux-headers-6.1.84-999-rk2410_6.1.84-999_arm64.deb
sudo dpkg -i linux-image-6.1.84-999-rk2410_6.1.84-999_arm64.deb
sudo reboot
重启完成后,可以通过 uname -a 查看当前启动的内核版本号,来查看是否安装成功
手动编译
bsp 是目前唯一在维护的编译方式,并且在编译的时候会对源代码进行额外的修改。
如果想要基于我们正式发布的软件进行开发,则最低限度也需要使用 bsp 来下载和配置代码。
如果需要使用自定义的 make 命令来进行编译,请参照 Prepare working tree 部分来配置代码。