1. RK3568开发板运行Arch Linux全流程解析
作为一名嵌入式开发老手,最近我重新拾起了RK3568开发板,尝试在上面运行Arch Linux系统。整个过程踩了不少坑,也积累了一些经验,今天就把完整的操作流程和注意事项分享给大家。
2. 环境准备与基础配置
2.1 硬件与开发环境
我使用的是正点原子的RK3568开发板,主控芯片为Rockchip RK3568,四核Cortex-A55架构,主频2.0GHz。开发环境是Ubuntu 24.04 LTS,分配了8核CPU和10GB内存的虚拟机。
注意:虽然Ubuntu 24.04已经默认使用Python3,但RK SDK的部分组件仍然依赖Python2,这点需要特别注意。
2.2 Python2环境配置
由于RK SDK的部分组件(特别是U-Boot)仍然依赖Python2,我们需要在Ubuntu 24.04上配置Python2环境:
bash复制wget https://www.python.org/ftp/python/2.7.18/Python-2.7.18.tgz
tar xf Python-2.7.18.tgz
cd Python-2.7.18
./configure
make -j$(nproc)
sudo make install
安装完成后,使用update-alternatives管理多版本Python:
bash复制sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 30
sudo update-alternatives --install /usr/bin/python python /usr/local/bin/python2.7 20
切换Python版本:
bash复制sudo update-alternatives --config python
3. SDK编译与处理
3.1 SDK编译注意事项
正点原子的SDK是基于Rockchip官方SDK修改的,编译时需要注意:
-
对于Linux 4.19内核版本:
- 必须使用Python2环境
- 可能会遇到libpython2.7.a的编译错误
-
对于Linux 5.10内核版本:
- 编译过程更加稳定
- 但编译时间较长(约4-5小时)
3.2 解决编译冲突
如果遇到libpython2.7.a的编译错误,可以采用以下解决方案:
方案A(推荐):
bash复制sudo mv /usr/local/lib/libpython2.7.a /usr/local/lib/libpython2.7.a.bak
sudo mv /usr/local/lib/libpython2.7.so /usr/local/lib/libpython2.7.so.bak 2>/dev/null
sudo mv /usr/local/lib/libpython2.7.so.1.0 /usr/local/lib/libpython2.7.so.1.0.bak 2>/dev/null
sudo ldconfig
然后清理并重新编译:
bash复制cd buildroot
make O=output/rockchip_rk356x_recovery host-python-dirclean
make O=output/rockchip_rk356x_recovery host-python
4. Arch Linux Rootfs制作
4.1 获取基础Rootfs
首先下载Arch Linux ARM的基础Rootfs:
bash复制wget http://os.archlinuxarm.org/os/ArchLinuxARM-aarch64-latest.tar.gz
mkdir rk3568-archlinux-rootfs
cd rk3568-archlinux-rootfs
sudo tar -xpf ../ArchLinuxARM-aarch64-latest.tar.gz
4.2 驱动文件处理
从原系统或buildroot输出目录中复制必要的驱动模块:
bash复制cp output/target/lib/modules/<kernel_version>/8852bs.ko rootfs/lib/modules/
cp output/target/lib/modules/<kernel_version>/hci_uart.ko rootfs/lib/modules/
4.3 自动化Rootfs制作脚本
我编写了一个自动化脚本简化Rootfs制作过程:
bash复制#!/bin/bash
# 配置变量
ROOTFS="./rk3568-archlinux-rootfs"
IMG_FILE="rootfs.img"
MOUNT_POINT="/mnt/rootfs_loop"
IMG_SIZE=6 # GB
# 检查依赖
check_dependencies() {
local deps=("qemu-aarch64-static" "rsync" "arch-chroot")
for dep in "${deps[@]}"; do
if ! command -v $dep &>/dev/null; then
echo "缺少依赖: $dep"
exit 1
fi
done
}
# 主流程
main() {
check_dependencies
# 复制QEMU静态解释器
sudo cp /usr/bin/qemu-aarch64-static "$ROOTFS/usr/bin/"
# 创建镜像文件
fallocate -l ${IMG_SIZE}G $IMG_FILE
mkfs.ext2 $IMG_FILE
# 挂载镜像
sudo mkdir -p "$MOUNT_POINT"
sudo mount -o loop $IMG_FILE "$MOUNT_POINT"
# 复制Rootfs
sudo rsync -aAX --info=progress2 \
--exclude=proc/* \
--exclude=sys/* \
--exclude=dev/* \
--exclude=run/* \
"$ROOTFS/" "$MOUNT_POINT/"
# 创建系统目录
sudo mkdir -p "$MOUNT_POINT"/{proc,sys,dev,dev/pts,run}
# 进入chroot环境
sudo arch-chroot "$MOUNT_POINT" /bin/bash
}
main
5. 系统配置与优化
5.1 基础系统配置
进入chroot环境后,执行以下配置:
bash复制# 初始化pacman密钥
pacman-key --init
pacman-key --populate archlinuxarm
# 系统更新
pacman -Syu --noconfirm
# 启用串口控制台
systemctl enable serial-getty@ttyFIQ0.service
# 安装基础工具
pacman -S sudo wpa_supplicant iw dhclient parted util-linux e2fsprogs --noconfirm
5.2 用户与网络配置
- 设置root密码:
bash复制passwd
- 创建普通用户:
bash复制useradd -m -G wheel username
passwd username
- WiFi网络配置:
bash复制wpa_passphrase "SSID" "password" > /etc/wpa_supplicant.conf
ip link set wlan0 up
wpa_supplicant -i wlan0 -c /etc/wpa_supplicant.conf -B
dhclient -v wlan0
6. 烧录与启动
6.1 镜像打包
将制作好的rootfs.img替换SDK中的rootfs.ext2:
bash复制cp rootfs.img $SDK_PATH/buildroot/output/rockchip_atk_dlrk3568/images/rootfs.ext2
然后执行SDK打包命令:
bash复制cd $SDK_PATH
./build.sh updateimg
6.2 开发板启动
烧录完成后,开发板启动时会自动加载我们配置的系统。首次启动时需要手动加载驱动模块:
bash复制insmod /lib/modules/8852bs.ko
insmod /lib/modules/hci_uart.ko
7. 常见问题与解决方案
7.1 Python环境冲突
问题现象:编译时出现libpython2.7.a相关错误
解决方案:
- 临时移走冲突库文件
- 清理并重新编译相关组件
7.2 网络连接问题
问题现象:WiFi连接不稳定或无法获取IP
解决方案:
- 检查驱动是否正确加载
- 确认wpa_supplicant配置无误
- 尝试手动分配IP地址
7.3 系统启动失败
问题现象:系统卡在启动界面
解决方案:
- 检查串口输出日志
- 确认rootfs镜像制作正确
- 验证内核与rootfs版本匹配
8. 进阶配置建议
8.1 桌面环境安装
如果需要图形界面,可以安装KDE Plasma:
bash复制pacman -S --noconfirm plasma-desktop konsole dolphin kate
pacman -S --noconfirm sddm
systemctl enable sddm
8.2 性能优化
- 启用zram交换分区
- 调整CPU调度策略
- 优化内存管理参数
8.3 系统裁剪
对于资源受限的场景,可以考虑:
- 移除不必要的服务和软件包
- 使用musl替代glibc
- 启用内核裁剪选项
9. 经验总结与建议
在实际操作中,我总结了以下几点经验:
- 版本匹配很重要:确保内核版本、rootfs版本和SDK版本相互兼容
- 备份是关键:在每次重大操作前做好备份
- 日志是朋友:遇到问题时,首先查看系统日志
- 模块化思维:将复杂任务分解为多个可验证的小步骤
对于初次尝试的开发者,建议:
- 先从官方提供的Ubuntu镜像开始
- 熟悉开发板的基本操作和调试方法
- 逐步尝试自定义rootfs
- 最后再挑战Arch Linux这样的滚动发行版
整个流程虽然复杂,但通过系统化的方法和适当的自动化脚本,可以大大提高成功率。希望这篇指南能帮助你在RK3568开发板上顺利运行Arch Linux系统。