手头有个香橙派5 plus开发板闲置,想着拿来做个小电脑用,结果官方的镜像用不习惯,就自己做了一个适用于香橙派5 plus的deepin镜像,img格式,可直接烧录进去。
一、自己先找个电脑,X86或者ARM的都可以,安装个deepin系统,然后deepin系统自带一个"小U同学",这个本地AI助手每天有一点试用流量,可以用来直接完成镜像制作,一天流量用完了,第二天慢慢接着弄就好。
二、从deepin官方网站下载ARM版本的ISO镜像到本地备用。
三、确认本地空余空间大于50G,整个编译过程挺费空间的。
四、在AI助手对话框输入以下提示语:
任务:将 deepin ARM64 ISO 制作成香橙派 5 Plus(Orange Pi 5 Plus,RK3588)可直接烧录到 NVMe SSD 的启动镜像。
【已知条件】
- 硬件:香橙派 5 Plus,RK3588,ARM64,带 NVMe SSD(M.2 接口)
- 我已提供:deepin ARM64 版本的 ISO 文件(路径由用户指定)
- 目标:生成一个 .img 文件,可直接 dd 烧录到 NVMe SSD,或直接用 balenaEtcher/rkdevtool 写入 SSD 启动
- 构建环境:x86_64 Linux 主机(Ubuntu 22.04/24.04 或 deepin 25)
【核心要求】
1. 生成可用的.img 文件,可直接 dd 烧录到 NVMe SSD(此过程中,你需要自己解决软件下载问题。当前网络为中国国内)
2. 输出一个完整的 build.sh 脚本,执行后生成可直接烧录的 orangepi5plus-deepin.img。
3. 脚本必须包含以下步骤,每一步都要有中文注释:
a) 检查依赖(安装交叉编译工具链、u-boot-tools、parted、dosfstools、e2fsprogs、qemu-user-static、binfmt-support 等)
b) 创建工作目录结构
c) 挂载/解压用户提供的 deepin ARM64 ISO,提取其中的 squashfs 根文件系统
d) 创建空白镜像文件(建议 16GB 或按用户指定大小),进行 GPT 分区:
- 分区1:保留 16MB 空白(用于 U-Boot idbloader)
- 分区2:/boot,约 512MB,ext4 或 fat32
- 分区3:/,剩余全部空间,ext4
e) 格式化分区
f) 编译香橙派 5 Plus 专用 U-Boot(orangepi-5-plus-rk3588_defconfig),生成 idbloader.img 和 u-boot.itb
g) 将 idbloader.img 和 u-boot.itb 写入镜像的预留空白区域(正确偏移量)
h) 挂载 boot 和 root 分区,将 ISO 提取的根文件系统复制到 root 分区
i) 编译或获取适配香橙派 5 Plus 的内核(Armbian 6.1.x rockchip 分支),生成 Image、dtb、modules
j) 将内核 Image、设备树 rk3588-orangepi-5-plus.dtb、panthor GPU overlay(rockchip-rk3588-panthor-gpu.dtbo)复制到 /boot
k) 生成 initrd.img,创建 /boot/extlinux/extlinux.conf,正确配置:
- label deepin
- kernel /Image
- initrd /initrd.img
- fdt /dtb/rockchip/rk3588-orangepi-5-plus.dtb
- fdtoverlays /dtb/rockchip/overlay/rockchip-rk3588-panthor-gpu.dtbo
- append root=PARTUUID=xxx rw console=ttyS2,1500000n8 console=tty1 panic=10
l) 配置 fstab(使用 PARTUUID 或 UUID),设置主机名、创建普通用户、设置 root 密码
m) 安装内核模块到根文件系统
n) 清理、卸载、sync,生成最终 .img 文件
o) 提供烧录命令:如何将该 img 写入 NVMe SSD(dd 命令示例,注意 if=/dev/zero 等危险操作警告)
4. 必须处理的关键细节:
- U-Boot 编译时必须使用 orangepi-5-plus-rk3588_defconfig
- 设备树文件名必须是 rk3588-orangepi-5-plus.dtb
- 必须加载 panthor GPU overlay(rockchip-rk3588-panthor-gpu.dtbo)
- extlinux.conf 中的 root 参数必须使用 PARTUUID,且该 PARTUUID 必须与实际分区一致
- 若从 ISO 提取的根文件系统已有内核,需判断是否需要替换为 RK3588 专用内核
- 脚本中所有涉及 /dev/loop、/dev/sdX、/dev/nvme 的设备名必须加确认提示,防止误操作
- 提供两种输出方案:A) 生成 .img 文件自行烧录;B) 直接写入用户指定的 NVMe SSD(需额外确认)
5. 脚本需健壮:
- 检查命令返回值,失败时退出并提示
- 自动清理挂载点和 loop 设备
- 支持通过环境变量或命令行参数指定 ISO 路径、输出镜像路径、镜像大小
6. 最后输出一个 README.md,说明:
- 如何使用生成的镜像
- 如何烧录到 NVMe SSD
- 首次启动后的注意事项(如可能需要调整 display 输出、网络配置等)
- 常见故障排查(如黑屏、不启动、U-Boot 没写入正确偏移等)
【参考资源】
- deepin 官方 RK3588 适配教程:https://www.deepin.org/zh/rk3588-deepin-25/
- 香橙派 5 Plus 移植教程:https://www.deepin.org/zh/deepin25-orangepi/
- 项目仓库:https://gitee.com/KDarkmoon/deepin-rockchip.git
- Armbian RK3588 内核:https://github.com/armbian/linux-rockchip
- U-Boot 源码(官方或 Armbian fork)
/media/XXXXXXX/workdir 这个文件夹是你后续开展工作的工作文件夹,所有资料都放在里面。该文件夹下有deepin-desktop-community-25.2.0-arm64.iso。
请直接生成需要的.img 文件,可直接 dd 烧录到 NVMe SSD(此过程中,你需要自己解决软件下载问题。当前网络为中国国内,不能直接访问 GitHub,需通过代理或国内源访问。其他软件下载时遇到问题也需类似处理或做出其他变通处理,例如提供下载链接,我用迅雷下载后,你再继续)
完成后,再输出完整的 build.sh 脚本和 README.md,不要省略任何步骤,确保脚本可直接执行。
若需要sudo权限才能执行的操作,你需要编写代码,我用sudo权限执行后,你再继续。
五、然后就是一顿折腾,反正最后可以搞定,整个过程中,最大的困难在于:无法下载到各种所需的软件包(基本都是境外网站才有资源,不好下载),利用AI磕磕绊绊总算搞定了。
六、让AI写了篇总结:
# Orange Pi 5 Plus (RK3588) Deepin 25 启动镜像构建报告
> **构建日期**: 2026-08-13
> **目标硬件**: 香橙派 5 Plus (Orange Pi 5 Plus, RK3588)
> **基础系统**: Deepin 25 ARM64 桌面版
> **输出文件**: `orangepi5plus-deepin.img` (24GB)
> **构建环境**: x86_64 Linux (Deepin 25)
---
## 目录
1. [概述](#1-概述)
2. [环境准备](#2-环境准备)
3. [构建步骤](#3-构建步骤)
4. [遇到的问题及解决方案](#4-遇到的问题及解决方案)
5. [最终验证](#5-最终验证)
6. [使用说明](#6-使用说明)
7. [附录](#7-附录)
---
## 1. 概述
### 1.1 目标
将 Deepin 25 ARM64 桌面版 ISO 制作成香橙派 5 Plus 可直接 dd 烧录到 NVMe SSD 的启动镜像。
### 1.2 技术栈
| 组件 | 版本/来源 | 说明 |
|------|-----------|------|
| **基础系统** | Deepin 25 ARM64 (ISO) | 双 squashfs 分层架构 |
| **内核** | 6.1.141-rk3588-ophub | ophub 预编译 RK3588 优化版 |
| **U-Boot** | 2025.07 (orangepi-5-plus-rk3588_defconfig) | 官方 U-Boot 源码编译 |
| **引导方式** | extlinux (U-Boot 脚本) | 替代 GRUB |
| **文件系统** | ext4 (GPT 分区) | PARTUUID 挂载 |
| **GPU 驱动** | Panthor (Mali G610) | 通过 device tree overlay 加载 |
### 1.3 最终镜像分区布局
```
GPT 分区表:
编号 起始 结束 大小 文件系统 挂载点 标志
p1 16.8MB 17.8MB 1MB (保留) (U-Boot) -
p2 17.8MB 556MB 538MB ext4 /boot boot
p3 556MB 25.8GB 25.2GB ext4 / -
U-Boot 写入偏移:
u-boot-rockchip.bin: 偏移 32KB (sector 64)
├── idbloader.img (TPL/SPL): 自动包含在 u-boot-rockchip.bin 中
└── u-boot.itb: 自动包含在 u-boot-rockchip.bin 中
```
---
## 2. 环境准备
### 2.1 工作目录结构
```
/media/xxxxxx/workdir/
├── deepin-desktop-community-25.2.0-arm64.iso # Deepin ARM64 ISO (5.2GB)
├── build.sh # 构建脚本
├── README.md # 说明文档
├── BUILD_REPORT.md # 本报告
├── build/
│ └── u-boot/ # U-Boot 源码及编译产物
│ ├── idbloader.img # SPL (TPL+DDR 初始化)
│ ├── u-boot.itb # U-Boot FIT 镜像
│ └── u-boot-rockchip.bin # 合并镜像 (idbloader+u-boot.itb)
├── downloads/
│ └── RK3588_内核/
│ └── 6.1.141.tar.gz # ophub 预编译内核 (127MB)
│ ├── boot-6.1.141-rk3588-ophub.tar.gz # 内核 Image + initrd
│ ├── dtb-rockchip-6.1.141-rk3588-ophub.tar.gz # 设备树文件
│ └── modules-6.1.141-rk3588-ophub.tar.gz # 内核模块
├── deepin-build/
│ ├── rootfs/ # 解压后的根文件系统(构建后删除)
│ ├── output/
│ │ └── orangepi5plus-deepin.img # 最终输出镜像 (24GB)
│ └── ...
└── iso_mount/ # ISO 挂载点
```
### 2.2 依赖工具
```bash
# 安装构建依赖
sudo apt-get install -y \
parted dosfstools e2fsprogs \
u-boot-tools swig python3-dev \
libssl-dev libgnutls28-dev uuid-dev \
python3-pip rsync qemu-user-static \
binfmt-support cpio xz-utils \
openssl gcc-aarch64-linux-gnu
pip3 install --break-system-packages pyelftools
```
---
## 3. 构建步骤
### 3.1 提取根文件系统(双 squashfs 分层合并)
Deepin 25 ARM64 ISO 使用了双 squashfs 分层架构:
```
filesystem.squashfs → 基础系统 (3.0GB)
filesystem-extra.squashfs → 额外应用 (2.1GB)
```
**关键操作**:必须分层复制,不能只提取 base 层。
```bash
# 挂载 ISO
mount -o loop deepin-desktop-community-25.2.0-arm64.iso /mnt/iso
# 挂载两层 squashfs
mount -t squashfs /mnt/iso/live/filesystem.squashfs /mnt/base -o loop,ro
mount -t squashfs /mnt/iso/live/filesystem-extra.squashfs /mnt/extra -o loop,ro
# 分层复制:先 base,再 extra 叠加(extra 覆盖 base 中同名文件)
rsync -aHAXx --numeric-ids /mnt/base/ /mnt/rootfs/
rsync -aHAXx --numeric-ids /mnt/extra/ /mnt/rootfs/
```
### 3.2 创建空白镜像并分区
```bash
# 创建 24GB 空白镜像(稀疏文件)
truncate -s 24G orangepi5plus-deepin.img
# GPT 分区
parted -s orangepi5plus-deepin.img \
mklabel gpt \
mkpart primary 16MiB 17MiB \ # 分区1: 保留 (1MB)
mkpart primary 17MiB 530MiB \ # 分区2: /boot (513MB)
mkpart primary 530MiB 100% \ # 分区3: / (剩余空间)
set 2 boot on # 设置 boot 标志
```
### 3.3 格式化分区
```bash
LOOP=$(losetup -fP --show orangepi5plus-deepin.img)
mkfs.ext4 -L bootfs "${LOOP}p2"
mkfs.ext4 -L rootfs "${LOOP}p3"
```
### 3.4 编译 U-Boot(香橙派 5 Plus 专用)
```bash
cd u-boot
make ARCH=arm CROSS_COMPILE=aarch64-linux-gnu- orangepi-5-plus-rk3588_defconfig
make ARCH=arm CROSS_COMPILE=aarch64-linux-gnu- -j$(nproc)
# 关键产物
ls -la idbloader.img u-boot.itb u-boot-rockchip.bin
```
### 3.5 写入 U-Boot 到镜像
```bash
# u-boot-rockchip.bin 包含 idbloader + u-boot.itb 在正确偏移
# RK3588 NVMe 启动偏移: 32KB (sector 64)
dd if=u-boot/u-boot-rockchip.bin of=orangepi5plus-deepin.img bs=512 seek=64 conv=notrunc
# 验证签名
dd if=orangepi5plus-deepin.img bs=512 skip=64 count=1 | od -A x -t x1z -N 4
# 期望输出: 52 4b 4e 53 (RKNS)
```
### 3.6 解压并部署内核
```bash
# 解压 ophub 预编译内核包
tar xzf 6.1.141.tar.gz
cd 6.1.141
tar xzf boot-6.1.141-rk3588-ophub.tar.gz
tar xzf dtb-rockchip-6.1.141-rk3588-ophub.tar.gz
tar xzf modules-6.1.141-rk3588-ophub.tar.gz
# 部署到 boot 分区
cp vmlinuz-6.1.141-rk3588-ophub /mnt/boot/Image
cp initrd.img-6.1.141-rk3588-ophub /mnt/boot/initrd.img
cp rk3588-orangepi-5-plus.dtb /mnt/boot/dtb/rockchip/
cp overlay/rockchip-rk3588-panthor-gpu.dtbo /mnt/boot/dtb/rockchip/overlay/
```
### 3.7 配置引导(extlinux.conf)
```bash
cat > /mnt/boot/extlinux/extlinux.conf << 'EOF'
TIMEOUT 30
PROMPT 1
DEFAULT deepin
MENU TITLE Deepin ARM64 Boot Menu
LABEL deepin
MENU LABEL Deepin 25 (Linux 6.1.141)
KERNEL /Image
INITRD /initrd.img
FDT /dtb/rockchip/rk3588-orangepi-5-plus.dtb
FDTOVERLAYS /dtb/rockchip/overlay/rockchip-rk3588-panthor-gpu.dtbo
APPEND root=PARTUUID=<ROOT_PARTUUID> rw rootwait console=ttyS2,1500000 console=tty1 cma=128M audit=0 splash loglevel=2 panic=10
七、一份AI编写的镜像使用说明
# Orange Pi 5 Plus (RK3588) Deepin 25 启动镜像
将 Deepin ARM64 桌面版 ISO 制作成香橙派 5 Plus(Orange Pi 5 Plus,RK3588)可直接烧录到 NVMe SSD 的启动镜像。
## 文件说明
| 文件 | 说明 |
|------|------|
| `orangepi5plus-deepin.img` | 生成的启动镜像 (16GB),可直接 dd 到 NVMe SSD |
| `build.sh` | 完整构建脚本,可重复执行 |
| `README.md` | 本说明文件 |
## 镜像分区布局
```
GPT分区表:
编号 起始 结束 大小 文件系统 标签 标志
p1 16MB 17MB 1MB (保留) primary
p2 17MB 530MB 513MB ext4 bootfs boot
p3 530MB 16.6GB 15.5GB ext4 rootfs
U-Boot 写入位置:
idbloader.img / u-boot-rockchip.bin: 偏移 32KB (sector 64)
```
## 烧录方法
### 方法一:dd 命令烧录到 NVMe SSD
```bash
# 1. 确认 NVMe SSD 设备名
lsblk
# 例如 /dev/nvme0n1
# 2. ⚠️ 危险!确认目标设备无误后再执行!
# 以下命令会清空目标设备上的所有数据!
sudo dd if=orangepi5plus-deepin.img of=/dev/nvme0n1 bs=4M status=progress
# 3. 等待完成后,安全弹出
sync
sudo eject /dev/nvme0n1 # 如果支持
```
### 方法二:使用 balenaEtcher(图形化)
1. 下载 [balenaEtcher](https://etcher.balena.io/)
2. 选择 `orangepi5plus-deepin.img`
3. 选择目标 NVMe SSD
4. 点击 Flash
### 方法三:使用 rkdevtool(Windows)
1. 下载 [RKDevTool](https://github.com/rockchip-linux/tools)
2. 将香橙派 5 Plus 切换到 Maskrom 模式
3. 使用 RKDevTool 烧录镜像
## 首次启动
### 1. 连接设备
- HDMI 连接显示器
- USB 键盘鼠标
- 网线(或等待 WiFi 配置)
- 插入 NVMe SSD 到 M.2 插槽
### 2. 上电启动
插入 12V/3A 以上电源适配器,系统将自动启动。
### 3. 登录信息
- **默认用户**: ``
- **root 密码**: ``
- **主机名**: ``
⚠️ **首次登录后请立即修改密码!**
```bash
# 修改普通用户密码
passwd
# 修改 root 密码
sudo passwd root
```
### 4. 网络配置
**有线网络**: 自动获取 IP(DHCP),插上网线即可使用。
**无线网络**:
```bash
# 查看无线网卡
nmcli device status
# 连接 WiFi
nmcli device wifi connect "SSID" password "密码"
# 或使用图形界面
# 点击任务栏网络图标 -> 选择 WiFi -> 输入密码
```
### 5. 显示输出
默认 HDMI 输出。如果连接了多个显示器,可能需要在"设置"→"显示"中调整。
如果遇到黑屏问题:
1. 确保 HDMI 线缆连接正常
2. 尝试使用靠近 USB-C 口的 HDMI 接口
3. 在 extlinux.conf 中移除 `console=ttyS2,1500000` 参数(仅保留 `console=tty1`)
## 常见故障排查
### 1. 系统不启动(无任何输出)
- **U-Boot 没有写入正确偏移**
- 检查镜像前 64 扇区是否有 `RKNS` 签名:`dd if=orangepi5plus-deepin.img bs=512 skip=64 count=1 | od -A x -t x1z -N 16`
- 如果签名不对,重新烧录
- **NVMe SSD 不兼容**
- 尝试更换不同品牌的 NVMe SSD
- 部分 PCIe 3.0 的 SSD 可能在 RK3588 上兼容性更好
- **电源不足**
- 确保使用 12V/3A 以上电源适配器
- 避免使用 USB 供电
### 2. 系统启动到 U-Boot 后黑屏
- **HDMI 输出问题**
- 尝试不同的 HDMI 接口
- 尝试移除 `rockchip-rk3588-panthor-gpu.dtbo` overlay
- 编辑 `/boot/extlinux/extlinux.conf`,注释掉 FDTOVERLAYS 行
- **分辨率不兼容**
- 连接支持 1080p 的显示器测试
- 某些 4K 显示器需要在 U-Boot 中设置分辨率
### 3. 启动后卡在 initramfs 或 kernel panic
- **PARTUUID 不匹配**
- 检查 `/boot/extlinux/extlinux.conf` 中的 `root=PARTUUID=xxx` 是否正确
- 检查 `/etc/fstab` 中的 PARTUUID 是否正确
- **根文件系统损坏**
- 重新执行 `fsck` 修复
- 或重新生成镜像
### 4. 触摸屏/触摸板不工作
- 香橙派 5 Plus 的触摸屏需要额外的 overlay
- 尝试在 extlinux.conf 中添加对应的 overlay
### 5. 音频没有声音
- 检查音频输出设备(HDMI 音频 vs 3.5mm 接口)
- 使用 `pavucontrol` 或 `alsamixer` 调整音频输出
### 6. U-Boot 编译问题
如果重新编译 U-Boot,请确保:
```bash
# 1. 配置
make ARCH=arm CROSS_COMPILE=aarch64-linux-gnu- orangepi-5-plus-rk3588_defconfig
# 2. 编译
make ARCH=arm CROSS_COMPILE=aarch64-linux-gnu- -j$(nproc)
# 3. 检查产物
ls -la idbloader.img u-boot.itb u-boot-rockchip.bin
```
## 重新构建
```bash
# 使用默认配置
sudo ./build.sh
# 指定 ISO 路径和输出路径
sudo ./build.sh -i /path/to/deepin-arm64.iso -o /path/to/output.img
# 指定镜像大小 (20GB)
sudo ./build.sh -s 20
# 使用环境变量
sudo DEEPIN_ISO=/path/to/deepin.iso IMG_SIZE=20 ./build.sh
```
## 技术细节
### 启动流程
1. **RK3588 BootROM** 初始化 PCIe 并读取 NVMe SSD
2. **idbloader.img** (TPL/SPL) 初始化 DDR 和基础硬件
3. **U-Boot** 加载 extlinux.conf 和设备树
4. **内核** (6.1.141) 启动,加载 panthor GPU 驱动
5. **systemd** 启动 Deepin 桌面环境
### 内核特性
- 内核版本: 6.1.141 (ophub RK3588 优化版)
- 设备树: rk3588-orangepi-5-plus.dtb
- GPU: Panthor (Mali G610) + rockchip-rk3588-panthor-gpu.dtbo overlay
- 串口: ttyS2 (1500000 baud) 用于调试
- 文件系统: ext4 (PARTUUID 挂载)
### 依赖工具
- `parted` - GPT 分区管理
- `dosfstools` - FAT 文件系统工具
- `e2fsprogs` - ext4 文件系统工具
- `u-boot-tools` - U-Boot 工具
- `gcc-aarch64-linux-gnu` - 交叉编译工具链
- `qemu-user-static` + `binfmt-support` - ARM64 模拟支持
- `rsync` - 文件同步
## 参考资源
- [Deepin RK3588 适配教程](https://www.deepin.org/zh/rk3588-deepin-25/)
- [香橙派 5 Plus 移植教程](https://www.deepin.org/zh/deepin25-orangepi/)
- [Deepin Rockchip 项目仓库](https://gitee.com/KDarkmoon/deepin-rockchip.git)
- [Armbian RK3588 内核](https://github.com/armbian/linux-rockchip)
- [ophub 内核仓库](https://github.com/ophub/kernel/releases)
- [U-Boot 官方源码](https://github.com/u-boot/u-boot)
## 许可证
本项目基于 Deepin 25 和开源社区项目构建,遵循各项目的原始许可证。
八、镜像烧录后的问题和处理方法
img镜像烧录安装后,你启动后香橙派5 plus后,会提示你空间紧张。解决方法参考香橙派官方手册。里面有个章节,是告诉你安装Gparted,然后利用这个软件修改对应系统分区的大小。
九、已经存在的一些问题
毕竟是自己瞎弄的,deepin系统的ARM镜像没有直接适配香橙派,所以,安装后,遇到了部分官方软件(小U同学)后续无法升级的情况,提示依赖冲突。但绝大多数其他软件都可以后续升级,总的来说影响不大。