泰山派内核更新

[toc]

今天我们来给泰山派的板子更新内核

编译准备 && 编译环境

本次采用了一台8G内存+200GB存储的ubuntu22.04 LTS 虚拟机,架构为amd64。

内核版本:5.10.0-1012.12 (适配了rockchip内核)

内核的github地址:https://github.com/Joshua-Riek/linux-rockchip/tree/jammy

接着我们需要一份rk3566的SDK,没有SDK我们则无法编译板子的内核。本次选择是泰山派定制的SDK,地址为:链接:https://pan.baidu.com/s/1HtnpytCBBqBOqZi8mfV4VQ?pwd=qcxx
提取码:qcxx

在第五章的文件夹内,linux子文件内,有一个tspi_linux_sdk_repo_20240131.tar.gz文件,下载这个。并且下载Tspi_Linux_config.cfg这个配置文件。

注:内核是不变的,若使用的是其他的板子,则之后的编译环节需要用厂商提供的编译脚本编译,本文的编译命令仅供参考。

更改配置文件 && 配置内核

注意:默认在普通用户下进行各种操作

在安装完Ubuntu22.04之后,我们吧tspi_linux_sdk_repo_20240131.tar.gz移动到 Linux下的文件

1
2
mkdir tspi #创建一个tspi文件夹
tar -zxvf tspi_linux_sdk_repo_20240131.tar.gz -C tspi/ #-C 参数将压缩包内的文件解压到tspi文件

解压完毕之后文件目录如下:

1
2
3
4
5
cd .repo/
ls

copy-link-files.json manifests manifest.xml project-objects repo
internal-fs-layout.md manifests.git project.list projects

接着,我们安装一些必要的工具,执行

1
2
3
4
5
sudo apt-get update
sudo apt-get install git -y #安装git
sudo apt install repo -y #安装repo
sudo apt-get install python2.7 #安装python2
sudo apt-get install python3 #安装python3

安装完毕之后开始把sdk同步出来,注意同步之前必须退到.repo文件的上一级。

1
2
cd tspi/ #进入tspi文件,理论上现在打ls -all只有一个.repo文件
.repo/repo/repo sync -l -j4 #解压完之后.repo文件,必须把sdk的文件全部同步出来

同步完毕的文件目录如下:

1
2
app        build.sh  device  envsetup.sh  kernel    mkfirmware.sh  rkbin       tools   yocto
buildroot debian docs external Makefile prebuilts rkflash.sh u-boot

现在我们就有了所有关于sdk的文件了。

由于我们需要更换内核,因此首先要做的事情是将sdk中的内核替换成我们比较新的版本。执行mv文件,将kernel文件更改名字为kernel_old

1
2
cd tspi/ #进入tspi文件
mv kernel kernel_old

然后,用git把内核拉下来

1
git clone https://github.com/Joshua-Riek/linux-rockchip.git

下载完之后有一个linux-rockchip的文件夹,这是新的内核文件,我们需要把他移植到tspi文件中并替换原有的Kernel文件,只需要用mv命令即可

1
mv linux-rockchip ../tspi/kernel

最后,我们将kernel_old中的设备树文件移植到新的kernel文件下即可完成新内核的移植。

1
cp ~/tspi/kernel_old/arch/arm64/boot/dts/rockchip/tspi* ~/tspi/kernel/arch/arm64/boot/dts/rockchip

然后编辑设备树目录下的Makefile文件

1
2

vim tspi/kernel/arch/arm64/boot/dts/rockchip/Makefile

添加一行代码,编译的时候加上泰山派的用户的设备树文件

1
dtb-$(CONFIG_ARCH_ROCKCHIP) += tspi-rk3566-user-v10-linux.dtb

接着保存退出即可。

最后,我们需要安装gcc交叉编译工具。

地址:https://developer.arm.com/downloads/-/gnu-a/10-2-2020-11

下载gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu.tar.xz文件

把下载完的文件解压到/home/用户(填自己的)文件下。如何配置环境变量

1
vim ~/.bashrc

加入下面三行

1
2
3
export ARCH=arm64
export CROSS_COMPILE=aarch64-none-linux-gnu-
export PATH=$PATH:/home/用户/gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu/bin

上述命令里面的用户改成自己的即可。然后保存退出,打

1
source ~/.bashrc

使环境变量生效,然后输入

1
aarch64-none-linux-gnu-gcc -v

若能打印版本信息则说明安装成功。

1
2
3
4
5
6
7
8
Using built-in specs.
COLLECT_GCC=aarch64-none-linux-gnu-gcc
COLLECT_LTO_WRAPPER=/home/test/aarch64-gcc/gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu/bin/../libexec/gcc/aarch64-none-linux-gnu/10.2.1/lto-wrapper
Target: aarch64-none-linux-gnu
Configured with: /tmp/dgboter/bbs/build04--cen7x86_64/buildbot/cen7x86_64--aarch64-none-linux-gnu/build/src/gcc/configure --target=aarch64-none-linux-gnu --prefix= --with-sysroot=/aarch64-none-linux-gnu/libc --with-build-sysroot=/tmp/dgboter/bbs/build04--cen7x86_64/buildbot/cen7x86_64--aarch64-none-linux-gnu/build/build-aarch64-none-linux-gnu/install//aarch64-none-linux-gnu/libc --with-bugurl=https://bugs.linaro.org/ --enable-gnu-indirect-function --enable-shared --disable-libssp --disable-libmudflap --enable-checking=release --enable-languages=c,c++,fortran --with-gmp=/tmp/dgboter/bbs/build04--cen7x86_64/buildbot/cen7x86_64--aarch64-none-linux-gnu/build/build-aarch64-none-linux-gnu/host-tools --with-mpfr=/tmp/dgboter/bbs/build04--cen7x86_64/buildbot/cen7x86_64--aarch64-none-linux-gnu/build/build-aarch64-none-linux-gnu/host-tools --with-mpc=/tmp/dgboter/bbs/build04--cen7x86_64/buildbot/cen7x86_64--aarch64-none-linux-gnu/build/build-aarch64-none-linux-gnu/host-tools --with-isl=/tmp/dgboter/bbs/build04--cen7x86_64/buildbot/cen7x86_64--aarch64-none-linux-gnu/build/build-aarch64-none-linux-gnu/host-tools --enable-fix-cortex-a53-843419 --with-pkgversion='GNU Toolchain for the A-profile Architecture 10.2-2020.11 (arm-10.16)'
Thread model: posix
Supported LTO compression algorithms: zlib
gcc version 10.2.1 20201103 (GNU Toolchain for the A-profile Architecture 10.2-2020.11 (arm-10.16))

最后退出到tspi文件下,执行

1
./build.sh kernel

若编译出现exit code 2的问题,请尝试挂梯子并开启Tun模式。

编译内核即可。该内核没有配置任何的设备,所以直接编译完更新是不能上网和干其他事情的。

编译成功后,可以在/tspi/rockdev文件夹下找到一个boot.img的文件,这个就是我们编译完的内核。

烧录内核

官方烧录方法:https://wiki.lckfb.com/zh-hans/tspi-rk3566/sdk-compilation/linux-compilation.html#%E4%B8%8B%E8%BD%BD

在官方提供的瑞芯微开发工具中点击 下载镜像->鼠标右键导入配置->选择Tspi_Linux_config.cfg配置文件即可。kernel位置在下载镜像->第五个选项的boot中,我们需要将编译完成的内核文件boot.img从ubuntu22.04虚拟机中上传到windows。接着接入板子,按住rec,按一下rst等待烧录工具发现Loader设备即可松开按键。需要的时间有点久。接着上传boot.img镜像到第五个选项中,把全部的钩取消,只留下boot那栏的,点击强制按地址写,然后点击执行等待内核烧录完成即可。

最后启动开发板,选择串口调试,在命令行输入

1
uname -r

即可查看内核版本是否正确。若烧录无误,将打印

1
6.1.75-ge21cf49ee9a4

即为更新成功。

下一章我们将配置wifi等各种外设,并打包烧录ubuntu22.04-arm64版本到开发板上