欢迎光临
我们一直在努力

给rk3588移植Ubuntu20.04镜像文件

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 工具和固件

获取 Rockchip 平台所需的二进制文件,包括启动加载器(U-Boot)的相关二进制组件。

cd sources
git clone https://github.com/rockchip-linux/rkbin.git

2.4 下载 Ubuntu Base 根文件系统

第一种

cd ~/rk3588_ubuntu
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_defcongfig #配置选择的内核文件

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

# 进入菜单配置界面(可选)
make menuconfig

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

(1)设置环境变量

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

(2)

确保下面过程所需二进制文件是否存在

BootROM (硬件固件)

    ↓ ← 必需: TPL (DDR 初始化)

TPL (初始化内存)

    ↓ ← 必需: BL31 (安全监控)

ATF (ARM Trusted Firmware)

    ↓ ← 可选: TEE (安全环境)

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 # 进入你的 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

ech "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 ~/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 "找到可用设备: /dev/loop0
# 设置 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

2. 确认 SD 卡设备

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

# 确认 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

赞(0)
未经允许不得转载:171主机测评 » 给rk3588移植Ubuntu20.04镜像文件
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址