xSpirit2 移植
Zane Lv4

前言

对于这块 rk3568 的开发板(俗称 XSpirit2),之前使用的都是野火的 SDK,而是使用官方的 linux kernel进行编译配置,并且适配硬件。关于 U-Boot,因为我暂时对调试还没有太大的兴趣并且 SDK 中的 uboot 烧录到 SD 卡中挺好用的,所以保持使用 SDK 中的版本。

正文

编译 Linux Kernel

使用 linux-rockchip 仓库,这是基于内核版本 6.1 移植的,理论上讲只需要进行简单的设备树配置就能够直接使用。懒得配置环境变量,并且这个仓库只用来编译用于这个开发板的,就直接修改 Makefile 的交叉编译工具部分。

1
2
ARCH            ?= arm64
CROSS_COMPILE ?= aarch64-linux-gnu-

避免每次在 shell 中进行环境变量的配置。

1
2
3
4
make rochip_linux_defconfig   // 覆盖内核根目录的 .config 文件
make menuconfig // 自定义配置
make -j16 // 多线程编译
make dtbs // 编译镜像

这个仓库能够 uImage 的编译,但我后面会使用 booti 的命令启动,并且还处于调试阶段在 sd 卡的读取时间也不算久,于是采用的是未压缩的 Image 镜像。

编译 Buildroot

使用 buildroot 仓库,基于 configs/rockpro64_defconfig复制出了一份进行配置,修改了基础的配置如架构、内核版本等。

1
2
3
4
5
make rockpro64_defconfig // 覆盖根目录的 .config 文件
make menuconfig // 自定义配置,因为不希望编译出来的包含 kernel 与设备树,把uboot kernel部分关掉
make savedefconfig // 重新将修改的修改的内容保存会 defconfig
make -j16 // 编译
dd if=./output/images/rootfs.ext4 of=/dev/xxx bs=1M // 根文件系统 dd 到 sd 卡中

从 u-boot 启动

如果在调试阶段,可以使用 tftp 将 kernel image 与 dtb 读入内存(确保linux 的 tftp 服务开启)

1
2
3
4
5
6
7
bdinfo // 可以查看镜像读取到内存哪个地址合适
setenv serverip 192.168.0.190
setenv ipaddr 192.168.0.191
setenv bootargs "console=tty0 console=ttyS0, 1500000 panic=0 rootwait root=/dev/mmcblk1p6 rw rootfstype=ext4"
tftp 0x94000000 Image; tftp 0x200000 rk3568-evb1-ddr4-v10-linux.dtb; booti 0x9400000 - 0x200000
或 (保存相关文件到 sd 卡后)
ext4load mmc 1:3 0x9400000 Image; ext4load mmc 1:3 0x200000 rk3568-evb1-ddr4-v10-linux.dtb; booti 0x9400000 - 0x200000

已经拥有了稳定可用的版本,就可以尝试烧录,修改 uboot 的环境变量 bootcmd 等。但我的这块板子的 nor_flash 不能读取写入了,于是通过修改了原有 boot 分区的 extlinux 文件加载我的镜像与设备树达到相同的目的。

结语

至此基础的移植操作就已经完成,目前镜像已经能够在这个板子上启动,但是许多的硬件还不能使用,比如 pcie 、i2c 、usb 等等。具体的硬件调试就需要修改修改、调试驱动。

由 Hexo 驱动 & 主题 Keep