3 分钟阅读 次阅读

构建适用于 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_ext4fsdd 生成镜像:

这里提供使用 ddmkfs.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 文件一起打包烧录到板子上。

留下评论