TB-RK3399Pro移植ubuntu 26.04及烧录
- [一、Ubuntu 26.04根文件系统制作](#一、Ubuntu 26.04根文件系统制作)
-
- [1.1 安装必要工具包](#1.1 安装必要工具包)
- [1.2 获取 Ubuntu Base RootFS](#1.2 获取 Ubuntu Base RootFS)
- [1.3 文件系统挂载](#1.3 文件系统挂载)
- [1.4 换源:](#1.4 换源:)
- [1.5 更新系统并安装基础软件](#1.5 更新系统并安装基础软件)
- [1.6 配置中文支持(可选)](#1.6 配置中文支持(可选))
- [1.7 设置时区](#1.7 设置时区)
- [1.8 添加账户](#1.8 添加账户)
- [1.9 串口 getty:让串口有登录提示(RK3399 调试关键)](#1.9 串口 getty:让串口有登录提示(RK3399 调试关键))
- [1.10 清理缓存,退出 chroot](#1.10 清理缓存,退出 chroot)
- [1.11 安装内核模块到根文件系统](#1.11 安装内核模块到根文件系统)
- 二、制作烧录镜像
-
- [2.1 boot.img](#2.1 boot.img)
- [2.2 rootfs.img](#2.2 rootfs.img)
- 三、烧录
-
- [3.1 rkdeveloptool 工具](#3.1 rkdeveloptool 工具)
- [3.2 烧录Uboot](#3.2 烧录Uboot)
- [3.3 emmc分区](#3.3 emmc分区)
- [3.4 烧录系统和镜像](#3.4 烧录系统和镜像)
- 四、总结
一、Ubuntu 26.04根文件系统制作
这个流程已经很成熟了,直接问AI也能生成个七七八八,这里就简单写写,以及一些踩坑记录。
1.1 安装必要工具包
bash
sudo apt update
sudo apt install -y \
qemu-user-static \
binfmt-support \
debootstrap \
wget \
tar \
gcc-aarch64-linux-gnu \
device-tree-compiler \
build-essential \
libncurses-dev \
flex \
bison \
libssl-dev \
bc \
dosfstools \
e2fsprogs \
kmod
如有遗漏请根据报错自行补齐。ubuntu26.04的PC,安装 qemu-user-static 和 binfmt-support 需要 universe 源,而且需要指定安装版本,这里不多赘述,可根据实际情况咨询AI。
1.2 获取 Ubuntu Base RootFS
到 http://cdimage.ubuntu.com/ubuntu-base/releases/ 下载对应版本和架构即可。


1.3 文件系统挂载
bash
# 解压
mkdir ~/ubuntu_rootfs
sudo tar -xpf ubuntu-base-26.04-base-arm64.tar.gz -C ~/ubuntu_rootfs
# 复制 QEMU 模拟器和DNS配置
ROOTFS=~/ubuntu_rootfs
sudo cp /usr/bin/qemu-aarch64 $ROOTFS/usr/bin/
sudo cp /etc/resolv.conf $ROOTFS/etc/resolv.conf
# 挂载临时伪文件系统
# 2) 临时挂载伪文件系统
sudo mount -t proc proc $ROOTFS/proc
sudo mount -t sysfs sysfs $ROOTFS/sys
sudo mount --bind /dev $ROOTFS/dev
sudo mount --bind /dev/pts $ROOTFS/dev/pts
# chroot进入
sudo chroot $ROOTFS /bin/bash
1.4 换源:
ubuntu 26.04使用 DEB822 格式,将 $ROOTFS/etc/apt/sources.list.d/ubuntu.sources 中的地址修改:

1.5 更新系统并安装基础软件
bash
apt update
apt upgrade -y
# 安装必备基础工具
apt install -y \
sudo \
vim \
net-tools \
iproute2 \
iputils-ping \
network-manager \
udev \
kmod \
dbus \
systemd \
systemd-sysv \
openssh-server \
less \
locales
1.6 配置中文支持(可选)
apt install -y language-pack-zh-hans language-pack-en
locale-gen en_US.UTF-8 zh_CN.UTF-8
update-locale LANG=en_US.UTF-8
1.7 设置时区
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
dpkg-reconfigure -f noninteractive tzdata
1.8 添加账户
bash
echo "root:123456" | chpasswd # 自己改密码
useradd -m -s /bin/bash ubuntu
echo "ubuntu:ubuntu" | chpasswd
usermod -aG sudo ubuntu
1.9 串口 getty:让串口有登录提示(RK3399 调试关键)
bash
ln -sf /lib/systemd/system/serial-getty@.service \
/etc/systemd/system/getty.target.wants/serial-getty@ttyS2.service
其他的 hostname 和 网卡信息,运行起来后再补充吧。
1.10 清理缓存,退出 chroot
bash
apt clean
rm -rf /var/lib/apt/lists/*
exit
# 卸载伪文件系统
sudo umount $ROOTFS/dev/pts
sudo umount $ROOTFS/dev
sudo umount $ROOTFS/sys
sudo umount $ROOTFS/proc
1.11 安装内核模块到根文件系统
bash
cd <path_to_linux>
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- modules -j$(nproc)
sudo make modules_install ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- INSTALL_MOD_PATH=/path/to/your/rootfs
注:INSTALL_MOD_PATH应直接指向rootfs的顶层目录,系统会自动创建lib/modules/$(uname -r)子目录并填充模块文件。
二、制作烧录镜像
调试阶段需要制作两个镜像,boot.img 和 rootfs.img,后续如果调试稳定再打成总包。
2.1 boot.img
bash
mkdir boot
cp Image boot/
cp rk3399pro-toybrick-prod.dtb boot/
mkdir -p boot/extlinux
在 boot/extlinux 创建 extlinux.conf:
text
timeout 5
menu title Ubuntu Boot
label Ubuntu
kernel /Image
fdt /rk3399pro-toybrick-prod.dtb
append root=/dev/mmcblk0p2 rw rootwait console=ttyS2,1500000 earlycon initcall_debug init=/bin/sh

然后使用以下命令:
bash
dd if=/dev/zero of=boot.img bs=1M count=256
mkfs.ext4 -L boot boot.img
mkdir boot_mount
sudo mount boot.img boot_mount
sudo cp -r boot/* boot_mount/
sudo umount boot_mount
得到boot.img
2.2 rootfs.img
bash
# 暂定2GB大小
dd if=/dev/zero of=rootfs.img bs=1M count=2048
mkfs.ext4 -L rootfs rootfs.img
mkdir rootfs_mount
sudo mount rootfs.img rootfs_mount
sudo cp -r <path_to_ubuntu_rootfs>/* rootfs_mount/
# 如果已经打成tar包
# sudo tar xpf rootfs.tar.gz -C rootfs_mount
sudo sync
sudo umount rootfs_mount
三、烧录
文件准备:
除了编译生成的镜像,打包的img文件以外,还需要旧版本的MiniLoaderAll文件作为媒介。

3.1 rkdeveloptool 工具
这里直接使用rockchip的官方烧录工具,适用性和灵活性好的。
https://github.com/rockchip-linux/rkdeveloptool
仓库中有安装说明,直接按照步骤安装即可。
3.2 烧录Uboot
将板卡进入maskrom模式
bash
cd <path_to_rkdeveloptool>
# 查看设备是否已识别
sudo ./rkdeveloptool ld
应该看到:
text
DevNo=1
Vid=0x2207
Pid=0x330c
Maskrom
擦除emmc并烧录uboot
bash
sudo ./rkdeveloptool db MiniLoaderAll.bin
# 擦除emmc,初次烧录时使用
sudo ./rkdeveloptool ef
# 烧录 idbloader
sudo ./rkdeveloptool wl 64 idbloader.img
# 烧录 uboot
sudo ./rkdeveloptool wl 16384 uboot.itb
# 重启进入uboot
sudo ./rkdeveloptool rd
3.3 emmc分区
将板卡进入到uboot,在uboot下进行emmc分区:
boot分区256MB,rootfs为剩余空间。
bash
gpt write mmc 0 "name=boot,start=16MiB,size=256MiB;name=rootfs,size=-"

3.4 烧录系统和镜像
将板卡进入maskrom模式
bash
sudo ./rkdeveloptool db MiniLoaderAll.bin
sudo ./rkdeveloptool wl 0x8000 boot.img
sudo ./rkdeveloptool wl 0x88000 rootfs.img
# 重启
sudo ./rkdeveloptool rd
然后即可进入系统:

四、总结
有个坑没解决,extlinux.conf 中,原本想使用 append root=LABEL=rootfs,规避掉dev节点的问题,但是一直报错找不到文件系统,有时间再尝试一下。有知晓的读者也可以告知。
其他的网络、驱动以及功能模块暂未测试,留待以后完善。
总体移植还算顺利,如对您有帮助,请帮忙点赞收藏,感谢。