跳到主要内容 RK3588 开发板移植 Ubuntu 20.04 镜像完整教程 | 极客日志
Shell / Bash
RK3588 开发板移植 Ubuntu 20.04 镜像完整教程 在 Ubuntu 系统下为 Rockchip RK3588 开发板移植 Ubuntu 20.04 镜像的完整流程。主要步骤包括:安装交叉编译工具链及依赖;获取并配置 U-Boot、内核源码及 Rockchip 固件;解压 Ubuntu Base 根文件系统并配置 chroot 环境;编译内核与设备树;打包生成包含分区表、引导加载程序、内核及根文件系统的镜像文件;最后通过 dd 命令烧录至 SD 卡启动。
游戏玩家 发布于 2026/3/23 更新于 2026/4/18 13K 浏览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
apt install -y \
gcc-aarch64-linux-gnu \
g++-aarch64-linux-gnu \
binutils-aarch64-linux-gnu
sudo
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
3. 配置和编译 U-Boot
3.1 配置内核配置文件 cd u-boot
ls configs/ | grep rk3588
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
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
ls arch /arm64/configs/ | grep -i rockchip
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- rockchip_defconfig
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
sudo tar -xpf ubuntu-base-20.04.4-base-arm64.tar.gz -C rootfs
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
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
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
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%
echo "=== 自动查找可用 loop 设备 ==="
LOOP_DEVICE=$(sudo losetup -f)
echo "找到可用设备:$LOOP_DEVICE "
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/
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
sudo dd if =u-boot/u-boot.bin of=/dev/loop0 seek=64 conv=notrunc
7. 烧写镜像到 SD 卡
ls -lh ubuntu-20.04-rk3588.img
file ubuntu-20.04-rk3588.img
sudo apt update
sudo apt install -y pv dosfstools
lsblk
dmesg | tail -20
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.5 G 0 disk
├─sda1 8 :1 0 512 M 0 part /boot/efi
└─sda2 8 :2 0 238 G 0 part /
sdb 8 :16 1 29.7 G 0 disk ← 这是 SD 卡
├─sdb1 8 :17 1 512 M 0 part
└─sdb2 8 :18 1 29.2 G 0 part
微信扫一扫,关注极客日志 微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
相关免费在线工具 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