跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI 生图工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Shell / Bash

RK3588 开发板移植 Ubuntu 20.04 镜像完整教程

在 Ubuntu 系统下为 Rockchip RK3588 开发板移植 Ubuntu 20.04 镜像的完整流程。主要步骤包括:安装交叉编译工具链及依赖;获取并配置 U-Boot、内核源码及 Rockchip 固件;解压 Ubuntu Base 根文件系统并配置 chroot 环境;编译内核与设备树;打包生成包含分区表、引导加载程序、内核及根文件系统的镜像文件;最后通过 dd 命令烧录至 SD 卡启动。

游戏玩家发布于 2026/3/23更新于 2026/9/1013K 浏览

1. 环境准备和工具安装

1.1 更新系统并安装必要工具
# 更新系统
sudo apt update && sudo apt upgrade -y
# 安装基础开发工具
sudo apt install -y \
  git build-essential device-tree-compiler \
  u-boot-tools bc cpio flex bison \
  python3 python3-pip python3-venv \
  swig libssl-dev libncurses-dev \
  dosfstools parted fdisk e2fsprogs \
  qemu-user-static binfmt-support \
  curl wget axel rsync pv tree file
# 安装交叉编译工具链
sudo apt install -y \
  gcc-aarch64-linux-gnu \
  g++-aarch64-linux-gnu \
  binutils-aarch64-linux-gnu
1.2 创建工作目录结构
# 创建项目目录
mkdir -p ~/rk3588_ubuntu20.04/{sources,build,output,rootfs}

目录说明:

  • sources: 存放源码
  • build: 编译目录
  • output: 输出文件
  • rootfs: 根文件系统

2. 获取必要的源码和工具

2.1 获取 U-Boot 源码

第一种(克隆):

cd sources
git clone --depth 1 https://github.com/rockchip-linux/u-boot.git

第二种(下载解压):

cd sources
wget ftp://ftp.denx.de/pub/u-boot/u-boot-2023.10.tar.bz2
tar -xjf u-boot-2023.10.tar.bz2
mv u-boot-2023.10 u-boot
rm u-boot-2023.10.tar.bz2
2.2 获取内核源码
cd sources
git clone https://github.com/rockchip-linux/kernel.git -b develop-5.10
2.3 获取 Rockchip 工具和固件
cd sources
git clone https://github.com/rockchip-linux/rkbin.git
2.4 下载 Ubuntu Base 根文件系统
cd ~/rk3588_ubuntu20.04
wget http://cdimage.ubuntu.com/ubuntu-base/releases/20.04/release/ubuntu-base-20.04.4-base-arm64.tar.gz

如果无法通过上述网址下载,可尝试在转移带 Ubuntu 中访问:http://cdimage.ubuntu.com/ubuntu-base/releases

3. 配置和编译 U-Boot

3.1 配置内核配置文件
cd u-boot
# 查看所有可用的 Rockchip 配置
ls configs/ | grep rk3588

根据您的输出,选择相对应的配置:

make rk3588_defconfig

如果有其他相关需求也可自定义配置:

# 进入菜单配置界面(可选)
make menuconfig
3.2 设置环境变量

为接下来的顺利编译,需要设置环境变量来指定目标架构、指定交叉编译工具链。

export ARCH=arm64
export CROSS_COMPILE=aarch64-linux-gnu-

确保下面过程所需二进制文件是否存在: BootROM (硬件固件) -> TPL (DDR 初始化) -> ATF (ARM Trusted Firmware) -> U-Boot (引导加载程序) -> 操作系统

cd rkbin
find . -name "*rk3588*" -type f

关键文件通常位于:

  • bin/rk35/rk3588_ddr_lp4_2112MHz_lp5_2400MHz_v1.11.bin (TPL)
  • bin/rk35/rk3588_bl31_v1.38.elf (BL31)
  • bin/rk35/rk3588_bl32_v2.10.bin (TEE, 可选)
3.3 配置 U-Boot 构建环境
cd u-boot
# 设置环境变量指向二进制文件
export ROCKCHIP_TPL=../rkbin/bin/rk35/rk3588_ddr_lp4_2112MHz_lp5_2400MHz_v1.11.bin
export BL31=../rkbin/bin/rk35/rk3588_bl31_v1.38.elf
export TEE=../rkbin/bin/rk35/rk3588_bl32_v2.10.bin
# 检查 .config 文件中的实际配置
grep "CONFIG_SPL=" .config
grep "CONFIG_TPL=" .config

清理之前的构建并重新编译:

make distclean
make rk3588_defconfig
make -j$(nproc)
ls -la u-boot.bin u-boot.img idbloader.img

4. 配置和编译内核

4.1 编译内核
cd kernel
# 查找可用.defconfig 文件
ls arch/arm64/configs/ | grep -i rockchip
# 配置内核
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- rockchip_defconfig
# 可选:自定义内核配置
# make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- menuconfig
echo "1. 清理编译环境..."
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- distclean
echo "2. 应用配置..."
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- rockchip_defconfig
echo "3. 编译内核..."
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- Image -j$(nproc)
echo "4. 编译设备树..."
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- dtbs -j$(nproc)
# 验证脚本
if [ -f "arch/arm64/boot/Image" ]; then
  echo "✅ 内核编译成功"
  ls -lh arch/arm64/boot/Image
else
  echo "❌ 内核编译失败"
  exit 1
fi
if ls arch/arm64/boot/dts/rockchip/rk3588*.dtb 1>/dev/null 2>&1; then
  echo "✅ 设备树编译成功"
  ls -lh arch/arm64/boot/dts/rockchip/rk3588-evb1-lp4-v10.dtb
else
  echo "❌ 设备树编译失败"
  exit 1
fi
cd - > /dev/null
echo "=== 内核编译完成 ==="

为后续将内核打包进镜像文件还需对内核进行以下操作:

ls ./arch/arm64/boot/dts/rockchip/rk3588*.dtb | head -20
# 查看可用的硬件信息
cp ./arch/arm64/boot/dts/rockchip/rk3588-evb1-lp4-v10.dtb /path/to/boot/

5. 准备根文件系统

5.1 解压 Ubuntu Base
cd ~/rk3588_ubuntu20.04
# 解压 Ubuntu Base
sudo tar -xpf ubuntu-base-20.04.4-base-arm64.tar.gz -C rootfs
# 复制 DNS 配置和 QEMU
sudo cp /etc/resolv.conf rootfs/etc/
sudo cp /usr/bin/qemu-aarch64-static rootfs/usr/bin/
5.2 准备 chroot 环境
sudo mount --bind /dev rootfs/dev
sudo mount --bind /dev/pts rootfs/dev/pts
sudo mount --bind /proc rootfs/proc
sudo mount --bind /sys rootfs/sys
5.3 在 chroot 环境中配置系统
sudo chroot rootfs /bin/bash
# 在 chroot 环境中执行以下命令
apt update
apt upgrade -y
# 安装基本系统组件
apt install -y \
  sudo systemd systemd-sysv \
  network-manager net-tools ethtool wireless-tools \
  ifupdown iputils-ping openssh-server \
  htop vim nano curl wget git \
  bash-completion resolvconf
# 安装桌面环境(可选)
apt install -y --no-install-recommends \
  ubuntu-desktop-minimal \
  lightdm-gtk-greeter
# 安装开发工具
apt install -y \
  build-essential cmake git \
  python3 python3-pip
# 设置 root 密码
passwd root
# 创建普通用户
useradd -m -s /bin/bash ubuntu
passwd ubuntu
usermod -aG sudo ubuntu
# 设置主机名
echo "rk3588-ubuntu" > /etc/hostname
# 配置网络
cat > /etc/netplan/01-netcfg.yaml << EOF
network:
  version: 2
  renderer: NetworkManager
  ethernets:
    eth0:
      dhcp4: true
      optional: true
EOF
# 退出 chroot
exit

6. 将 U-Boot 和内核打包到镜像的完整步骤

准备前必须的一些文件结构如下:

.
├── build_rk3588_image.sh
├── source/
│   └── u-boot/
│       ├── idbloader.img
│       └── u-boot.img
├── sources/
│   └── kernel/
│       └── arch/
│           └── arm64/
│               └── boot/
│                   ├── Image
│                   └── dts/
│                       └── rockchip/
│                           └── rk3588*.dtb
└── rootfs/
    └── ... (Ubuntu 根文件系统内容)

以下是完整的镜像打包过程,基于你已经编译完成的 U-Boot 和内核:

cd ~/rk3588-ubuntu
# 创建镜像文件
dd if=/dev/zero of=ubuntu-20.04-rk3588.img bs=1M count=8096
# 分区
sudo parted ubuntu-20.04-rk3588.img --script mklabel gpt
sudo parted ubuntu-20.04-rk3588.img --script mkpart primary fat32 0% 512MB
sudo parted ubuntu-20.04-rk3588.img --script mkpart primary ext4 512MB 100%
# 格式化分区 使用自动查找可用 loop 设备
echo "=== 自动查找可用 loop 设备 ==="
LOOP_DEVICE=$(sudo losetup -f)
echo "找到可用设备:$LOOP_DEVICE"
# 设置 loop 设备
sudo losetup -P /dev/loop13 ubuntu-20.04-rk3588.img
# 格式化
sudo mkfs.vfat /dev/loop13p1
sudo mkfs.ext4 /dev/loop13p2
sudo mkdir -p /mnt/{boot,root}
sudo mount /dev/loop13p1 /mnt/boot
sudo mount /dev/loop13p2 /mnt/root
# 复制根文件系统
sudo cp -a rootfs/* /mnt/root/
# 复制内核和设备树
sudo cp kernel/arch/arm64/boot/Image /mnt/boot/
sudo cp kernel/arch/arm64/boot/dts/rockchip/rk3588-*.dtb /mnt/boot/
# 复制 U-Boot
sudo cp u-boot/u-boot.bin /mnt/boot/
# 创建引导配置
sudo tee /mnt/boot/extlinux.conf << EOF
label Ubuntu 20.04
kernel /Image
initrd /initrd.img
fdt /rk3588-evb.dtb
append earlycon=uart8250,mmio32,0xfeb50000 console=ttyFIQ0 root=/dev/mmcblk1p2 rw rootwait
EOF
# 安装 U-Boot 到镜像
sudo dd if=u-boot/u-boot.bin of=/dev/loop0 seek=64 conv=notrunc
# 或者使用 Rockchip 工具
# sudo ./u-boot/tools/mkimage -n rk3588 -T rksd -d u-boot/tpl/u-boot-tpl.bin:u-boot/spl/u-boot-spl.bin ubuntu-20.04-rk3588.img

7. 烧写镜像到 SD 卡

# 确认镜像文件存在
ls -lh ubuntu-20.04-rk3588.img
# 检查文件完整性
file ubuntu-20.04-rk3588.img
# 准备烧录工具
sudo apt update
sudo apt install -y pv dosfstools
# 插入 SD 卡前先查看现有设备
lsblk
# 插入 SD 卡后查看内核消息
dmesg | tail -20
# 卸载所有 SD 卡分区(假设 SD 卡是 /dev/sdb)
sudo umount /dev/sdb* 2>/dev/null
# 烧录
sudo dd if=ubuntu-20.04-rk3588.img of=/dev/sdX bs=4M status=progress
7.1 确认 SD 卡设备

重要:请仔细确认设备路径,错误的设备路径可能导致数据丢失!

示例输出:

NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda      8:0    0 238.5G  0 disk
├─sda1   8:1    0   512M  0 part /boot/efi
└─sda2   8:2    0   238G  0 part /
sdb      8:16    1  29.7G  0 disk ← 这是 SD 卡
├─sdb1   8:17    1   512M  0 part
└─sdb2   8:18    1  29.2G  0 part

目录

  1. 1. 环境准备和工具安装
  2. 1.1 更新系统并安装必要工具
  3. 更新系统
  4. 安装基础开发工具
  5. 安装交叉编译工具链
  6. 1.2 创建工作目录结构
  7. 创建项目目录
  8. 2. 获取必要的源码和工具
  9. 2.1 获取 U-Boot 源码
  10. 2.2 获取内核源码
  11. 2.3 获取 Rockchip 工具和固件
  12. 2.4 下载 Ubuntu Base 根文件系统
  13. 3. 配置和编译 U-Boot
  14. 3.1 配置内核配置文件
  15. 查看所有可用的 Rockchip 配置
  16. 进入菜单配置界面(可选)
  17. 3.2 设置环境变量
  18. 3.3 配置 U-Boot 构建环境
  19. 设置环境变量指向二进制文件
  20. 检查 .config 文件中的实际配置
  21. 4. 配置和编译内核
  22. 4.1 编译内核
  23. 查找可用.defconfig 文件
  24. 配置内核
  25. 可选:自定义内核配置
  26. make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- menuconfig
  27. 验证脚本
  28. 查看可用的硬件信息
  29. 5. 准备根文件系统
  30. 5.1 解压 Ubuntu Base
  31. 解压 Ubuntu Base
  32. 复制 DNS 配置和 QEMU
  33. 5.2 准备 chroot 环境
  34. 5.3 在 chroot 环境中配置系统
  35. 在 chroot 环境中执行以下命令
  36. 安装基本系统组件
  37. 安装桌面环境(可选)
  38. 安装开发工具
  39. 设置 root 密码
  40. 创建普通用户
  41. 设置主机名
  42. 配置网络
  43. 退出 chroot
  44. 6. 将 U-Boot 和内核打包到镜像的完整步骤
  45. 创建镜像文件
  46. 分区
  47. 格式化分区 使用自动查找可用 loop 设备
  48. 设置 loop 设备
  49. 格式化
  50. 复制根文件系统
  51. 复制内核和设备树
  52. 复制 U-Boot
  53. 创建引导配置
  54. 安装 U-Boot 到镜像
  55. 或者使用 Rockchip 工具
  56. sudo ./u-boot/tools/mkimage -n rk3588 -T rksd -d u-boot/tpl/u-boot-tpl.bin:u-boot/spl/u-boot-spl.bin ubuntu-20.04-rk3588.img
  57. 7. 烧写镜像到 SD 卡
  58. 确认镜像文件存在
  59. 检查文件完整性
  60. 准备烧录工具
  61. 插入 SD 卡前先查看现有设备
  62. 插入 SD 卡后查看内核消息
  63. 卸载所有 SD 卡分区(假设 SD 卡是 /dev/sdb)
  64. 烧录
  65. 7.1 确认 SD 卡设备

更多推荐文章

查看全部
  • 数据结构实战:选择排序原理与 Java 实现
  • 10 个提升 AI 模型能力的必备技能
  • Spring Boot 集成 MyBatis 操作数据库实战
  • QGroundControl 跨平台安装指南:多系统快速部署实战
  • Linux 搭建 Web 服务器指南:Nginx 与 Apache 实战
  • PyQt5 入门教程:基础与常用控件详解
  • 转行网络安全:学习路径与就业实战建议
  • 如何理性看待 AIGC 人工智能技术的发展与影响
  • Spatial Joy 2025 AR&AI 大赛:开发者资源、玩法与避坑全解析
  • 使用 Whisper-large-v3 搭建本地语音转文字服务
  • nano banana AI 绘画提示词精选与使用指南
  • 计算机视觉基础理论与实战应用指南
  • 中国 AI 大模型未来五年五大潜力应用场景展望
  • Java File 类核心 API 详解与使用
  • 七火山发布 Etna 模型:15 秒 4K 60 帧文生视频技术解析
  • JavaScript 运算符与流程控制基础解析
  • 提示词工程师入门指南:从基础原理到实战技巧
  • 腾讯云服务器部署 OpenClaw 对接飞书指南
  • LangChain Agent 中间件详解:提升可靠性与可控性
  • AMD 显卡 llama.cpp 高性能配置与调优实战

相关免费在线工具

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online

  • JSON 压缩

    通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online

  • JSON美化和格式化

    将JSON字符串修饰为友好的可读格式。 在线工具,JSON美化和格式化在线工具,online