这是我orangepi5pro开发板目前的信息,可以看出我当前的内核版本为6.1.43,接下来我要将它换成5.10.160版本的内核
第一步:获取LinuxSDK源码,并编译内核(在虚拟机里的ubuntu里操作)
拉取LinuxSDK源码:
git clone https://github.com/orangepi-xunlong/orangepi-build.git
-b next

如果像上面这样无法通过git clone顺利下载,你可以直接访问这个网站
GitHub - orangepi-xunlong/orangepi-build: Orange Pi build for H2+, H3, H5, H6, H616, RK3328, RK3399 and RK3588(s)
直接下载该项目的压缩包,然后把压缩包放到ubuntu中解压,和git clone的效果一样

获取到源码包之后,进入到
orangepi-build目录(SDK根目录),里面会看到下面这些文件:
a.
build.sh
:
编译启动脚本
b.
external
:
包含编译镜像需要用的配置文件、特定的脚本以及部分程序的源
码等
c.
LICENSE
: GPL 2
许可证文件
d.
README.md
:
orangepi-build
说明文件
e.
scripts
:
编译
linux
镜像的通用脚本
你会发现该SDK目录下并没有包含
u-boot
和
linux
内核的源码,也没有编译
u-boot
和
linux
内核需要用到交叉编译工具链,这是正常的,因为这些东西都存放在其它单独的
github
仓库或者某些服务器上了(下文会详述其地址)。
orangepi-build
在脚本和
配置文件中会指定
u-boot
、
linux
内核和交叉编译工具链的地址,运行
orangepi-build
时,当其发现本地没有这些东西,会自动去相应的地方下载的,下载完之后,你会发现orangepi-build目录下多了kernel,externel,output,toolchains,u-boot这些目录。
kernel目录存放 linux 内核的源码,里面名为
orange-pi-5.10-rk35xx 的文件夹存放的就是 RK3588/RK3588S 系列开发板 legacy 分支的内核源码
。
u-boot
目录
存放 u-boot
的源码,里面名为
v2017.09-rk3588
的文件夹存放的就
是
RK3588/RK3588S
系列开发板
legacy
分支的
u-boot
源码
output
目录
存放编译生成的 u-boot
、
linux
等
deb
包、编译日志以及编译生成的
镜像等文件
toolchains
:
存放交叉编译工具链
userpatches
目录
存放编译脚本需要用到的配置文件
如果做好了上面的准备,那么就可以进行编译了
编译内核命令:sudo ./build.sh BOARD=orangepi5pro BRANCH=legacy BUILD_OPT=kernel KERNEL_CONFIGURE=no
编译u-boot命令:
sudo ./build.sh BOARD=orangepi5pro
BRANCH=legacy BUILD_OPT=kernel KERNEL_CONFIGURE=no
内核编译后生成的结果如下,存放在
orangepi-build/output/debs目录下
a.
linux-dtb-legacy-rockchip-rk3588_1.0.2_arm64.deb
包含内核使用的
dtb
文件
b.
linux-headers-legacy-rockchip-rk3588_1.0.2_arm64.deb
包含内核头文件
c.
linux-image-legacy-rockchip-rk3588_1.0.2_arm64.deb
包含内核镜像和内核模块

第二步:验证编译结果,并将编译生成的内核镜像.deb包传到开发板系统中
(在虚拟机里的ubuntu里操作)
如果你想验证你编译结果的这个内核镜像是不是基于Linux5.1.xxx内核版本,你可以执行
dpkg -x linux-image-legacy-rockchip-rk3588_1.0.2_arm64.deb .将该deb包解开,解包后会生成boot etc lib usr这四个目录,然后进入到/boot目录下查看是否包含5.1.xxx的文件,像下面这样:

现在已经编译完了内核,并且验证过版本为我们想要升级的版本,那么接下来需要将
linux-image-legacy-rockchip-rk3588_1.0.2_arm64.deb这个文件传到开发板里,你可以用scp,tftp,nfs,adb,samba等方式传输过去(具体方法不再演示),这里我用的是samba

第三步:卸载并清除现有的内核镜像安装包,并安装刚才编译生成的内核镜像安装包(在开发板的ubuntu系统里操作)
然后进入到开发板的ubuntu系统中,先找到当前系统里的deb格式的内核镜像,将其卸载并清除

然后再使用
dpkg -i
linux-image-legacy-rockchip-rk3588_1.0.2_arm64.deb命令安装刚才传过来的刚编译好的内核镜像deb包

然后重启板子,再次查询,结果如下

此时就完成了内核版本的更新!