此文档是一份用于在本项目所支持的ARM64设备上,使用特制的EDK2 UEFI固件以安装并启动Windows的教程。
在进行安装之前,请检查设备支持状态
你也可以向社区寻求帮助,QQ群, Telegram群组和Discord频道(需要科学上网)可以在主页找到。
(待添加)
对于一般用户, 建议使用UUP Dump
你可以选择使用 Latest Dev Channel build
以尝试最新的Windows功能。如果你倾向于稳定性, 请使用 Latest Release Preview build
。
请选中 Conversion options
中的 Include updates
选项, 以获取所得ISO镜像的确切版本。
如果你所用的并不是本项目(Renegade Project)维护的驱动和/或UEFI (edk2-msm), 这一章节可能对你没有帮助。
WOA-Drivers: Windows驱动
edk2-msm Releases: UEFI镜像
这一章节也许很快会被更新。我们以后应该会避免使用Dism++。
dism++_eng.7z: 用于释放Windows镜像和安装驱动。
Android platform-tools: adb 和 fastboot工具包。
你也许还需要阅读设备列表,获取一些与你的设备有关的特定文件和教程。
请不要使用Windows环境下的分区工具完成此操作。
理论上说,在Linux下使用’gparted’对’userdata’分区进行修改大小的操作,避免数据丢失是可行的,但如果你的’userdata’带有加密,请务必小心。无论如何,在进行任何操作之前请备份好你的重要数据。
你需要一个能够正常使用ADB功能的第三方Recovery (如TWRP)来完成分区大小的修改。 你还需要parted工具 (或者 gdisk)。
首先,将你的设备重启进入recovery, 使用图形界面卸载userdata分区(umount userdata partition),或者在’adb shell’中执行 umount /dev/block/by-name/userdata
(你需要解压7z压缩包以获取文件,如parted.7z
-> parted
)
接着将工具文件放入设备存储并进入ADB shell如下:
adb push parted /cache/
adb shell "chmod 755 /cache/parted"
adb push gdisk /cache/ #可选
adb shell "chmod 755 /cache/gdisk" #可选
adb shell
在进入ADB shell之后执行:
cd /cache
./parted /dev/block/sda
打印当前的分区表信息:
(parted) print
你将会看到你的设备当前的分区表信息, userdata
(一般情况下)在最后
示例如下:
.........
Number Start End Size File system Name Flags
.........
22 2048MB 122GB 120GB ext4 userdata
记下这里userdata分区的Start
(起始位置)和End
(末尾位置)的数值。
在示例中,userdata
分区的分区号为22
在不同的设备上,
userdata
的分区号很可能不一样,请务必看清楚
下面的图表分别展示了以上示例对应的分区表图示,以及进行分区操作后适合安装Windows的分区表情况。
修改 userdata
分区大小:
这里userdata
分区的大小可以自行斟酌,在本教程中以30G
为例。
(parted) resizepart 22
# 22 是userdata分区的分区号
End? [122GB]? 32GB
32GB 是新的userdata分区的末尾位置
由先前的print结果可知userdata的起始位置为2048MB = 2GB,所以新的userdata分区大小为32G - 2G = 30G.
接着创建windows分区和esp分区:
# 用于启动的esp分区
(parted) mkpart esp fat32 32GB 32.5GB
# 设置该分区为EFI启动分区,此处23为esp分区,即userdata的后一个分区
(parted) set 23 esp on
此时esp分区是从32GB开始到32.5GB结束,大小512MB
# 用于安装Windows系统的分区
(parted) mkpart win ntfs 32.5GB 122GB
此处
32.5GB
为上一个分区(esp分区)的末尾位置,而122GB
为原本的userdata
分区的末尾位置
最后退出parted
(parted) quit
安装Windows所需的分区修改已完成。回到你的手机并用recovery 格式化(format) 新的userdata
分区。 完成以后,重启进入安卓系统,以确保它依然正常工作
目前有两种建议的安装Windows的方式:
mass storage mode(大容量存储模式)
,请参阅 2.1.mass storage mode
,或是UEFI中的mass storage mode
在你的设备上无法正常运行,请参阅 2.2.将手机重启至fastboot模式,连接电脑,启动UEFI镜像:
fastboot boot <UEFI镜像的文件名>
此时手机上将出现启动菜单。 使用音量键选择UEFI Boot Menu
,接着选择USB Attached SCSI (UAS) Storage
以进入大容量存储模式。 此时你应该会听见电脑发出新设备插入的指示音。
按Windows + R
组合键,输入diskpart并回车
DISKPART> lis dis
# 这将打印出连接至你的电脑的所有磁盘信息,请找到对应你的手机的最大的一个的磁盘
DISKPART> sel dis 6
# 以磁盘6为例
DISKPART> lis par
# 这将打印出你的手机的UFS存储中LUN0的所有分区信息,请仔细检查是否正确
DISKPART> sel par 23
# 选择ESP分区,分区号请根据实际情况调整
DISKPART> format quick fs=fat32 label="System"
# 格式化ESP分区为fat32
DISKPART> assign letter="S"
# 指派驱动器号为S:\
DISKPART> sel par 24
# 选择Windows系统所在分区
DISKPART> format quick fs=ntfs label="Windows"
# 格式化为NTFS文件系统
DISKPART> assign letter="W"
# 指派驱动器号为W:\
DISKPART> exit
启动Dism++, 选择 文件 -> 释放镜像. 填入ISO文件路径 和 安装路径. 选中 添加引导 和 格式化, 然后点击 确定。
静候释放完成。
一些特定的驱动并不能使用Dism++安装, 特别是一些SM8150(SD855)使用的驱动。
你可能需要使用dism,或是使用DriverUpdater(请检查对应你所持设备的页面,也许会有相关说明)。
将来我们可能会完全避免使用Dism++。
将先前在WOA-Drivers
下载的驱动解压到一个文件夹中。打开 Dism++, 在面板上选择你的手机对应的系统(请不要选择你的PC的C盘),然后点击 驱动管理 -> 添加驱动,选择解压好的驱动文件夹,然后等待安装完成。
上面的教程已经改成在recovery中使用parted完成分区操作,这一步不需要再进行。如果你完成分区操作使用的方法与上述过程不同,你可能需要 parted
工具来修改分区名。参阅: 4.2
WOA-Drivers
中的驱动目前并没有数字签名,Windows需要开启测试模式才能正确加载这些驱动。
以管理员权限打开一个powershell终端:
cd S:\EFI\Microsoft\Boot
# S:\ 是2.1.1章节中指派的ESP分区的驱动器号
bcdedit /store BCD /set "{default}" testsigning on
bcdedit /store BCD /set "{default}" nointegritychecks on
如果你的设备需要的话,你可能需要刷入某个特定的devcfg文件,请参阅对应的设备列表。
这一章节仍需补充。
你可以 将必要的驱动注入 Windows ISO镜像中的boot.wim文件,并将所有的文件放入UFS中的一个NTFS分区中。
然而,UEFI默认无法从NTFS分区启动。 你需要下载 https://github.com/pbatard/rufus/blob/master/res/uefi/uefi-ntfs.img 并将所有文件解压到UFS上的一个EFI分区。
在进入Windows PE之后, 打开一个终端, 然后如 2.1 所述按照 diskpart
和 Dism++
的安装方法进行安装。
建设中…
你可能遇到了一个bug。在寻求帮助之前,请先尝试以下操作:
如果它依旧无法启动, 编译一个DEBUG
版本的UEFI, 拍下屏幕上的调试信息, 然后在edk2-msm仓库开一个新的issue(如果你愿意的话)。
某个分区的分区名也许含有空格,例如 Microsoft Reserved Partition
。已知Windows下的磁盘管理工具会造成这种问题(如 diskpart
和 diskmgmt
)。
有以下几种解决办法:
parted
修改有问题的分区名。分区名 和 卷标 是两个不同的东西!