利用本地AI助手自动完成香橙派orange Pi 5 PLUS可用的deepin镜像制作

手头有个香橙派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同学)后续无法升级的情况,提示依赖冲突。但绝大多数其他软件都可以后续升级,总的来说影响不大。

相关推荐
blueSatchel10 天前
香橙派4PRO安装ROS2-jazzy
ros2·香橙派
行走的小派24 天前
Zero 4不是Zero 3W的升级版,是香橙派的策略补位
人工智能·香橙派·边缘ai
行走的小派1 个月前
从个人开发到企业部署:OPi AI Station四大应用场景与选型指南
人工智能·边缘计算·香橙派·边缘ai
道川贤林2 个月前
OrangePi 系统启动优先级修改
linux·linux驱动·orangepi·u-boot
都在酒里2 个月前
【极致低延时】香橙派部署 MediaMTX 实现 WebRTC 推流,延时仅 500-800ms,比局域网 ffmpeg 拉流快近 10 倍!(附踩坑全记录)
linux·arm开发·ffmpeg·webrtc·orangepi·嵌入式软件
拼搏的小浣熊2 个月前
香橙派Zero3的奇幻之旅【【持续更新】香橙派zero3从入门到玩转 各种工具+笔记】
arm开发·物联网·香橙派
JimCarter2 个月前
使用Azure Devops Pipeline将Docker应用部署到你的Raspberry Pi上
docker·azure·树莓派·devops·orangepi·香橙派·raspberrypi
道川贤林3 个月前
EMMC开发环境的搭建与备份
linux·嵌入式·rk3588·orangepi
慵懒的猫mi3 个月前
deepin 25部署x11vnc+xrdp,实现vnc和mstsc双重访问
linux·windows·开源软件·deepin