最近拿到了一块基于Rockchip RK3566芯片的立创开发板——泰山派,这是一款性能不错的ARM开发板,适合用来学习嵌入式Linux开发。作为开发者,我们总是希望能在硬件上运行最新的系统,所以这次的目标很明确:为这块开发板编译最新的Linux主线内核(6.19版本)并构建Ubuntu 24的rootfs。
RK3566是一颗中端ARM处理器,采用四核Cortex-A55架构,主频可达1.8GHz,搭配Mali-G52 GPU,性能足以流畅运行桌面环境。泰山派开发板提供了丰富的接口:双千兆网口、HDMI输出、MIPI CSI/DSI、40pin GPIO扩展等,非常适合作为嵌入式开发平台。
在Ubuntu主机上安装必要的编译工具:
bash复制sudo apt update
sudo apt install -y git make gcc bison flex libssl-dev libncurses-dev \
crossbuild-essential-arm64 u-boot-tools device-tree-compiler \
gcc-aarch64-linux-gnu g++-aarch64-linux-gnu
注意:如果你的主机是ARM架构(如树莓派),需要额外安装qemu-user-static来支持x86_64容器运行。
我们需要获取三个关键组件:
bash复制git clone --depth=1 -b linux-6.19.y https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
bash复制git clone --depth=1 -b master https://github.com/u-boot/u-boot.git
bash复制git clone --depth=1 -b 2024.02 https://github.com/buildroot/buildroot.git
进入linux源码目录,先应用默认配置:
bash复制cd linux
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- defconfig
然后针对RK3566进行定制配置:
bash复制make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- menuconfig
关键配置项:
泰山派的设备树需要手动调整,创建arch/arm64/boot/dts/rockchip/rk3566-taishan.dts:
dts复制/dts-v1/;
#include "rk3566.dtsi"
/ {
model = "LCSC Taishan RK3566";
compatible = "rockchip,rk3566";
memory@0 {
device_type = "memory";
reg = <0x0 0x80000000>;
};
chosen {
stdout-path = "serial2:1500000n8";
};
};
&uart2 {
status = "okay";
};
&gmac1 {
phy-mode = "rgmii";
clock_in_out = "input";
snps,reset-gpio = <&gpio3 RK_PB7 GPIO_ACTIVE_LOW>;
snps,reset-active-low;
snps,reset-delays-us = <0 20000 100000>;
};
执行编译命令:
bash复制make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- -j$(nproc)
编译完成后生成的关键文件:
进入u-boot目录,配置RK3566支持:
bash复制cd u-boot
make taishan-rk3566_defconfig
修改include/configs/taishan.h:
c复制#define CONFIG_SYS_LOAD_ADDR 0x80000
#define CONFIG_SYS_MALLOC_LEN (32 << 20)
#define CONFIG_ENV_SIZE (16 << 10)
bash复制make CROSS_COMPILE=aarch64-linux-gnu- -j$(nproc)
生成的关键文件:
bash复制sudo apt install debootstrap
sudo mkdir -p /mnt/ubuntu-rootfs
sudo debootstrap --arch=arm64 noble /mnt/ubuntu-rootfs http://ports.ubuntu.com/
chroot进入系统进行配置:
bash复制sudo chroot /mnt/ubuntu-rootfs
# 在chroot环境中执行
apt update
apt install -y ubuntu-standard network-manager
passwd root # 设置root密码
exit
在主机上操作:
bash复制sudo cp -r linux/modules/lib/modules /mnt/ubuntu-rootfs/lib/
sudo chroot /mnt/ubuntu-rootfs depmod -a
bash复制dd if=/dev/zero of=taishan.img bs=1M count=4096
sudo losetup -fP taishan.img
LOOPDEV=$(losetup -a | grep taishan.img | awk -F: '{print $1}')
sudo parted ${LOOPDEV} mklabel gpt
sudo parted ${LOOPDEV} mkpart primary fat32 4MiB 256MiB
sudo parted ${LOOPDEV} mkpart primary ext4 256MiB 100%
sudo mkfs.vfat ${LOOPDEV}p1
sudo mkfs.ext4 ${LOOPDEV}p2
使用rkbin工具将U-Boot写入镜像:
bash复制git clone https://github.com/rockchip-linux/rkbin
cd rkbin
tools/boot_merger RKBOOT/RK3566MINIALL.ini
sudo dd if=./rk3566_spl_loader_v1.08.111.bin of=${LOOPDEV} seek=64 conv=notrunc
sudo dd if=../u-boot/u-boot.bin of=${LOOPDEV} seek=16384 conv=notrunc
挂载分区并复制文件:
bash复制sudo mkdir -p /mnt/{boot,rootfs}
sudo mount ${LOOPDEV}p1 /mnt/boot
sudo mount ${LOOPDEV}p2 /mnt/rootfs
sudo cp linux/arch/arm64/boot/Image /mnt/boot/
sudo cp linux/arch/arm64/boot/dts/rockchip/rk3566-taishan.dtb /mnt/boot/
sudo cp -a /mnt/ubuntu-rootfs/* /mnt/rootfs/
sudo umount /mnt/{boot,rootfs}
sudo losetup -d ${LOOPDEV}
bash复制sudo dd if=taishan.img of=/dev/sdX bs=4M status=progress
sync
使用USB转TTL模块连接泰山派的调试串口(通常是UART2):
在U-Boot命令行设置启动参数:
bash复制setenv bootargs "console=ttyS2,1500000 earlycon=uart8250,mmio32,0xfe660000 root=/dev/mmcblk1p2 rw rootwait"
setenv bootcmd "load mmc 1:1 0x80000 Image; load mmc 1:1 0x82000 rk3566-taishan.dtb; booti 0x80000 - 0x82000"
saveenv
boot
可能原因:
设备树配置错误
缺少驱动模块
排查步骤:
bash复制ip link # 检查网卡是否识别
dmesg | grep eth # 查看驱动加载情况
cat /proc/device-tree/ethernet*/status # 检查设备树状态
解决方案:
在/etc/sysctl.conf中添加:
conf复制vm.swappiness=10
vm.dirty_ratio=20
vm.dirty_background_ratio=10
kernel.numa_balancing=0
启用CPU调频:
bash复制apt install cpufrequtils
echo "GOVERNOR=ondemand" > /etc/default/cpufrequtils
systemctl enable cpufrequtils
启用fstrim定时任务:
bash复制systemctl enable fstrim.timer
安装Rockchip多媒体框架:
bash复制git clone https://github.com/rockchip-linux/mpp
cd mpp
mkdir build && cd build
cmake -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Release ..
make -j$(nproc)
sudo make install
启用MIPI CSI驱动:
bash复制sudo apt install v4l-utils
v4l2-ctl --list-devices # 检查摄像头识别
安装libgpiod工具:
bash复制apt install gpiod
gpiodetect # 查看GPIO芯片
gpioinfo # 查看引脚状态
在实际使用中,我发现RK3566的温度控制需要特别注意。当连续高负载运行时,建议添加散热片或主动散热。另外,主线内核对RK3566的支持还在不断完善,建议定期从kernel.org拉取最新更新。