一直想给电脑多装几个系统,当初买来这500GB硬盘分区的时候,还特意留了一些空白空间为以后装系统用。
以前是先装xp,再装win7,双系统启动菜单自动生成(现在发现可以通过boot.ini实现,但是不知道不在bcd里面添加启动项—旧OS加载器—可以不)。最开始的时候还手工折腾过bcdedit命令行,略有成就感,后来用了VistaBootPro,现在有更好用的easybcd。
又后来加了一个ubuntu,通过在boot.ini中添加一项grub4dos的引导文件来引导ubuntu的grub2,只是这导致了windows激活失败(db……)。原因是grub4dos覆盖了激活软件释放的grldr,这个同名的激活用的文件是用来修改系统启动时从bios复制来的特殊的值,起到在bios和os之间摆一道的作用。为了搞定这个问题,找啊找,找到某人做的SLIC 2.1的BIOS,拿来直接用了,双击运行,也不需要什么研究了。这个方法俗称硬刷。
刚搞三系统的时候ubuntu还是gnome2,出了那新版界面后一直有点排斥。就这样到现在了。
最近又想折腾了,所以又学习一次,再深入一点点。总算不上系统学习……
计算机电源键或重启键按下,一个reset信号送给cpu,松下按键后开始执行第一条指令。x86的CPU一般是执行000FFFF0h处的16B跳转指令,这是从Intel 8086/8088开始的。当时的地址线就20根,最大物理内存1MB,这条指令就是在内存最高位。
跳转指令跳转到BIOS编制的地方开始执行。最开始IBM的BIOS在000FE000h(1016K)~000FFFFFh(1024K),共计8K。BIOS的主要任务是POST, initialization and boot. 最后一阶段BIOS会根据设置的顺序把控制权交给boot device,执行上面的MBR。
MBR又分446B的MBR本身+64B硬盘分区表DPT+2B有效标志(55AA)。DPT只有16B*4个主分区(扩展分区算一个主分区),此或彼处不灵活的容量限制导致了现在我还不了解的GPT。
windows MBR的主要任务貌似比较简单,就是寻找激活分区的PBR,然后运行此分区下的ntldr或者bootmgr,因为我现在的MBR就叫做Disk Genius MBR,可见我可能也可以打个自己的广告。Grub的MBR就比较大了,而且做得事也更多。
MBR做的事主要还是寻找设备文件上引导程序,也就是second-stage boot loader,一步一步交接。
另外系统刚启动时内存的访问模式是实模式,即实地址访问模式,1MB寻址空间分为640K基本内存和384K高端内存UMB。这个也是有历史遗留的,DOS基本上就是在这个模式运行。
其实我的问题是选择windows7的bootmgr还是grub4dos还是grub2,考量了这么多问题后,我觉得grub2貌似是大势所趋,未来的盟主。只是现在还不太了解grub2,还是grub4dos好用,哪管那么多大而全的问题……
grub4dos可以通过find /boot/grub/core.img发现我的两个linux系统(引导信息在逻辑分区),但是通过easybcd直接添加grub2来引导却只能发现第一个系统。这是个问题,可能也不是个问题。
以后可能要做的就是,MBR选择grub2,手动添加windows7和各个linux的启动项,再删除windows xp,xp现在只存在于虚拟机就差不多了。以后再说吧……
缺少一个经常使用linux的环境,我觉得在windows里用终端连接linux用着也不错。。。
最后贴出一点链接备查备用,还是维基百科最好用:
实模式和保护模式(附i386/x86的由来)
BIOS地址空间
计算机加电后执行的第一条指令
GRUB2介绍
【教程】关于各种USB启动模式的解读 MBR、PBR
BIOS、MBR、PBR等基础知识
wikipedia booting