nasm实现的用vmware运行自做的linux启动盘的引导代码
<P>当计算机电源被打开后,它会先进行加电自检(POST),然后寻找启动盘,如果是选择从软盘启动,计算机就会查找软盘的0面0磁道1扇区,如果发现它以0xAA55结束,则BIOS认为它是一个引导扇区,然后BIOS就会把引导扇区的前512字节的引导代码拷贝到内存的0000:7c00处并将控制器彻底交给这段引导代码。</P><P><STRONG>简单的引导代码如下所示:</STRONG></P>
<P><div class="codetitle"><span><U>复制代码</U></span> 代码如下:</div><div class="codebody" id="code99293"> <BR>org 07c00h ;告诉编译器加载到07c00h处 <br><br>mov ax, cs <BR>mov ds, ax <BR>mov es, ax <br><br>call DispStr ;调用显示字符串函数 <br><br>jmp $; 无限循环 <br><br>DispStr: <BR>mov ax, BootMessge <BR>mov bp, ax <BR>mov cx, 16 <BR>mov ax, 01301h <BR>mov bx, 000ch <BR>mov dl, 0 <BR>int 10h <BR>ret <BR>BootMessge: db "hello, OS world!" <BR>times 510 - ($ - $$) db 0 <BR>dw 0aa55h <BR></div><br><br>这段代码时用nasm写的,它类似于masm的语言。org 07c00h命令就是将命令后面的代码中的偏移地址都加上07c00h,这样程序就相当于在0000:7c00出执行了。按书中所讲的,用命令nasm bootsector.asm -o boot.bin生成引导代码boot.bin,然后将boot.bin写入软盘的0面0磁道1扇区就可以了。问题就来了,我没有软盘怎么搞,不过在wmware虚拟机中貌似可以用软盘的映像文件来启动,所以就想到自己制作一个映像文件来代替软盘来作为启动盘,不过怎么创建这个映像文件呢?</P>
<P>以前记得用<STRONG>linux下的dd命令做过linux的启动盘,dd应该是可以制作的</STRONG>,于是在网上找了下dd制作映像文件,果然是可以的,制作方法如下:</P>
<P>1 先制作一个空的软盘映像文件diska.img(1.44Mb的软盘映像文件):</P>
<P>dd if=/dev/zero of=diska.img bs=512 count=2880</P>
<P>2 制作一个包含boot.bin的映像文件boot.img:</P>
<P>dd if=boot.bin of=boot.img bs=512 count=1</P>
<P>3 将diska.img中1个扇区后面的数据拷贝到boot.img的后面</P>
<P>dd if=diska.img of=boot.img skip=1 seek=1 bs=512 count=2879</P>
<P>这样就做成了一个大小为1.44Mb的包含引导代码的映像文件。</P>
<P>后面的事就好办了,直接在wmware创建一个空的虚拟机,在设置中将Floppy的路径设置为上面制作的引导扇区的路径就ok了,如下图那样:</P>
<P align=center><IMG alt="" src="https://img.jbzj.com/file_images/article/201304/201304241207162.jpg"></P>
<P>设置Floppy连接,断开CD/DVD连接,启动虚拟机就可以看到下面的画面了:</P>
<P> </P>
<P align=center><IMG alt="" src="https://img.jbzj.com/file_images/article/201304/201304241207163.jpg"></P>
<P>总结:这个小的代码的编写和运行还是能让自己对系统启动有一个更深的认识,不过有个不懂的就是<STRONG>怎么用ISO镜像文件启动,怎么将引导代码写入ISO镜像文件</STRONG>,依然没有找到很好的方法解决。</P>
<div class="art_xg">
<b>您可能感兴趣的文章:</b><ul><li>PHP程序员玩转Linux系列 nginx初学者引导</li><li>Linux的引导过程剖析</li><li>Linux管理员手册(5)--引导和关机</li><li>linux系统命令笔记整理</li><li>Linux系统用户管理命令小结</li><li>Linux系统清除缓存的方法总结</li><li>linux系统sudo命令详解</li><li>Linux系统删除文件夹和文件的命令</li><li>linux系统下dd命令的使用方法</li><li>Linux系统中sudo命令的十个技巧总结</li><li>linux引导系统的方法分析</li></ul>
</div>
</div>
<!--endmain-->
頁:
[1]