叮叮咚咚 发表于 2021-3-8 09:54:45

另一个uefi启动xp的可能性

本帖最后由 叮叮咚咚 于 2021-3-8 09:58 编辑

使用谷歌搜索了下相关内容,没想到,还真的到了{:1_186:}看来Google还是牛点。
原文地址:https://m.newsmth.net/article/Apple/274609?p=1#a0
08年的帖子,来自水木社区,清华大学的告知社区(感觉高上大的样子{:1_187:})虽然是Mac的实例,但是我认为在普通UEFI的PC上也是有可能的。
我已经买了Macbook Air M1,彻底放弃了x86,没法折腾了。
以下是原文与附件:
这是个windows xp/2003原生efi boot loader
他能直接从efi启动windows xp/2003
而不需要使用efi去模拟bios
他能从gpt的分区上加载windows
(但是仅限于加载.要让windows直接安装到gpt分区需要一点点的patch)

使用方法:

1.推荐使用refit.让refit来加载他.
将他复制到refit的安装目录即可.
refit的启动画面上能看到他

2.可以选择将他安装到efi的系统分区.
先在osx下使用mount_msdos命令mount上efi的隐藏的系统分区
然后在EFI目录下建立BOOT目录,然后把ntldr.efi复制到BOOT目录,并改名为BOOTIA32.efi
同时将wgl4_boot.ttf也复制到同一个目录(这个文件是可选的.没有他的话,这个程序会自动切换到文本模式)
然后再启动电脑的时候按住option,这样就能看到比平时多出来一个EFI BOOT的磁盘图标.选择这个图标即可

3.可以安装到u盘等移动设备
u盘的分区格式要是fat32.然后在u盘根目录下建立\EFI\BOOT\目录
将ntldr.efi复制到BOOT下面并改名为BOOTIA32.efi,同时也复制wgl4_boot.ttf到同一目录
同样的按照option启动,跟上面不同的是这次多出来的是个u盘的图标

4.请不要bless这个小程序
他并不能启动你硬盘上的osx
所以请不要bless他

=========================================
源代码编译环境:

当然是要windows的机器
编译器需要vs 2008
然后要安装edk并且建立EDK_SOURCE环境变量,不要使用edk2,因为edk2的几个结构定义跟windows的重复了
(edk需要修改Foundation\Include\Ia32\efibind.h中的
typedef char int8_t,改成typedef signed char int8_t)
然后还需要安装wdk(Windows Driver Kit)

恩...其实我只是使用了edk和wdk里面的几个头文件,只是需要几个结构定义而已
并没有链接他们的lib文件.

如果有人想要把他移植到*nix或者osx下面
只是需要修改代码里面的无数vc格式的inline asm
然后port几个头文件即可

(我当初计划是有4个不同的版本x86_efi,x86_bios,x64_efi,x64_bios,不过只是实现了第一个)
代码的svn在这里
http://tamiaode.3322.org/svn/ntldr/

=========================================
怎么直接把windows安装到gpt分区:

大概的说windows的安装过程是这样的:
I.patch需要的文件.重新定制一个windows的安装盘
II.插入上一步制作的安装盘进行第一步的文本模式安装,这一步完了会重启
III.重启之后直接使用这个efi的boot loader接着图形模式安装
    图形模式安装的过程是没有显示器输出的.所以需要配置无人值守安装
    并且把显卡的驱动集成到windows的安装盘里面,再这个阶段就自动的把显卡驱动装好
IV.图形模式安装完成重启以后显卡驱动就能工作了.显示器就有输出了,windows就能使用了

具体的过程:
1.首先需要检查patch disk.sys这个文件
如果是xp系统或者没打sp1的2003则需要patch disk.sys中的一个字节,
很简单..加载上disk.sys的符号表.就能看到一个叫DiskDisableGpt的变量.
他的值是1,把他改成0就行了..
不出意外可以直接搜索04 C1 EB 78 F9 4C D2 11 BA 4A 00 A0 C9 06 29 10 01
把最后一个01修改成00
如果是2003 sp1以及sp2还有将来的sp3等等则不需要patch,他们的disk.sys已经默认支持gpt分区了

2.需要patch安装光盘上的setupdd.sys
这个文件是windows文本模式安装的关键文件
他需要patch的地方很多
具体的细节在附件里面

简单的讲有两种地方需要patch
第一就是与gpt有关的判断.有2个地方
一个是不让你安装到gpt分区上
另外一个是不让你把一个mbr的硬盘切换到gpt格式上去
(按S能切换分区格式,前提是这个硬盘上的所有分区都被删除了)

另外一个地方就是关于系统分区的判断
我的做法是让系统分区始终等于要安装的分区
(系统分区是说boot.ini,ntldr,ntdetect.com以及hal.dll要被安装到的分区)
(安装分区当然就是windows被安装的分区)

3.如果是sata的硬盘.则需要安装ahci驱动
(当然也可以修改boot loader让sata工作在ide模式下)

efi boot的时候sata是工作在ahci模式下的
而使用csm模拟bios的时候sata是工作在ide模式下的
intel芯片组的模式切换可以通过写pci config space offset 0x90的方式切换(请查看datasheet)

ahci模式并不是一开始就需要的
因为文本模式的安装还是需要csm来引导windows的安装光盘的
(当然也可以重写一个efi版的setupldr)
所以文本模式的安装并不需要ahci
也就不用网上那些集成sata驱动的办法

需要的修改:(只是针对intel的主板)
A).将intel的iastor.sys压缩(makecab)一下放到安装光盘的i386目录下
B).在安装光盘的i386\txtsetu.sif文件的下面添加一行
    iastor.sys   = 1,,,,,,,4,0,0,,1,4
C).在安装光盘的i386\hivesys.inf文件的里面添加
HKLM,"SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\pci#ven_8086&dev_2681&cc_0106",Service,0x00000000,iastor
HKLM,"SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\pci#ven_8086&dev_2681&cc_0106",ClassGUID,0x00000000,{4D36E96A-E325-11CE-BFC1-08002BE10318}

这两行里面的ven_8086&dev_2681&cc_0106需要修改成符合你自己主板的字符串
这个字符串能在你主板的ahci驱动里面找到

然后找到
HKLM,"SYSTEM\CurrentControlSet\Services",,0x00000012
在他的下面添加
HKLM,"SYSTEM\CurrentControlSet\Services\iastor","ErrorControl",0x00010003,1
HKLM,"SYSTEM\CurrentControlSet\Services\iastor","Group",0x00000002,"SCSI miniport"
HKLM,"SYSTEM\CurrentControlSet\Services\iastor","Start",0x00010003,0
HKLM,"SYSTEM\CurrentControlSet\Services\iastor","Tag",0x00010003,25
HKLM,"SYSTEM\CurrentControlSet\Services\iastor","Type",0x00010003,1

4.集成芯片组,ahci和显卡的驱动到windows的安装光盘
普通的集成方法即可(放到$OEM$\$1目录并使用OemPnPDriversPath无人值守安装选项)

5.准备无人值守安装的应答文件winnt.sif
需要FullUnattended,并且要提供全部pages的全部选项的答案
因为安装过程中你是看不到显示器输出的..

6.如果有多个显卡多个显示器最好拔下来只是剩下一个.

安装过程是及其麻烦的.
所以这个东西的实际使用价值几乎是0
有兴趣的同学可以玩玩

===============================================
关于这个小程序:

windows的boot loader大部分的功能我都实现了
没有实现的有
1.休眠唤醒
2.sdi ramdisk
3.wim ramdisk
4.从网络启动
5.从cdfs,etfs,udfs启动

前两个功能的实现可以参考我写的另外一个bios版的ntldr
http://tamiaode.3322.org/svn/NTLDR.pcat/

================================================
关于附件
source.zip里面是源代码

bin.zip里面是编译好的程序
EFI\
   BOOT\
               BOOTIA32.EFI------->这其实是一个efi的shell
   MICROSOFT\
               NTLDR.EFI---------->这个才是boot loader
               wgl4_boot.ttf------>图形模式下使用的字体文件
   INTEL\----------------------->这个目录下有3个分区和格式化用的程序


分区最好使用intel这个目录下的diskpart.efi文件来分区
他创建的mbr才是符合efi标准的.
windows的安装盘上的分区工具创建不鸟efi的系统分区和microsoft的保留分区
而apple创建的mbr并不是efi标准的mbr,而且apple喜欢在分区和分区之间留空间

================================================
真的只能算是个小玩具...
--



wjzj 发表于 2021-3-8 10:06:23

装上后硬件的驱动也是给问题啊

wdtx 发表于 2021-3-8 11:04:30

xp就算能装上,好多硬件都没驱动吧

叮叮咚咚 发表于 2021-3-8 11:26:53

wjzj 发表于 2021-3-8 10:06
装上后硬件的驱动也是给问题啊

本来就是折腾用的,驱动自己折腾吧{:1_186:}

叮叮咚咚 发表于 2021-3-8 11:27:10

wdtx 发表于 2021-3-8 11:04
xp就算能装上,好多硬件都没驱动吧

本来就是折腾用的,驱动自己折腾吧

lbw2007 发表于 2021-3-8 21:17:13

支持技术折腾。

当年也有人玩过,最多就是个在特定硬件+固件上能运行的玩具。XP和2003一样,只要简单修改就可以支持GPT的。但是在不支持CSM的主板上强制启动XP,即使在读条的时候不蓝屏或者卡死,也永远不会存在一个通用方案。

窄口牛 发表于 2021-3-10 09:13:04

这东西连个菜单啥的也没有,怎么告诉它我把xp安装到了哪个硬盘的哪个分区?

xingzheli 发表于 2021-5-20 16:40:29

厉害了,不知道还有多少软件支持xp。

minlearn 发表于 2021-9-11 22:09:23

这个方案还是十分有价值的。kvm架构下就需要mbr+模拟的efi,
如clover,oc,这二个的legacy方案(cdboot,boot),都可以用来直接chainloader 各大os(包括windows)的efi loader

搜索efildr20 chainload grub2

https://forums.macrumors.com/threads/win7-x64-booting-natively-via-efi-no-bios-emulation.696523/page-26

johnie_huang 发表于 2021-9-19 10:26:32

XP装这个的意义在哪里?
只是纯技术的折腾吧。

wuming520 发表于 2021-11-19 13:34:00

楼主想问一下你研究成功了吗

叮叮咚咚 发表于 2021-11-23 09:12:36

wuming520 发表于 2021-11-19 13:34
楼主想问一下你研究成功了吗

没时间折腾

wuming520 发表于 2021-11-23 09:22:42

叮叮咚咚 发表于 2021-11-23 09:12
没时间折腾

好吧还以为你成功了想知道怎么成功的

窄口牛 发表于 2024-3-11 12:02:16

本帖最后由 窄口牛 于 2024-3-11 13:17 编辑

我拿到的2013年的苹果是efi64的。苹果早期有过efi32的?
页: [1]
查看完整版本: 另一个uefi启动xp的可能性