基于既有的PC知识,我们可以了解到,系统引导的第一步是读取硬盘的MBR(主引导记录,位于0头0道1扇区,占据512字节),再通过MBR中的Boot Sector小程序来得知哪一个分区是引导分区(被激活),再读取位于这个分区的启动扇区中的小程序(也是512字节),然后加载stage2以引导内核。
用过Linux的应该知道,用dd命令dump出启动扇区的这512字节,放到Windows分区再加入boot.ini就可以启动GRUB,然后GRUB读取menu.lst以启动Linux系统内核(kernel/initrd)或启动其它的bootloader(chainloader),那么OSX86(这里特指OSX86非而真正的Mac)是怎样的呢?
由于真正的Mac使用EFI而非BIOS,所以它的启动过程和PC是不一样的,那么要在PC上安装OSX,就必须修改引导程序以符合PC的启动过程。
在JaS/ToH之类的破解版光盘里,我们可以看到,在/usr/standalone/i386文件夹中有几个boot*文件,一个cdboot和一个chain0文件。而在原版光盘的这个文件夹中只有boot.efi文件。boot.efi对于PC是没法用的,能用的是破解的那几个文件。
chain0大家很熟悉了,512字节,刚好可以写入启动扇区,但实际上并不是这样,写入启动扇区的并不是chain0,而是boot1h,我想chain0是为了专门从Windows菜单启动而写的。而boot这个文件(它有几十KB),则是boot1h所要引导的文件(我们可以用startupfiletool来安装它),但它被写到哪里去了呢?我们在硬盘上找不到这个文件,我想它被startupfiletool写到某个我们不知道的扇区去了,而并不在文件系统里面,这样做是可以启动的(可见作者用了点小心思)。
那么我们大致可以了解,OSX86启动的过程就是:
BIOS--MBR--(ntldr或grub或chain0或tboot)--boot1h--boot--mach_kernel
最近的PC EFI只是替代了boot以实现EFI欺骗,boot1h我们还是需要。
了解了这个过程,我们就可以了解cracker们到底做了哪些事情。对于安装/修复OSX86的引导程序,就可以有一个比较清晰的脉路了。
首先,我们来了解一下如何把引导程序安装到分区中去:
第一步:
diskutil list
这个命令显示所有分区列表,从这里我们可以知道我们的OSX86安装的分区编号,如disk1s1
第二步:
diskutil unmount /Volumes/volume_name
把要安装bootloader的分区卸下(×)。
第三步:
dd if=/usr/standalone/i386/boot1h of=/dev/rdisk1s1 bs=446 count=1
将boot1h写入启动扇区,这个命令对于Linux用户应该很熟悉。
第四步:
startupfiletool /dev/rdisk1s1 /usr/standalone/i386/boot
将boot文件写入(某个我们不知道的扇区,安装PC EFI时也用到这句,只是换了文件名)。
第五步:
bless -device /dev/disk1s1 -setBoot -verbose
做一些启动方面的设置。
还有两个命令(×):
diskutil mount /dev/disk1s1
bless -mount /Volumes/volume_name -setBoot -verbose
这就是安装OSX86 bootloader的基本过程,但是有什么用呢,明白了这个,你就明白了如何安装/修复Darwin bootloader,虽然这不如Windows的fdisk /mbr和fixmbr那么简单,也不如grub的setup那么好用,但以后如果出了引导方面的问题,你也可以修复了不是吗。
而且,还有一个用处,那就是在硬盘上没有OSX的情况下硬盘安装OSX,不过没有Linux那么牛可以纯硬盘安装,我们还是需要有一张OSX启动光盘的,可能你要问了,我既然有OSX光盘干嘛还要硬盘安装?不过你想想看,如果你只有Tiger的光盘,Leopard还没有刻盘,但可以硬盘安装Leopard,那不是很爽吗?或者你只有Live盘也行啊。
这种安装方法称为恢复安装,指的是用OSX1(比如Tiger)的光盘启动,再用安装程序的磁盘工具恢复下载好的OSX2(比如Leopard)镜像到一个分区,再从这个分区启动OSX2的安装程序,将OSX2安装到另一个分区。本论坛有人提过这种安装方法,但他忽略了一个最重要的步骤,那就是首先要使恢复的目标分区能够引导(我试过仅仅恢复光盘镜像 是不行的),而本篇文章讲到的正是这一点。
关于具体的安装步骤,请看这里(精力有限,我就不细说了):
http://forum.osx86scene.com/viewtopic.php?f=16&t=209
或这里:
http://www.sxhouse.org/bbs/announce/announce.asp?BoardID=112&ID=95716&Aupflag=1&Anum=1
不过要注意,一般来说,安装破解版的镜像方便一点,不过安装原版的镜像也行,但注意恢复完成后不要重启,要先破解目标分区上的文件(比如用BrazilMac-9a581-Patch中的9a581-patch.sh),然后重启,从目标分区启动安装程序,安装完成后也不要重启,再用9a581PostPatch.sh破解。
另外要注意的是,你使用的bless工具必须是破解过的(原版有这个文件但是不要用),而且要对应操作系统版本,如果你用Tiger光盘启动,不要拿Leopard的bless来用,是用不了的。在JaS版的Tiger光盘中,它在/usr/sbin/文件夹中,startupfiletool也在这里。在ToH版的Leopard光盘中也有这些工具,但它们放在/usr/misc/文件夹中(当然我想几乎不会有人用Leopard的光盘来硬盘安装Tiger)。
这不是一篇很好懂的文章,不是拿来就用的教程,要想完全搞明白还得自己学习。
/usr/standalone/i386文件夹中各个文件的作用:
boot 用startupfiletool写到OSX86所在分区的某个未知扇区,由boot1h引导它。
boot0 用dd命令写446字节到OSX86所在硬盘的MBR,可以修复Windows的Bootloader。
boot1h 用dd命令写446字节到OSX86所在的HFS(+)分区,可以修复OSX86启动扇区。
boot1u 可以修复OSX86所在的UFS分区的启动扇区。(由于没有UFS分区,我没有尝试。)
cdboot 用于制作启动光盘,用法请参考BrazilMac-9a581-Patch中的9a581-patch.sh文件。
chain0 用dd命令写446字节到OSX86所在硬盘的MBR,可以安装/修复Darwin Bootloader(成为系统默认引导器)。
写这篇文章同时参考了这些文章:
http://forum.osx86scene.com/viewtopic.php?f=16&t=1789
http://www.chinaz.com/Server/Linux/0RQ51332007.html
http://blog.chinaunix.net/u/4329/showart_402894.html
http://cimgoo.com/diy/2007/0706/article_35.html
[
本帖最后由 pappplus 于 2007-11-29 16:45 编辑 ]