生成软盘镜像文件a.img的方法
Windows 平台
1. 使用WinHex软件,新建大小为1474560bytes的文件,然后保存。
2. 使用WinImage软件,新建大小为1.44MB的文件,然后保存,注意,保存的类型为“所有文件(*,*)”,文件名为“a.img”。
Linux平台
1. 使用dd命令:dd if=/dev/zero of=a.img bs=512 count=2880
Windows和linux如果安装了borchs虚拟机,则还可以通过bximage命令来生成一个镜像。
注意:以上方法中,使用winhex和dd命令生成的镜像文件是原始的二进制文件,未被格式化,但是这个软盘镜像仅仅能用来启动电脑,而不能用来存储数据。所以不能被操作系统(例如msdos,linux)识别,例如linux不能挂载。而winimage软件生成的文件是已被格式化成fat文件系统,可以储存数据,可以被linux挂载,被msdos识别。
《Orange’s 一个操作系统的实现》第三章第一节的实验笔记
如果电脑启动时,执行的是软盘上的程序,则此软盘是可启动的。判断一个软盘是否能启动,只要看*.img(泛指软盘镜像)的第一扇区的最后两个字节是否是0x55,0xAA,如果是,则可启动。怎么查看*.img?linux下可以用hexedit,Windows用winhex等。用WinHex和dd命令生成的软盘镜像的内容全是0,所以,我们需要将a.img的第一个扇区的最后两个字节修改为0X55,0XAA。
实验一:将pmtest1.bin 写入 a.img
这两天在做《Orange’s 一个操作系统的实现》第三章第一节的实验,碰到一些问题,使用dd命令将pmtest1.bin写入软盘镜像a.img,但此镜像却不能再虚拟机中运行,我是这样做的:
#生成一个空白的软盘镜像a.img
dd if=/dev/zero of=a.img bs=512 count=2880
#将pmtest1.asm编译成bin格式
nasm pmtest1.asm –o pmtest1.bin
#将pmtest1.bin 写入a.img
dd if=pmtest1.bin of=a.img bs=512 count=1 conv=notrunc
起初以为是自己写命令有问题,然后在网上找相关资料,《使用开源软件—自己动手写操作系统》是这样做的:
dd if=pmtest1.bin of=a.img bs=512 count=1
dd if=/dev/zero of=a.img skip=1 seek=1 skip=1 bs=512 count=2879
以上两种方法我试了N次都不行,最后发现,是因为生成的文件a.img是不可启动,因为在a.img的第一个扇区的最后两个字节是0x00,0x00,所以,我把这两个字节改为0x55,0xAA,在虚拟机上运行成功!还有一个问题值得注意,作者使用的NASM版本比较老,我使用的是2.8版本的,两个版本编译源代码生成的二进制文件很不一样!但在虚拟机上运行结果却是一样的。作者所用的a.img是第一章的文件,所以第一个扇区的最后两个字节已经是0x55,0xAA。作者是把代码用NASM编译成.BIN格式(二进制格式),生成的二进制中除了你写的源代码之外,不包含其他任何东西。这也意味着,程序执行时的内存映像和二进制文件映像是一样的。
本文最近访客