RK3588 Ubuntu20.04 根文件系统构建指南
构建适用于 RK3588(基于 ARM64 架构)的 Ubuntu 根文件系统,最主流且高效的方法是使用官方的 Ubuntu Base 镜像,配合主机(通常是 x86 架构的 PC)上的 qemu-user-static 工具,通过 chroot 的方式进行模拟构建。
准备工作
在 x86 Ubuntu 主机上,安装必要的交叉编译和模拟运行工具:
sudo apt update
sudo apt install qemu-user-static binfmt-support
第一步:下载并解压 Ubuntu Base
下载适用于 ARM64 的 Ubuntu Base 压缩包(也可以选择 22.04 Jammy)。
# 创建工作目录
mkdir rk3588_ubuntu
cd rk3588_ubuntu
# 下载 ubuntu-base arm64 镜像
wget http://cdimage.ubuntu.com/ubuntu-base/releases/20.04/release/ubuntu-base-20.04.5-base-arm64.tar.gz
# 创建根文件系统目录并解压
mkdir ubuntu-rootfs
sudo tar -xpf ubuntu-base-20.04.5-base-arm64.tar.gz -C ubuntu-rootfs/
第二步:配置 QEMU 和网络
为了能让 x86 主机运行 ARM64 的系统并连接网络下载软件包,需要拷贝 QEMU 模拟器和主机的 DNS 配置到根文件系统中。
# 拷贝 qemu-aarch64-static
sudo cp /usr/bin/qemu-aarch64-static ubuntu-rootfs/usr/bin/
# 拷贝 DNS 配置,以便在 chroot 环境中可以联网
sudo cp -b /etc/resolv.conf ubuntu-rootfs/etc/resolv.conf
qemu-user-static 让 x86_64 电脑可直接执行为 ARM64(或其他架构)编译的用户态二进制程序。
第三步:挂载节点并进入 Chroot 环境
编写一个挂载和卸载的脚本(或者直接手动执行),这里我们手动执行挂载并进入系统:
# 挂载宿主机的设备节点和系统目录
sudo mount -t proc /proc ubuntu-rootfs/proc
sudo mount -t sysfs /sys ubuntu-rootfs/sys
sudo mount -o bind /dev ubuntu-rootfs/dev
sudo mount -o bind /dev/pts ubuntu-rootfs/dev/pts
# 切换进入 ubuntu-rootfs
sudo chroot ubuntu-rootfs
此时,已经“进入”了即将运行在 rk3588 上的 Ubuntu 系统中。
第四步:在 Chroot 环境中配置系统(重点)
在 chroot 环境下,执行以下操作来完善的根文件系统。
1. 更新软件源并安装基础软件
修改软件源(可选,国内建议换成清华或中科大源的 ARM64 专属源 ubuntu-ports):
# 1. 备份原有的源文件
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
# 2. 将官方的 ports.ubuntu.com 替换为清华源
sudo sed -i 's/ports.ubuntu.com/mirrors.tuna.tsinghua.edu.cn/g' /etc/apt/sources.list
然后更新并安装必要工具:
apt update
apt upgrade -y
# 安装基础工具、网络管理、SSH、文本编辑器等
apt install -y sudo vim net-tools ethtool ifupdown network-manager ssh iputils-ping rsyslog bash-completion
要求选择时区:
Please select the geographic area in which you live. Subsequent configuration questions will narrow this down by presenting a list of cities,
representing the time zones in which they are located.
1. Africa 3. Antarctica 5. Arctic 7. Atlantic 9. Indian 11. SystemV 13. Etc
2. America 4. Australia 6. Asia 8. Europe 10. Pacific 12. US 14. Legacy
Geographic area: 6
Please select the city or region corresponding to your time zone.
1. Aden 11. Baku 21. Damascus 31. Hong_Kong 41. Kashgar 51. Makassar 61. Pyongyang 71. Singapore 81. Ujung_Pandang
2. Almaty 12. Bangkok 22. Dhaka 32. Hovd 42. Kathmandu 52. Manila 62. Qatar 72. Srednekolymsk 82. Ulaanbaatar
3. Amman 13. Barnaul 23. Dili 33. Irkutsk 43. Khandyga 53. Muscat 63. Qostanay 73. Taipei 83. Urumqi
4. Anadyr 14. Beirut 24. Dubai 34. Istanbul 44. Kolkata 54. Nicosia 64. Qyzylorda 74. Tashkent 84. Ust-Nera
5. Aqtau 15. Bishkek 25. Dushanbe 35. Jakarta 45. Krasnoyarsk 55. Novokuznetsk 65. Rangoon 75. Tbilisi 85. Vientiane
6. Aqtobe 16. Brunei 26. Famagusta 36. Jayapura 46. Kuala_Lumpur 56. Novosibirsk 66. Riyadh 76. Tehran 86. Vladivostok
7. Ashgabat 17. Chita 27. Gaza 37. Jerusalem 47. Kuching 57. Omsk 67. Sakhalin 77. Tel_Aviv 87. Yakutsk
8. Atyrau 18. Choibalsan 28. Harbin 38. Kabul 48. Kuwait 58. Oral 68. Samarkand 78. Thimphu 88. Yangon
9. Baghdad 19. Chongqing 29. Hebron 39. Kamchatka 49. Macau 59. Phnom_Penh 69. Seoul 79. Tokyo 89. Yekaterinburg
10. Bahrain 20. Colombo 30. Ho_Chi_Minh 40. Karachi 50. Magadan 60. Pontianak 70. Shanghai 80. Tomsk 90. Yerevan
Time zone: 70
Current default time zone: 'Asia/Shanghai'
Local time is now: Tue Jul 7 14:33:12 CST 2026.
Universal Time is now: Tue Jul 7 06:33:12 UTC 2026.
Run 'dpkg-reconfigure tzdata' if you wish to change it.
安装GNOME桌面相关并设置lightDM后端:
# 声明非交互模式,避免安装时卡在 gdm3 和 lightdm 的选择界面
export DEBIAN_FRONTEND=noninteractive
# 安装 GNOME 精简版、Xorg 显示服务器和 LightDM 登录管理器
# (RK3588 性能强劲,如果需要包含办公软件和游戏的完整版,可将 ubuntu-desktop-minimal 替换为 ubuntu-desktop)
apt install -y ubuntu-desktop-minimal xorg lightdm
# 强制将 LightDM 设为默认显示管理器,覆盖 GNOME 默认引入的 gdm3
echo "/usr/sbin/lightdm" > /etc/X11/default-display-manager
dpkg-reconfigure -f noninteractive lightdm
# 设置系统默认启动到图形界面
systemctl set-default graphical.target
2. 设置主机名和时区
echo "rk3588" > /etc/hostname
echo "127.0.0.1 localhost rk3588" >> /etc/hosts
# 设置时区为上海
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
dpkg-reconfigure -f noninteractive tzdata
3. 添加用户和设置密码
# 设置 root 密码
passwd root
# 创建新用户(例如 user)并赋予 sudo 权限
useradd -G sudo -m -s /bin/bash user
passwd user
4. 适配 rk3588 的串口输出
rk3588 默认使用的调试串口通常是 ttyFIQ0(波特率通常为 1500000)。如果不配置,系统启动后串口可能没有登录提示符。
ln -s /lib/systemd/system/[email protected] /etc/systemd/system/getty.target.wants/[email protected]
5. 将“极度精简版”的 Ubuntu 恢复成“标准完整版”的 Ubuntu 基础系统
sudo unminimize
6. 清理并退出 chroot
# 清理缓存以减小镜像体积
apt clean
rm -rf /var/lib/apt/lists/*
# 退出 chroot
exit
第五步:卸载节点并打包镜像
退出 chroot 后,回到宿主机的终端,先卸载刚刚挂载的目录:
sudo umount ubuntu-rootfs/dev/pts
sudo umount ubuntu-rootfs/dev
sudo umount ubuntu-rootfs/sys
sudo umount ubuntu-rootfs/proc
接下来,将目录打包成可以通过 Rockchip 烧录工具(如 RKDevTool)烧录的 .img 文件。
使用 make_ext4fs 或 dd 生成镜像:
这里提供使用 dd 和 mkfs.ext4 的标准做法:
# 计算 rootfs 目录的大小,这里预分配 4G 大小(根据安装的软件多少调整)
dd if=/dev/zero of=rootfs.img bs=1M count=4096
# 将文件格式化为 ext4
sudo mkfs.ext4 rootfs.img
# 挂载镜像并将文件拷贝进去
mkdir mnt
sudo mount rootfs.img mnt/
sudo cp -rfp ubuntu-rootfs/* mnt/
# 卸载镜像
sudo umount mnt/
sudo e2fsck -p -f rootfs.img
sudo resize2fs -M rootfs.img # 压缩镜像到最小尺寸
至此,rootfs.img 已经生成完毕。可以将其与 rk3588 的 U-Boot、Kernel(boot.img)、dtb 文件一起打包烧录到板子上。
留下评论