GKLBB

当你经历了暴风雨,你也就成为了暴风雨

导航

Xiaomi Pad 6 (pipa) Ubuntu 26.04 原生双系统移植文档

 

文档版本: v1.0
最后更新: 2026-08-30
适用设备: Xiaomi Pad 6 国行版 (pipa)
SoC: Qualcomm Snapdragon 870
目标系统: Ubuntu 26.04 LTS Resolute (GNOME / KDE Plasma)
启动方案: A/B Slot + Mu-Silicium UEFI
上游项目: PAD6-DEV / Ubuntu-pipa

目录


一、架构概述

1.1 目标架构

本方案实现的是原生硬件启动,而非 Android 容器内的 Linux:
plain
┌─────────────────────────────────────────────┐
│           Xiaomi Pad 6 (pipa)               │
│         Qualcomm Snapdragon 870             │
└──────────────────┬──────────────────────────┘
                   │
         Qualcomm Boot Chain
                   │
        ┌─────────┴─────────┐
        │                   │
     Slot A              Slot B
        │                   │
  Android Boot      Mu-Silicium UEFI
        │                   │
    HyperOS ────────────> Linux Kernel
                              │
                              ▼
                        Ubuntu 26.04
                        GNOME / Plasma
 

1.2 与 PRoot/容器方案的区别

表格
方案层级性能硬件访问
Termux + PRoot Android 用户态容器 受限 通过 Android 抽象层
本方案(原生) 直接硬件启动 完整 直接驱动(Freedreno GPU、ath11k Wi-Fi 等)

1.3 上游项目状态

  • 状态: Active(截至 2026-08-30)
  • 最新构建: build-20260724-99981bd
  • 提供桌面: GNOME、KDE Plasma
  • 基础设施: pipa-pkgs APT 源(预编译设备驱动与固件)

二、前置条件与风险提示

2.1 硬性前置条件

表格
条件验证命令要求
Bootloader 已解锁 fastboot oem device-info Device unlocked: true
设备代号确认 fastboot getvar product product: pipa
USB 调试已开启 adb devices 显示授权设备
国行 Fastboot ROM 已下载 救砖备用

2.2 国行版 BL 解锁特别说明

⚠️ 警告: 小米 HyperOS 国际解锁政策明确限制:
  • 仅开放给部分用户
  • 要求账号注册地在中国大陆以外
  • 仅适用于非中国大陆设备
国行设备如果未解锁,必须通过小米官方国内渠道申请。
严禁使用以下方式绕过:
  • 降级未知固件
  • 不明 EDL 服务
  • 付费远程解锁
  • 所谓 BL Bypass 工具
解锁 Bootloader 会清除用户数据,操作前务必完整备份。

三、PC 环境准备

3.1 推荐配置

  • Windows PC: 仅用于小米官方 Mi Unlock 工具
  • Linux PC(Ubuntu/Debian): 用于后续所有 ADB / Fastboot / 分区 / 刷写操作
  • 备选方案: Ubuntu Live USB(无 Linux 主机时)

3.2 工具安装

bash
sudo apt update
sudo apt install -y adb fastboot git xz-utils
 

3.3 连接验证

bash
adb version
fastboot --version
adb devices
 
预期输出:
plain
xxxxxxxx    device
 

四、设备验证

4.1 确认设备代号

bash
adb shell getprop ro.product.device
 
必须返回: pipa

4.2 确认 Fastboot 产品标识

bash
adb reboot bootloader
fastboot getvar product
 
必须返回: product: pipa
如非 pipa,立即停止,勿使用本文档任何刷写命令。

4.3 记录当前 A/B Slot

bash
fastboot getvar current-slot
 
假设当前为 Slot A(后续示例均基于此,如为 Slot B 请全程对调 A/B):
表格
系统Slot用途
HyperOS A 保留 Android
Ubuntu B 安装 Linux

五、备份策略

备份是整个流程中最重要的保险步骤。

5.1 准备救砖资源

  1. 国行 Fastboot ROM(Xiaomi Pad 6 pipa China/CN 版)
  2. OrangeFox Recovery(临时启动,不永久刷入)

5.2 进入 Recovery 并获取 Root Shell

bash
fastboot boot recovery.img
adb devices
adb shell id        # 应显示 root 权限
 

5.3 备份关键分区

在 PC 上执行:
bash
mkdir -p ~/pipa-backup && cd ~/pipa-backup

# 保存分区映射
adb shell 'ls -l /dev/block/by-name' > pipa-by-name.txt

# 保存 GPT 分区表(文本)
adb shell 'parted /dev/block/sda unit GB print free' > pipa-partitions-before.txt
 

5.4 镜像级备份

bash
adb exec-out "dd if=/dev/block/by-name/boot_a bs=4M 2>/dev/null" > boot_a.img
adb exec-out "dd if=/dev/block/by-name/boot_b bs=4M 2>/dev/null" > boot_b.img
adb exec-out "dd if=/dev/block/by-name/dtbo_a bs=4M 2>/dev/null" > dtbo_a.img
adb exec-out "dd if=/dev/block/by-name/dtbo_b bs=4M 2>/dev/null" > dtbo_b.img
adb exec-out "dd if=/dev/block/by-name/vbmeta_a bs=4M 2>/dev/null" > vbmeta_a.img
adb exec-out "dd if=/dev/block/by-name/vbmeta_b bs=4M 2>/dev/null" > vbmeta_b.img
adb exec-out "dd if=/dev/block/by-name/rawdump bs=4M 2>/dev/null" > rawdump.img
adb exec-out "dd if=/dev/block/by-name/cust bs=4M 2>/dev/null" > cust.img
adb exec-out "dd if=/dev/block/by-name/persist bs=4M 2>/dev/null" > persist.img
 
验证备份完整性:
bash
ls -lh
 
任何镜像为 0 bytes 均视为备份失败,不得继续。

5.5 完整 GPT 备份(如 Recovery 支持)

bash
adb shell which sgdisk
# 若存在:
adb shell 'sgdisk --backup=/tmp/pipa-gpt.bin /dev/block/sda'
adb pull /tmp/pipa-gpt.bin
 

六、存储分区规划

6.1 256GB 推荐分配

plain
┌──────────────────────────────────────────────┐
│  Android 系统分区(system/vendor/super)      │  不动
├──────────────────────────────────────────────┤
│  userdata ≈ 160 GB                           │  HyperOS 数据
├──────────────────────────────────────────────┤
│  linux ≈ 80 GB                               │  Ubuntu rootfs
└──────────────────────────────────────────────┘
 
表格
用途大小说明
Android 数据 ~160 GB 保留 HyperOS 日常使用空间
Ubuntu ~80 GB 含桌面环境、开发工具、容器等
若以 Ubuntu 为主力开发环境,可调整为 Android 120~140 GB / Ubuntu 100~120 GB。

6.2 为什么不能直接尾部写入

Android userdata 通常占据磁盘尾部连续空间,不能直接在其后追加分区。正确逻辑:
plain
修改前: [Android 分区][────────── userdata ──────────]
修改后: [Android 分区][── userdata ──][── linux ──]
 
操作必然后果:Android 用户数据将全部清空。

七、分区调整操作

7.1 获取真实分区参数

在 Recovery ADB Shell 中:
bash
parted /dev/block/sda
(parted) unit GB
(parted) print free
 
记录 userdata 的真实:
  • Number(分区号,如 34
  • Start(起始位置,如 11.1GB
  • End(结束位置,如 253.8GB
以下数值仅为示例,必须使用你自己设备的实际输出!

7.2 计算新分区边界

假设:
  • userdata 起始于 11.1GB
  • 磁盘结束于 253.8GB
  • 计划分配给 Ubuntu 80GB
则:
  • 新 userdata 结束: 253.8 - 80 = 173.8GB
  • linux 起始: 173.8GB
  • linux 结束: 253.8GB

7.3 执行分区调整

parted 交互环境中:
Text
rm 34
mkpart userdata 11.1GB 173.8GB
mkpart linux 173.8GB 253.8GB
print          # 确认 userdata 和 linux 均存在
quit
 

7.4 验证新分区

bash
ls -l /dev/block/by-name/userdata
ls -l /dev/block/by-name/linux
 
两者必须均存在。
若 Recovery 无 parted,停止操作,勿使用来源不明的 ARM64 二进制。

八、Android 恢复验证

分完区后必须先验证 Android 可正常恢复,再继续安装 Ubuntu。

8.1 进入 Fastboot 并激活 Android Slot

bash
adb reboot bootloader
fastboot set_active a
 

8.2 进入官方 Recovery 格式化数据

bash
fastboot reboot recovery
# 或在关机状态下:Power + Volume Up
 
在小米官方 Recovery 中执行:
  • Wipe Data → Factory Reset
让 HyperOS 自行重新格式化 userdata,比手动 mkfs 更安全(保留加密结构与文件系统选择)。

8.3 验证 Android 启动

启动后确认:
  • [x] 可正常进入系统
  • [x] 设置向导正常
  • [x] Wi-Fi 可用
  • [x] 存储容量显示减少(符合预期)
  • [x] 重新开启开发者模式 + USB 调试

九、Ubuntu 镜像准备

9.1 下载地址

9.2 选择桌面环境

表格
桌面推荐场景
KDE Plasma 推荐。灵活、平板/键鼠切换友好、开发体验佳
GNOME 接近标准 Ubuntu 体验
两者底层(Kernel、UEFI、驱动)完全一致,仅桌面层不同。

9.3 解压与校验

未拆分包:
bash
tar -xJf ubuntu-pipa-plasma-20260724.tar.xz
 
拆分包(.part):
bash
cat ubuntu-pipa-plasma-YYYYMMDD.tar.xz.*.part > ubuntu-pipa-plasma-YYYYMMDD.tar.xz
sha256sum -c ubuntu-pipa-plasma-YYYYMMDD.tar.xz.sha256    # 必须显示 OK
tar -xJf ubuntu-pipa-plasma-YYYYMMDD.tar.xz
 

9.4 解压后目录结构

进入解压目录,应包含:
表格
文件用途
silicium.img Mu-Silicium UEFI → 刷入 boot_b
ubuntu_esp.raw EFI System Partition → 刷入 rawdump
ubuntu_boot.raw Linux Kernel / initramfs → 刷入 cust
ubuntu_rootfs.raw Ubuntu 根文件系统 → 刷入 linux
vbmeta.img 禁用 AVB 验证 → 刷入 vbmeta_b
flash.sh 单系统刷写脚本
flash-multiboot.sh 多系统刷写脚本

十、刷写流程

10.1 安全策略:Slot-Specific 操作

⚠️ 核心原则: 仅修改 Ubuntu 所在 Slot(B),完整保留 Android Slot(A)。
上游 flash-multiboot.sh 默认行为:
  • ERASE_DTBO=yes → 擦除 dtbo_ab(影响双 Slot)
  • FLASH_VBMETA=yes → 刷入 vbmeta_ab(影响双 Slot)
首次安装必须覆盖此默认行为。

10.2 步骤一:单独处理 Ubuntu Slot 的 DTBO

bash
adb reboot bootloader
fastboot devices
fastboot getvar product        # 再次确认 pipa
fastboot getvar current-slot   # 再次确认当前 Slot

fastboot erase dtbo_b
 
若失败(partition not found / FAILED),停止。不要改为 dtbo_ab

10.3 步骤二:单独刷入 Ubuntu Slot 的 vbmeta

bash
fastboot flash vbmeta_b vbmeta.img
 
若失败,停止。不要改为 vbmeta_ab,避免破坏 Android AVB。

10.4 步骤三:执行 Slot-Specific 多系统刷写

bash
BOOT_SLOT_TARGET=boot_b \
ROOTFS_PARTITION=linux \
ERASE_DTBO=no \
FLASH_VBMETA=no \
./flash-multiboot.sh
 
环境变量说明:
表格
变量作用
BOOT_SLOT_TARGET boot_b UEFI 仅写入 Slot B
ROOTFS_PARTITION linux rootfs 写入独立 linux 分区
ERASE_DTBO no 禁止脚本擦除 dtbo_ab
FLASH_VBMETA no 禁止脚本刷入 vbmeta_ab
预期完成的映射:
表格
镜像文件目标分区
silicium.img boot_b
ubuntu_esp.raw rawdump
ubuntu_boot.raw cust
ubuntu_rootfs.raw linux

10.5 备选:完全手动刷写

如需完全手动控制(假设 Android=A, Ubuntu=B):
bash
fastboot erase dtbo_b
fastboot flash vbmeta_b vbmeta.img
fastboot flash boot_b silicium.img
fastboot flash rawdump ubuntu_esp.raw
fastboot flash cust ubuntu_boot.raw
fastboot flash linux ubuntu_rootfs.raw
fastboot set_active b
fastboot reboot
 

十一、首次启动

11.1 启动流程

plain
Qualcomm Bootloader → Slot B → Mu-Silicium UEFI → ESP → Linux Kernel → Ubuntu
 
首次启动可能较慢,属正常现象。

11.2 初始账户

  • 用户名: root
  • 密码: root

11.3 首次配置向导

正常应自动进入桌面并弹出初始化向导:
  1. 创建普通用户
  2. 设置用户密码
  3. 设置 hostname
  4. 加入 sudo 组
  5. 重启生效

11.4 系统更新

bash
sudo apt update
sudo apt upgrade
 
镜像已配置 pipa-pkgs 源,设备专属驱动与固件通过 APT 维护,无需手动编译。

十二、系统验证

建议按以下顺序逐项验证:

12.1 GPU 加速

bash
sudo apt install -y mesa-utils
glxinfo -B | grep "OpenGL renderer"
 
预期: AdrenoFreedreno
异常: llvmpipe(软件渲染,桌面卡顿)

12.2 Wi-Fi

bash
nmcli device status        # 应看到 wifi 设备
iw dev

# 若异常:
sudo dmesg | grep -iE 'ath11k|wifi|wlan|firmware'
 

12.3 触摸屏

bash
sudo apt install -y libinput-tools
sudo libinput list-devices | grep -A20 -i touch
 

12.4 蓝牙

bash
bluetoothctl show
bluetoothctl power on
bluetoothctl scan on
 

12.5 音频

bash
wpctl status
aplay -l
 

12.6 电池

bash
upower -e
upower -i $(upower -e | grep BAT | head -1)
 

12.7 休眠(最后测试)

勿在基础功能验证前测试休眠。 移动设备 Linux 最常见问题为 Suspend/Resume、充电、温控与耗电。

十三、双系统切换

本方案利用 A/B Slot 作为系统选择器,非 GRUB 图形菜单。

13.1 Android → Ubuntu

在 Android 端:
bash
adb reboot bootloader
 
在 PC 端:
bash
fastboot set_active b
fastboot reboot
 

13.2 Ubuntu → Android

在 Ubuntu 端(如支持):
bash
sudo reboot bootloader
 
或手动:
plain
关机 → Power + Volume Down → 进入 Fastboot
 
在 PC 端:
bash
fastboot set_active a
fastboot reboot
 

十四、维护与注意事项

14.1 关闭 HyperOS 自动 OTA

⚠️ 双系统下 HyperOS OTA 会覆盖 Ubuntu Slot!
Android A/B OTA 机制会写入非当前 Slot,即:
  • Android 在 Slot A 时,OTA 会写入 Slot B
  • Slot B 当前为 Ubuntu → OTA 将覆盖 Ubuntu
必须关闭:
  • 自动下载系统更新
  • 自动夜间安装
  • 手动 OTA 前需备份 boot_b,OTA 后重新刷入 Ubuntu

14.2 被 Ubuntu 占用的 Android 分区

以下分区原内容已被 Ubuntu 替代:
表格
分区Ubuntu 用途是否可恢复
rawdump EFI System Partition 需原始 rawdump.img 备份
cust Ubuntu /boot 需原始 cust.img 备份
其余 Android 核心分区(boot_adtbo_avbmeta_asystemvendoruserdata)保持原状。

14.3 镜像混用禁忌

严禁混用不同版本的镜像文件:
表格
旧方案(2024-2025)当前方案(2026 PAD6-DEV)
6.12 boot.img silicium.img
ubuntu.img ubuntu_rootfs.raw
pipa_dualrole.img ubuntu_esp.raw + ubuntu_boot.raw
一次安装必须使用同一 Release 内的完整配套文件。

十五、故障恢复

15.1 Ubuntu 启动失败(Android 仍正常)

plain
Power + Volume Down → Fastboot
 
bash
fastboot set_active a
fastboot reboot
 
设备未砖,仅 Linux Slot 需排查。

15.2 Android Slot 被误操作

假设 Android 为 Slot A:
bash
fastboot flash boot_a boot_a.img
fastboot flash dtbo_a dtbo_a.img
fastboot flash vbmeta_a vbmeta_a.img
fastboot set_active a
fastboot reboot
 

15.3 完全救砖

使用预先准备的国行 Fastboot ROM 完整恢复。
⚠️ 绝对禁止在以下状态下重新锁 BL:
  • Linux 分区仍存在
  • 修改后的 GPT 未恢复
  • Slot 内容非原厂
只有满足以下条件后方可考虑锁 BL:
  1. 完整恢复原厂 GPT
  2. 完整恢复双 Slot 原厂内容
  3. 完整刷入官方国行 ROM
  4. 确认 Android 正常启动

十六、最终分区结构

plain
┌──────────────────────────────────────┐
│ Qualcomm / Xiaomi Firmware           │
├──────────────────────────────────────┤
│ Android system / vendor / super      │
├──────────────────────────────────────┤
│ boot_a                               │
│ └── HyperOS Boot                     │
├──────────────────────────────────────┤
│ dtbo_a                               │
│ └── Android DTBO                     │
├──────────────────────────────────────┤
│ vbmeta_a                             │
│ └── Android AVB                      │
├──────────────────────────────────────┤
│ boot_b                               │
│ └── Mu-Silicium UEFI                 │
├──────────────────────────────────────┤
│ dtbo_b                               │
│ └── Linux DTBO (已擦除/替换)          │
├──────────────────────────────────────┤
│ vbmeta_b                             │
│ └── Linux / Disabled Verification    │
├──────────────────────────────────────┤
│ rawdump                              │
│ └── Ubuntu EFI System Partition      │
├──────────────────────────────────────┤
│ cust                                 │
│ └── Ubuntu /boot (Kernel + initramfs)│
├──────────────────────────────────────┤
│ userdata ≈ 160 GB                    │
│ └── HyperOS Data                     │
├──────────────────────────────────────┤
│ linux ≈ 80 GB                        │
│ └── Ubuntu 26.04 RootFS              │
└──────────────────────────────────────┘
 

十七、核心原则

表格
#原则说明
1 先查 Slot 再刷写 fastboot getvar current-slot 每次操作前确认,绝不凭记忆
2 警惕 *_ab 命令 boot_abdtbo_abvbmeta_ab 会同时修改双系统,首次安装避免使用
3 分区数值来自本机 print free 的输出不可套用教程示例
4 Linux 分区命名为 linux 与上游 ROOTFS_PARTITION=linux 兼容,勿自定义
5 非原厂状态不锁 BL 双系统运行期间 Bootloader 永久保持 unlocked

附录:快速参考命令

bash
# 验证设备
adb shell getprop ro.product.device
fastboot getvar product
fastboot getvar current-slot
fastboot oem device-info

# 备份(Recovery 环境)
adb exec-out "dd if=/dev/block/by-name/boot_a bs=4M" > boot_a.img

# 分区调整(parted 交互)
(parted) unit GB
(parted) print free
(parted) rm <number>
(parted) mkpart userdata <start> <end>
(parted) mkpart linux <start> <end>

# Slot-Specific 刷写
fastboot erase dtbo_b
fastboot flash vbmeta_b vbmeta.img
BOOT_SLOT_TARGET=boot_b ROOTFS_PARTITION=linux ERASE_DTBO=no FLASH_VBMETA=no ./flash-multiboot.sh

# 系统切换
fastboot set_active a    # Android
fastboot set_active b    # Ubuntu
 

文档声明: 本移植文档基于 PAD6-DEV/Ubuntu-pipa 上游项目整理。刷机存在风险,操作前请确保已完整理解每一步含义,并做好全部备份。作者不对因操作不当导致的设备损坏或数据丢失负责

posted on 2026-08-30 07:01  GKLBB  阅读(43)  评论(0)    收藏  举报