TB-RK3399Pro移植ubuntu 26.04及烧录

📅 2026/7/27 8:29:34 👁️ 阅读次数 📝 编程学习
TB-RK3399Pro移植ubuntu 26.04及烧录

TB-RK3399Pro移植ubuntu 26.04及烧录

  • 一、Ubuntu 26.04根文件系统制作
    • 1.1 安装必要工具包
    • 1.2 获取 Ubuntu Base RootFS
    • 1.3 文件系统挂载
    • 1.4 换源:
    • 1.5 更新系统并安装基础软件
    • 1.6 配置中文支持(可选)
    • 1.7 设置时区
    • 1.8 添加账户
    • 1.9 串口 getty:让串口有登录提示(RK3399 调试关键)
    • 1.10 清理缓存,退出 chroot
    • 1.11 安装内核模块到根文件系统
    • 1.12 设置hostname
    • 1.13 设置默认ip
  • 二、制作烧录镜像
    • 2.1 boot.img
    • 2.2 rootfs.img
  • 三、烧录
    • 3.1 rkdeveloptool 工具
    • 3.2 烧录Uboot
    • 3.3 emmc分区
    • 3.4 烧录系统和镜像
  • 四、总结

一、Ubuntu 26.04根文件系统制作

这个流程已经很成熟了,直接问AI也能生成个七七八八,这里就简单写写,以及一些踩坑记录。

1.1 安装必要工具包

sudoaptupdatesudoaptinstall-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 文件系统挂载

# 解压mkdir~/ubuntu_rootfssudotar-xpfubuntu-base-26.04-base-arm64.tar.gz-C~/ubuntu_rootfs# 复制 QEMU 模拟器和DNS配置ROOTFS=~/ubuntu_rootfssudocp/usr/bin/qemu-aarch64$ROOTFS/usr/bin/sudocp/etc/resolv.conf$ROOTFS/etc/resolv.conf# 挂载临时伪文件系统# 2) 临时挂载伪文件系统sudomount-tproc proc$ROOTFS/procsudomount-tsysfs sysfs$ROOTFS/syssudomount--bind/dev$ROOTFS/devsudomount--bind/dev/pts$ROOTFS/dev/pts# chroot进入sudochroot$ROOTFS/bin/bash

1.4 换源:

ubuntu 26.04使用 DEB822 格式,将 $ROOTFS/etc/apt/sources.list.d/ubuntu.sources 中的地址修改:

1.5 更新系统并安装基础软件

aptupdateaptupgrade-y# 安装必备基础工具aptinstall-y\sudo\vim\net-tools\iproute2\iputils-ping\network-manager\udev\kmod\dbus\systemd\systemd-sysv\openssh-server\less\locales

初次更新如果因校验报错,可以尝试在更新和安装命令添加--allow-insecure-repositories参数。

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 添加账户

echo"root:123456"|chpasswd# 自己改密码useradd-m-s/bin/bash ubuntuecho"ubuntu:ubuntu"|chpasswdusermod-aGsudoubuntu

1.9 串口 getty:让串口有登录提示(RK3399 调试关键)

ln-sf/lib/systemd/system/serial-getty@.service\/etc/systemd/system/getty.target.wants/serial-getty@ttyS2.service

1.10 清理缓存,退出 chroot

aptcleanrm-rf/var/lib/apt/lists/*exit# 卸载伪文件系统sudoumount$ROOTFS/dev/ptssudoumount$ROOTFS/devsudoumount$ROOTFS/syssudoumount$ROOTFS/proc

1.11 安装内核模块到根文件系统

cd<path_to_linux>makeARCH=arm64CROSS_COMPILE=aarch64-linux-gnu- modules -j$(nproc)sudomakemodules_installARCH=arm64CROSS_COMPILE=aarch64-linux-gnu-INSTALL_MOD_PATH=/path/to/your/rootfs

注:INSTALL_MOD_PATH应直接指向rootfs的顶层目录,系统会自动创建lib/modules/$(uname -r)子目录并填充模块文件。

1.12 设置hostname

添加$ROOTFS/etc/hosts文件:

127.0.0.1 localhost127.0.1.1 my-board ::1 localhost ip6-localhost ip6-loopback ff02::1 ip6-allnodes ff02::2 ip6-allrouters

添加$ROOTFS/etc/hostname文件:

ubuntu

1.13 设置默认ip

添加$ROOTFS/etc/netplan/01-netcfg.yaml

network: version:2renderer: networkd ethernets: end0: dhcp4: no addresses:[192.168.1.100/24]routes: - to: default via:192.168.1.1 nameservers: addresses: -114.114.114.114 -223.5.5.5

二、制作烧录镜像

调试阶段需要制作两个镜像,boot.img 和 rootfs.img,后续如果调试稳定再打成总包。

2.1 boot.img

mkdirbootcpImage boot/cprk3399pro-toybrick-prod.dtb boot/mkdir-pboot/extlinux

在 boot/extlinux 创建 extlinux.conf:

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


然后使用以下命令:

ddif=/dev/zeroof=boot.imgbs=1Mcount=256mkfs.ext4-Lboot boot.imgmkdirboot_mountsudomountboot.img boot_mountsudocp-rboot/* boot_mount/sudoumountboot_mount

得到boot.img

2.2 rootfs.img

# 暂定2GB大小ddif=/dev/zeroof=rootfs.imgbs=1Mcount=2048mkfs.ext4-Lrootfs rootfs.imgmkdirrootfs_mountsudomountrootfs.img rootfs_mountsudocp-r<path_to_ubuntu_rootfs>/* rootfs_mount/# 如果已经打成tar包# sudo tar xpf rootfs.tar.gz -C rootfs_mountsudosyncsudoumountrootfs_mount

三、烧录

文件准备:
除了编译生成的镜像,打包的img文件以外,还需要旧版本的MiniLoaderAll文件作为媒介。

3.1 rkdeveloptool 工具

这里直接使用rockchip的官方烧录工具,适用性和灵活性好的。
https://github.com/rockchip-linux/rkdeveloptool
仓库中有安装说明,直接按照步骤安装即可。

3.2 烧录Uboot

将板卡进入maskrom模式

cd<path_to_rkdeveloptool># 查看设备是否已识别sudo./rkdeveloptool ld

应该看到:

DevNo=1 Vid=0x2207 Pid=0x330c Maskrom

擦除emmc并烧录uboot

sudo./rkdeveloptool db MiniLoaderAll.bin# 擦除emmc,初次烧录时使用sudo./rkdeveloptool ef# 烧录 idbloadersudo./rkdeveloptool wl64idbloader.img# 烧录 ubootsudo./rkdeveloptool wl16384uboot.itb# 重启进入ubootsudo./rkdeveloptool rd

3.3 emmc分区

将板卡进入到uboot,在uboot下进行emmc分区:
boot分区256MB,rootfs为剩余空间。

gptwritemmc0"name=boot,start=16MiB,size=256MiB;name=rootfs,size=-"

3.4 烧录系统和镜像

将板卡进入maskrom模式

sudo./rkdeveloptool db MiniLoaderAll.binsudo./rkdeveloptool wl 0x8000 boot.imgsudo./rkdeveloptool wl 0x88000 rootfs.img# 重启sudo./rkdeveloptool rd

然后即可进入系统:

四、总结

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