|
本帖最后由 叮叮咚咚 于 2021-3-8 09:58 编辑
使用谷歌搜索了下相关内容,没想到,还真的到了看来Google还是牛点。
原文地址:https://m.newsmth.net/article/Apple/274609?p=1#a0
08年的帖子,来自水木社区,清华大学的告知社区(感觉高上大的样子)虽然是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文件的[SourceDisksFiles]下面添加一行
- iastor.sys = 1,,,,,,,4,0,0,,1,4
- C).在安装光盘的i386\hivesys.inf文件的[AddReg]里面添加
- 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喜欢在分区和分区之间留空间
- ================================================
- 真的只能算是个小玩具...
- --
复制代码
setupdd.patch.txt
(2.9 KB, 下载次数: 25)
source.zip
(393.92 KB, 下载次数: 57)
bin.zip
(604.39 KB, 下载次数: 50)
|
评分
-
查看全部评分
|