1. 项目概述
在嵌入式开发领域,RK3568作为瑞芯微推出的高性能处理器,凭借其四核Cortex-A55架构和Mali-G52 GPU,已经成为众多开发板的首选方案。而正点原子出品的RK3568开发板,以其完善的硬件设计和丰富的接口资源,深受开发者喜爱。本文将详细记录在这块开发板上运行Arch Linux的完整过程,从准备工作到系统优化,涵盖你可能遇到的所有技术细节。
Arch Linux以其轻量、灵活和滚动更新的特性,特别适合作为嵌入式系统的开发环境。不同于常见的Ubuntu或Debian,Arch Linux提供了更底层的控制能力,让开发者能够根据实际需求定制系统。但这也意味着安装过程需要更多手动操作,特别是在非x86架构的设备上。
2. 准备工作
2.1 硬件需求清单
- 正点原子RK3568开发板(型号:ATK-DLRK3568)
- 12V/2A电源适配器(确保供电稳定)
- 至少16GB的microSD卡或eMMC模块(建议使用Class10及以上速度等级)
- USB Type-C数据线(用于串口调试)
- 网线(用于网络安装)
- 可选:USB转TTL调试器(CH340G或CP2102芯片)
2.2 软件工具准备
- RKDevTool(瑞芯微官方烧录工具,v2.84及以上版本)
- Arch Linux ARM镜像(aarch64架构)
- 最新版U-Boot和内核源码(需适配RK3568)
- 串口终端工具(推荐使用MobaXterm或Minicom)
- SD卡烧录工具(如BalenaEtcher或Win32DiskImager)
注意:务必从Arch Linux ARM官方仓库下载镜像,避免使用第三方修改版,以确保系统纯净性。
2.3 开发板基础设置
-
连接串口调试:
- 开发板的UART2(调试口)通常位于40pin排针上
- 接线方式:TX→RX,RX→TX,GND→GND
- 波特率设置为1500000(这是RK3568的特殊设置)
-
启动模式选择:
- 找到板上的启动模式跳线,设置为Loader模式(从USB启动)
- 或者按住Recovery键上电进入烧录模式
3. 系统移植过程
3.1 构建定制化U-Boot
RK3568需要特定补丁的U-Boot才能正常引导Arch Linux。建议从正点原子提供的SDK中获取uboot源码:
bash复制git clone https://github.com/ATK-Engineering/rk3568_uboot.git
cd rk3568_uboot
make CROSS_COMPILE=aarch64-linux-gnu- rk3568_defconfig
make CROSS_COMPILE=aarch64-linux-gnu-
编译完成后会生成:
- idbloader.img(初始引导加载程序)
- u-boot.itb(主引导程序)
3.2 内核编译与配置
Arch Linux ARM官方内核可能缺少部分RK3568的驱动支持,需要手动添加:
- 获取内核源码:
bash复制git clone --depth=1 https://github.com/ATK-Engineering/rk3568_linux.git
- 关键配置修改:
makefile复制CONFIG_ARCH_ROCKCHIP=y
CONFIG_PCIE_ROCKCHIP_HOST=y
CONFIG_DRM_PANFROST=y
CONFIG_SND_SOC_ROCKCHIP=y
- 编译命令:
bash复制make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- rockchip_linux_defconfig
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- -j$(nproc)
3.3 制作可启动存储设备
-
分区方案(使用fdisk):
- /dev/mmcblk0p1: 256M (FAT32, 存放内核和dtb)
- /dev/mmcblk0p2: 剩余空间 (ext4, 根文件系统)
-
写入引导程序:
bash复制sudo dd if=idbloader.img of=/dev/mmcblk0 seek=64 conv=notrunc
sudo dd if=u-boot.itb of=/dev/mmcblk0 seek=16384 conv=notrunc
- 部署内核和initramfs:
bash复制sudo mkfs.vfat /dev/mmcblk0p1
sudo mount /dev/mmcblk0p1 /mnt
sudo cp Image /mnt/Image
sudo cp rk3568-evb.dtb /mnt/
sudo umount /mnt
4. 系统安装与配置
4.1 基础系统安装
通过串口登录后,执行Arch Linux的标准安装流程:
- 分区格式化:
bash复制mkfs.ext4 /dev/mmcblk0p2
mount /dev/mmcblk0p2 /mnt
- 使用pacstrap安装基础包:
bash复制pacstrap /mnt base linux-firmware networkmanager vim
- 生成fstab并chroot:
bash复制genfstab -U /mnt >> /mnt/etc/fstab
arch-chroot /mnt
4.2 关键系统配置
- 时区和本地化:
bash复制ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
hwclock --systohc
echo "en_US.UTF-8 UTF-8" >> /etc/locale.gen
locale-gen
echo "LANG=en_US.UTF-8" > /etc/locale.conf
- 网络配置(NetworkManager):
bash复制systemctl enable NetworkManager
nmcli device wifi connect "SSID" password "PASSWORD"
- 创建用户并设置sudo权限:
bash复制useradd -m -G wheel -s /bin/bash atk
passwd atk
EDITOR=vim visudo # 取消%wheel行的注释
5. 硬件适配与优化
5.1 GPU驱动配置
RK3568的Mali-G52需要安装闭源驱动:
- 添加archlinuxcn仓库:
bash复制echo "[archlinuxcn]
Server = https://repo.archlinuxcn.org/\$arch" >> /etc/pacman.conf
pacman -Sy archlinuxcn-keyring
- 安装驱动包:
bash复制pacman -S mali-bifrost-g52-git
- 配置Xorg(如果使用图形界面):
bash复制Section "Device"
Identifier "Mali G52"
Driver "armsoc"
Option "DRI" "2"
Option "AccelMethod" "glamor"
EndSection
5.2 电源管理优化
- CPU调频策略:
bash复制pacman -S cpupower
systemctl enable cpufreq
cpupower frequency-set -g powersave
- 睡眠模式配置:
bash复制echo "deep" > /sys/power/mem_sleep
- 查看功耗状态:
bash复制watch -n 1 cat /sys/class/power_supply/battery/uevent
6. 常见问题排查
6.1 启动失败问题
现象:卡在U-Boot阶段
解决步骤:
- 检查串口输出,确认停在哪个阶段
- 验证引导顺序:
printenv bootcmd - 手动加载内核测试:
bash复制load mmc 0:1 0x80080000 Image
load mmc 0:1 0x83000000 rk3568-evb.dtb
booti 0x80080000 - 0x83000000
6.2 网络连接问题
现象:有线网卡无法识别
排查方法:
- 检查驱动加载:
bash复制lsmod | grep dwmac
- 验证PHY状态:
bash复制mii-tool eth0
- 更新设备树配置:
dts复制&gmac0 {
phy-mode = "rgmii";
clock_in_out = "output";
};
6.3 图形显示异常
现象:DRM/KMS初始化失败
调试步骤:
- 查看内核日志:
bash复制dmesg | grep -i drm
- 检查当前显示模式:
bash复制cat /sys/class/drm/card0/status
- 强制指定输出接口:
bash复制echo "HDMI-A-1: 1920x1080@60" > /sys/class/drm/card0/status
7. 进阶配置建议
7.1 构建自定义Arch Linux仓库
为加快后续安装速度,可以在本地构建软件包缓存:
- 安装必备工具:
bash复制pacman -S devtools asp
- 同步核心仓库:
bash复制mkdir -p /var/cache/pacman/custom
repo-add /var/cache/pacman/custom/custom.db.tar.gz
- 示例:重新构建linux-rk3568包
bash复制asp checkout linux
cd linux/trunk
makepkg --skipinteg --config /etc/makepkg.conf --skippgpcheck
7.2 实时内核补丁
对于需要低延迟的应用场景,可以应用PREEMPT_RT补丁:
- 获取补丁文件:
bash复制wget https://cdn.kernel.org/pub/linux/kernel/projects/rt/5.10/patch-5.10.rt.patch.xz
- 打补丁并编译:
bash复制patch -p1 < patch-5.10.rt.patch
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- PREEMPT_RT_FULL=y
7.3 安全加固措施
- 启用SELinux:
bash复制pacman -S selinux
semodule -DB
restorecon -Rv /
- 防火墙配置:
bash复制pacman -S ufw
ufw default deny incoming
ufw allow 22/tcp
systemctl enable ufw
- 定期更新检查:
bash复制pacman -S cronie
systemctl enable cronie
echo "0 3 * * * pacman -Syu --noconfirm" | crontab -
在实际部署过程中,我发现RK3568的PCIe接口对供电波动特别敏感。当使用某些外设时,建议在U-Boot环境中适当提高核心电压:
bash复制setenv over_voltage 1350
saveenv
这个设置将VDD_LOGIC电压从默认的1.2V提升到1.35V,能显著提高系统稳定性,特别是在高温环境下长时间运行时。不过要注意监测芯片温度,避免过热情况发生。