欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

[原创]《一个64位操作系统的设计与实现》中的一个小坑

[原创]《一个64位操作系统的设计与实现》中的一个小坑

最近在看《一个64位操作系统的设计与实现》,书上从第七章开始需要先将U盘格式化为USB-FDD,然后在真机上软盘启动U盘里的系统,作者玩得不亦乐乎,然而作为学习的读者,这很不方便,而且,书中的系统竟然是格式化U盘为FDD并以软盘启动,但VMWARE并不支持软盘启动,现在找到了一个办法,格式化U盘为HDD并可以在VMWARE上硬盘启动U盘里的系统,只需要稍加操作即可。

附件为boot.asm和loader.asm中的代码。


按照以下步骤进行:

1、 首先用DiskGenius清空数据并格式化为HDD




2.格式化后U盘内会有很多来自DiskGenius的引导数据,这些数据可以删也可以不删,最好是删掉。


3.书本的7-1代码示例中的boot.asm修改两个部分

第一个部分是引导扇区的标志信息以及3个变量的数值,需要结合DiskGenius在“分区参数”中提供的信息来修改这些数值:



第二个部分是在函数Func_ReadOneSector中,int 13h的dl寄存器是驱动器号,由于书中是格式化为软盘,所以驱动器号为0也无所谓,但格式化为硬盘后,驱动器号是由DiskGenius决定的。

将mov dl,0改为mov dl,[BS_DrvNum]



4.使用nasm编译为boot.bin和loader.bin后,使用下面的指令将boot.bin拷贝到U盘内

dd if=boot.bin of=/dev/sdb bs=512 count=1 seek=1 conv=notrunc

由于硬盘的0号扇区是HDD引导扇区,之后才是主磁盘分区的引导扇区,所以要加上seek=1指定拷贝到U盘的1号扇区。

将loader.bin直接拷贝到U盘中。


5.用VMWARE启动U盘

先在VMWARE中找一个已关闭的虚拟机,我这里用的就是CENTOS6.1,点击“编辑虚拟机设置”->”硬件”->”添加”。


选择”硬件”->”下一步”->”SCSI”->”下一步”->”使用物理磁盘”。


选择设备“PhysicalDrive1”(或者你U盘可能在其他磁盘)->”使用整个磁盘”->”下一步”->设置一下名字->”完成”。


接着启动虚拟机,狂按F2进入Setup模式,在Boot栏的Hard Drive项里将Vmware VirtualSCSI Hard Drive(0:1)提到Vmware VirtualSCSI Hard Drive(0:0)的前面,这样就会加载U盘里的系统,而不是虚拟机自身的系统。


最后Exit->Exit Saving Changes->Yes,虚拟机会重新启动,就可以看到下图。



上传的附件 boot.asm
loader.asm

注意:上传附件及图片大小不得大于30M。

⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。

0 0 0 举报
复制成功