MateBook E GO 在保留Windows下刷Android 双系统

岑珉 发布于 2026-09-11 1428 次阅读


本教程基于 vahiru/gaokun-android 项目 截至 7d4bf94 commit,本教程走 installer-lib.sh 的 alongside 模式,在未分配空间里建 Android 分区,完全保留 Windows。

本教程已过时,官方已有简单方便安装的安装器,教程参考此处,不过我尝试用新安装器给朋友的EGO安装双系统时遇到了网络环境问题,用了多种方法也无法解决。如果你有相同情况可以等待官方优化,或者将仓库退回到7d4bf94后依照以下路径安装。

#退回到7d4bf94:在步骤3.1 git clone后
git reset --hard 7d4bf94

视频教程:华为 MateBook E GO 8cxgen3刷Windows与安卓双系统教程_哔哩哔哩_bilibili

注意,操作需谨慎,执行任意代码前请保证你已充分理解该代码用途与影响。

一、前期准备工作

  • TYPEC拓展坞和一套键鼠(以防有时自带键盘抽风连不上)
  • 准备两个U盘,至少一个USB3.0规格的32G以上的U盘

1.1 需要的文件

  1. Ubuntu ARM64 Live CD U盘(使用ubuntu-24.04.4-preinstalled-desktop-arm64+gaokun3.tar.xz烧录)
  2. 前往 vahiru/gaokun-android Release 下载super.img.zst boot.img
  3. 下载 systemd-bootaa64.efi
  4. (可选)下载CNBYDJ PE创建winpeU盘以备不时之需

1.2 备份(重要!!)

利用DiskGenius备份分区表和备份分区到镜像文件功能,将分区表和SYSTEM(EFI)、WINRE、ONEKEY、WINPE这几个分区备份并妥善保存到其他位置以便之后还原

1.3 烧录操作U盘

利用rufus将ubuntu-24.04.4-preinstalled-desktop-arm64+gaokun3.tar.xz解压出的 img文件 通过rufus等软件烧录至你的U盘。烧录完成后在U盘的未分配空间创建一个exfat格式的分区,将super.img.zst和boot.img拷贝进这个分区。

(可选)为你的另外一个U盘烧录CNBYDJ PE

1.4 关闭安全启动(Secure boot)

彻底关机后,开机并狂按F2进入BIOS设置,关闭安全启动,按F10保存并重启。

补充:开机按F12是进入启动菜单

1.5 为安卓腾出空间

利用DiskGenius调整分区大小,根据你个人喜好与磁盘状态在分区后部的空间里填入你想要分配给安卓系统的磁盘空间大小(至少78G)。如果你只有一个操作系统分区,则可以用Windows自带的压缩卷或进入CNBYDJ PE后通过DG调整分区即可。

二、进入 ARM64 LINUX 环境准备文件

开机狂按F12在启动菜单选择并进入你的ARM64 LINUX LIVEU盘。刚开始会有Ubuntu初始化的引导,跟着完成就好。

2.1 文件准备

确保联网后打开终端,安装基本工具

sudo -i
apt update
apt install gdisk dosfstools android-sdk-libsparse-utils systemd-boot rsync zstd ntfs-3g

由于脚本还要求Image gaokun3.dtb ramdisk.img systemd-bootaa64.efi super.img这几个文件,我们现在开始准备这些文件

2.1.1 Image gaokun3.dtb ramdisk.img

1.创建解包脚本:

cd
wget https://blog.cenmin.top/wp-content/uploads/2026/09/1789355225-unpack-bootimg.sh_.txt
mv ./1789355225-unpack-bootimg.sh_.txt ./unpack-bootimg.sh
chmod +x ./unpack-bootimg.sh

2.解包 boot.img

cd {release文件目录(即boot.img所在的文件夹)}
/root/unpack-bootimg.sh boot.img .
期望输出:dtb_size 非 0,三个文件都写出来,file 显示:

Image → PE32+ EFI application Aarch64
ramdisk.img → gzip compressed data 或类似
gaokun3.dtb → Device Tree Blob

2.1.2 systemd-bootaa64.efi

或者直接从这里下载:systemd-bootaa64.efi放入相同文件夹,就不用下面的操作了

输入

ls -lah /usr/lib/systemd/boot/efi/ 2>/dev/null
预期输出
total 172K
drwxr-xr-x 2 root root 4.0K  9月 10 23:54 .
drwxr-xr-x 3 root root 4.0K  9月 10 23:54 ..
-rw-r--r-- 1 root root 6.0K  7月 28 23:04 addonaa64.efi.stub
-rw-r--r-- 1 root root  61K  7月 28 23:04 linuxaa64.efi.stub
-rw-r--r-- 1 root root  91K  7月 28 23:04 systemd-bootaa64.efi ****这个文件****

复制到release文件目录

sudo cp /usr/lib/systemd/boot/efi/systemd-bootaa64.efi {release文件目录(即boot.img所在的文件夹)}

2.1.3解压 super.img

cd {release文件目录(即boot.img所在的文件夹)}
zstd -d super.img.zst

三、预备测试

确认文件准备齐全

ls -lah {release文件目录(即boot.img所在的文件夹)}
# 输出看到
# boot.img
# super.img
# Image
# ramdisk.img
# gaokun3.dtb
# systemd-bootaa64.efi

3.1下载 vahiru/gaokun-android 项目 备份GPT并确认可用分区大小

cd /tmp
git clone https://github.com/vahiru/gaokun-android.git
cd /tmp/gaokun-android
bash ./scripts/partition-android.sh backup
bash ./scripts/partition-android.sh status 

预计输出:记下首扇区和末扇区

root@matebook:~/gaokun-android# bash ./scripts/partition-android.sh backup
The operation has completed successfully.
已备份到:
  -rw-r--r-- 1 root root 17920  9月 11 13:21 /root/gpt-backup/gpt-20260911-132124.bin
  -rw-r--r-- 1 root root  1772  9月 11 13:21 /root/gpt-backup/gpt-20260911-132124.sfdisk
  -rw-r--r-- 1 root root  2430  9月 11 13:21 /root/gpt-backup/gpt-20260911-132124.txt

校验备份可读:
  ✅ .bin 可解析
  ✅ .txt 非空 (33 行)
  ✅ .sfdisk 非空

⚠️ 强烈建议把这几个文件也拷一份到别的机器上。
root@matebook:~/gaokun-android# bash ./scripts/partition-android.sh status
════════ 当前分区表 ════════
  Disk /dev/nvme0n1: 1000215216 sectors, 476.9 GiB
  Model: PCIe-8 SSD 512GB                        
  Sector size (logical/physical): 512/512 bytes
  Disk identifier (GUID): 5FF5F466-62C6-4390-AAAA-5E3C37E575C8
  Partition table holds up to 128 entries
  Main partition table begins at sector 2 and ends at sector 33
  First usable sector is 34, last usable sector is 1000215182
  Partitions will be aligned on 2048-sector boundaries
  Total free space is 4062 sectors (2.0 MiB)
  
  Number  Start (sector)    End (sector)  Size       Code  Name
     1            2048          616447   300.0 MiB   EF00  EFI system partition
     2          616448          649215   16.0 MiB    0C01  Microsoft reserved ...
     3          649216       252307455   120.0 GiB   0700  Basic data partition
     4       252307456       731779726   228.6 GiB   0700  Basic data partition

════════ 文件系统视角 ════════
  NAME           SIZE FSTYPE PARTLABEL                    LABEL    MOUNTPOINT
  nvme0n1      476.9G                                              
  ├─nvme0n1p1    300M vfat   EFI system partition         SYSTEM   
  ├─nvme0n1p2     16M        Microsoft reserved partition          
  ├─nvme0n1p3    120G ntfs   Basic data partition         Windows  
  └─nvme0n1p4  228.6G ntfs   Basic data partition         Data     

════════ 未分配空间 ════════
  首扇区: 731781120  ⭐
  末扇区: 1000215182 ⭐
  大小:   127 GiB

  ✅ 足够(需要约 77 GiB)

════════ 备份 ════════
  -rw-r--r-- 1 root root 17920  9月 11 13:21 /root/gpt-backup/gpt-20260911-132124.bin

3.2 DRY-RUN测试

cd /tmp/gaokun-android
. scripts/live/installer-lib.sh
export GK3_DRYRUN=1
export GK3_SDBOOT={release文件目录(即boot.img所在的文件夹)}/systemd-bootaa64.efi

gk3_plan --disk /dev/nvme0n1 \
         --mode alongside \
         --rescue no \
         --region-start {首扇区} \
         --region-end {末扇区} \
         --esp /dev/nvme0n1p1
gk3_apply --disk /dev/nvme0n1 \
          --mode alongside \
          --rescue no \
          --release {release文件目录(即boot.img所在的文件夹)} \
          --region-start {首扇区} \
          --region-end {末扇区} \
          --esp /dev/nvme0n1p1
输出:
PLAN op=useesp path=/dev/nvme0n1p1 need_mib=150
PLAN op=mkpart name=misc      start=731781120 end=731789311
PLAN op=mkpart name=metadata  start=731789312 end=731854847
PLAN op=mkpart name=boot_a    start=731854848 end=731985919
PLAN op=mkpart name=boot_b    start=731985920 end=732116991
PLAN op=mkpart name=super     start=732116992 end=757282815
PLAN op=mkpart name=userdata  start=757282816 end=1000214527
PLANSUM mode=alongside rescue=no avail_mib=131071 fixed_mib=12452 userdata_mib=118619
输出:
PROGRESS 80 安装引导链
DRY: mount -t vfat /dev/nvme0n1p1 /tmp/tmp.xxx
DRY: 往 /dev/nvme0n1p1 写 systemd-boot、两个 Android 启动项、内核/dtb/ramdisk
PROGRESS 100 完成

四、安装安卓系统(!执行前确保你已经进行了充足备份!)

方案1 修改PARTLABEL并修复installer-lib.sh遗留bug(新方案)

(比较符合官方规范 理论上不影响OTA升级 目前相对复杂一点点点点 )

修改PARTLABEL:

# 确认 ESP 没挂载
umount /dev/nvme0n1p1 2>/dev/null || true
# 改 PARTLABEL 为 esp
sudo sgdisk -c 1:esp /dev/nvme0n1
# 让内核重新读分区表
sudo partprobe /dev/nvme0n1
# 验证
lsblk -o NAME,SIZE,FSTYPE,PARTLABEL /dev/nvme0n1

确保你的ESP分区拥有150M的空余空间(如果你是原生Windows没动过完全充裕),否则你有两个方法1.删除分区多余内容2.扩容分区。这两个方法比较简单,不明白的话AI也可以很好回答,我这里不再赘述

cd /tmp/gaokun-android
. scripts/live/installer-lib.sh

unset GK3_DRYRUN
 
export GK3_SDBOOT={release文件目录(即boot.img所在的文件夹)}/systemd-bootaa64.efi

gk3_apply --disk /dev/nvme0n1 \
          --mode alongside \
          --rescue no \
          --release {release文件目录(即boot.img所在的文件夹)} \
          --region-start {首扇区} \
          --region-end {末扇区} \
          --esp /dev/nvme0n1p1

接下来修复bug, 不过这个小bug官方应该马上就会修了,我也不想花太多时间写,直接提供一个模板思路(应该吧应该吧)

mount /dev/nvme0n1p1 /mnt/esp
nano /loader/entries/8a29534fa802480d9fbb71aa18c01d7b-android-a.conf
# 8a29534fa802480d9fbb71aa18c01d7b-android-b.conf同理记得改
nano /loader/entries/8a29534fa802480d9fbb71aa18c01d7b-android-b.conf

把原来的

options    androidboot.slot_suffix=_a androidboot.hardware=gaokun3 androidboot.selinux=permissive androidboot.veritymode=disabled androidboot.verifiedbootstate=orange androidboot.flash.locked=0 clk_ignore_unused pd_ignore_unused arm64.nopauth iommu.passthrough=0 iommu.strict=0 efi=noruntime deferred_probe_timeout=10 firmware_class.path=/vendor/firmware/ fbcon=rotate:1 loglevel=4

补充上

androidboot.boot_devices=soc@0/1c20000.pcie init=/init console=tty0

变为:

options androidboot.slot_suffix=_a androidboot.hardware=gaokun3 androidboot.selinux=permissive androidboot.veritymode=disabled androidboot.verifiedbootstate=orange androidboot.flash.locked=0 clk_ignore_unused pd_ignore_unused arm64.nopauth iommu.passthrough=0 iommu.strict=0 efi=noruntime deferred_probe_timeout=10 firmware_class.path=/vendor/firmware/ fbcon=rotate:1 loglevel=4 androidboot.boot_devices=soc@0/1c20000.pcie init=/init console=tty0

注意两个文件的options的androidboot.slot_suffix不一样

方案2 分区完成后逐个写入再修改PARTLABEL(旧方案)

(有概率影响OTA升级)

先运行一遍分个区,最后会因为识别不到ESP分区报错退出没关系

cd /tmp/gaokun-android
. scripts/live/installer-lib.sh

unset GK3_DRYRUN
 
export GK3_SDBOOT={release文件目录(即boot.img所在的文件夹)}/systemd-bootaa64.efi

gk3_apply --disk /dev/nvme0n1 \
          --mode alongside \
          --rescue no \
          --release {release文件目录(即boot.img所在的文件夹)} \
          --region-start {首扇区} \
          --region-end {末扇区} \
          --esp /dev/nvme0n1p1

接着逐个手动写入分区和修改ESP。这里我直接整理了一个脚本直接运行即可,想了解具体过程的话可以看看脚本怎么写的,不再赘述了。

不过,我更建议充分理解脚本逻辑后逐条执行,该脚本已经尽可能考虑了不同环境,但不一定能够保证适配你的设备。

cd /tmp
wget https://blog.cenmin.top/wp-content/uploads/2026/09/1789198083-run.sh_.txt
mv ./1789198083-run.sh_.txt ./run.sh
chmod +x ./run.sh
bash ./run.sh {release文件目录(即boot.img所在的文件夹)}

修改PARTLABEL:

# 确认 ESP 没挂载 umount /dev/nvme0n1p1 2>/dev/null || true # 改 PARTLABEL 为 esp sudo sgdisk -c 1:esp /dev/nvme0n1 # 让内核重新读分区表 sudo partprobe /dev/nvme0n1 # 验证 lsblk -o NAME,SIZE,FSTYPE,PARTLABEL /dev/nvme0n1等待完成后输入reboot重启即可

五、 可能遇到的一些问题

1. 进入Ubuntu live卡在加载界面

重新烧录一次U盘

2. 刷写完后进入安卓系统出现几行日志后立马重启

刷写系统步骤时出了问题,刷写时注意检查有无报错重来一次

六、 (补充)系统更新

今天想直接在系统里面从0.5.0更新到0.6.0时报错无法进行,主要原因应该是针对之前逐个分区写入的的与官方ESP要求不一致导致的,我们通过修改PARTLABEL适配。

在Ubuntu live里运行:

# 确认 ESP 没挂载
umount /dev/nvme0n1p1 2>/dev/null || true

# 改 PARTLABEL 为 esp
sudo sgdisk -c 1:esp /dev/nvme0n1

# 让内核重新读分区表
sudo partprobe /dev/nvme0n1

# 验证
lsblk -o NAME,SIZE,FSTYPE,PARTLABEL /dev/nvme0n1

确认nvme0n1的PARTLABEL为esp后返回系统更新大概率成功

此作者没有提供个人介绍。
最后更新于 2026-10-10