跳到主要内容

Kernel 开发

使用 bsp

bsp 是 Radxa 提供的一套快速构建 U-Boot Kernel 的工具,使用 bsp 非常方便就能构建出自己的 U-Boot 和 Kernel.


下面将为您展示,以 Radxa ROCK 5 ITX 为例如何使用 bsp 构建内核。

bsp 环境配置

以下为 bsp 推荐使用环境:
硬件:推荐使用x86_64 PC
系统:Ubuntu 或者 Debian

安装依赖

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 会显示所有参数及其解释,根据提示可知命令 "bsp [options] <linux|u-boot> <profile> [product]"。  
以 Radxa ROCK 5 ITX 为例,linux profile 为 "rk3588"。以下是其他产品的 profile:
|       Model      | profile  |
| :--------------: | :------: |
|  Radxa ROCK 5A   | rockchip |
|  Radxa ROCK 5B   | rockchip |
|  Radxa ROCK 5C   | rockchip |
| Radxa ROCK 5 ITX | rockchip |
|  Radxa ROCK 3A   |  rk356x  |
|  Radxa ROCK 3C   |  rk356x  |
|  Radxa CM3 Series|  rk356x  |
| Radxa ROCK PI S  |  stable  |
然后将产品对应 profile **rk3588** 填入 bsp 命令的 **profile** 参数例如:**./bsp linux rk3588**,即可构建内核。  
内核源码的路径位于 bsp 目录下的 **.src/linux**,在修改内核源码后,可再次构建内核:

    cd bsp
    ./bsp --no-prepare-source linux rk3588 -r 999
    参数说明:
    --no-prepare-source   # 使用本地修改进行编译,如果不加这个参数将会从 Radxa kernel 仓库同步最新代码并覆盖本地修改
    -r 999                 # 指定内核的版本号为 999,以优先使用

编译完成后会在当前目录生成许多 deb 包, 只需要安装下面两个 deb 即可


    linux-headers-5.10.160-999-rk3588_5.10.160-20_arm64.deb
    linux-image-5.10.160-999-rk3588_5.10.160-20_arm64.deb

将上面两个 deb 包复制到板子上使用 dpkg 指令安装即可完成内核安装


    sudo dpkg -i linux-image-5.10.160-999-rk3588_5.10.160-20_arm64.deb
    sudo dpkg -i linux-headers-5.10.160-999-rk3588_5.10.160-20_arm64.deb
    sudo reboot

重启完成后,可以通过 uname -a 查看当前启动的内核版本号,来查看是否安装成功

手动编译

提示

bsp 是目前唯一在维护的编译方式,并且在编译的时候会对源代码进行额外的修改。 如果想要基于我们正式发布的软件进行开发,则最低限度也需要使用 bsp 来下载和配置代码。

如果需要使用自定义的 make 命令来进行编译,请参照 Prepare working tree 部分来配置代码。

参考文档