TB-RK3399Pro移植ubuntu 26.04及烧录

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节点的问题,但是一直报错找不到文件系统,有时间再尝试一下。有知晓的读者也可以告知。

其他的网络、驱动以及功能模块暂未测试,留待以后完善。

总体移植还算顺利,如对您有帮助,请帮忙点赞收藏,感谢。

相关推荐
非鱼䲆鱻䲜2 小时前
CCS 20.5.0的printf重定向串口怎么实现?
linux·单片机·电赛·ccs
左手厨刀右手茼蒿2 小时前
PCIe设备驱动开发:从枚举到DMA传输的完整链路
linux·嵌入式·系统内核
济6172 小时前
I.MX6U Linux 驱动开发篇---零基础必看!中断实验(按键中断 + 定时器消抖 + 设备树配置实战教程)--- Ubuntu20.04
linux·驱动开发·嵌入式·嵌入式linux驱动开发
seven_stars_2 小时前
CVE-2018-19518PHP漏洞
linux·浏览器·kali
浅止菌3 小时前
嵌入式设备ping不通?tcpdump 5分钟找到凶手,比加printf快10倍
linux
巴啦啦小魔仙变身3 小时前
SIGINT = Signal Interrupte
linux·服务器·python
RisunJan3 小时前
Linux命令-route(查看/修改 IP 路由表)
linux·运维
凉、介4 小时前
Linux 设备驱动匹配机制
linux·笔记·单片机·学习·操作系统·嵌入式
AI行业学习4 小时前
OpenAI Codex 完整下载 & 安装指南(2026最新版)
linux·开发语言·python·.net·notepad++