编写一个主引导程序
- 编写一个主引导程序,可独立运行于 X86 架构的主机(无操作系统),运行后在屏幕上打印 "Welcome to KOS."
- 这里我们需要一定的 X86 汇编基础知识,如果不懂汇编的可以参考【8086汇编基础】学习一下。
- 思路:
- 程序如何被识别为主引导程序 - 512 字节的最后 2 个字节为 0x55, 0xaa
- 如何指定程序的起始地址 - org 0x7c00
- 如何打印 - int 10
- 打印任务完成如何处理 - hlt
- 程序:boot.asm
如何验证编写的主引导程序
开发环境
- 首先需要一个 Linux 开发环境,我的是 ubuntu 20.04
- 有 vmware、WSL、SSH 远程服务器等选择,这里就不讲解如何搭建环境了
将汇编编译为机器码(nasm)
- 我们需要将编写的主引导程序(汇编)编译成可执行的二进制的机器码 - nasm 汇编编译器
- 执行命令:nasm boot.asm -o boot.bin
- 如果没有安装 nasm,可以使用 “ sudo apt-get install nasm ” 安装 nasm 汇编编译器
如何将编译好的机器码放到硬件上去执行呢?
- 我们不可能把程序烧录到实际的电脑硬件上去测试,因为这样会导致电脑原本的操作系统被破坏,造成死机
- 于是只能采样虚拟机的方式来验证编写的主引导程序
创建虚拟盘(bximage)
- 虚拟盘的创建很简单,使用命令 “bximage” 即可
- 如果没有安装 bximage ,可以使用 “ sudo apt-get install bximage ” 安装 bximage
- 下面是执行 “ bximage ” 后的具体情况
======================================================================== bximage Disk Image Creation / Conversion / Resize and Commit Tool for Bochs $Id: bximage.cc 13481 2018-03-30 21:04:04Z vruppert $ ======================================================================== 1. Create new floppy or hard disk image 2. Convert hard disk image to other format (mode) 3. Resize hard disk image 4. Commit 'undoable' redolog to base image 5. Disk image info 0. Quit Please choose one [0] 1 Create image Do you want to create a floppy disk image or a hard disk image? Please type hd or fd. [hd] fd Choose the size of floppy disk image to create. Please type 160k, 180k, 320k, 360k, 720k, 1.2M, 1.44M, 1.68M, 1.72M, or 2.88M. [1.44M] 1.44M What should be the name of the image? [a.img] a.img Creating floppy image 'a.img' with 2880 sectors The following line should appear in your bochsrc: floppya: image="a.img", status=inserted
如何将编译得到的 boot.bin 写入到软盘 a.img 中
- 使用 dd 命令,如下:
dd if=boot.bin of=a.img bs=512 count=1 conv=notrunc
- 将 boot.bin 内容写到 a.img 中,bs=512:block size 是 512 字节,count=1:写 1 个 block,共 512 * 1 个字节,conv=notrunc:,notrunc 表示不缩减输出文件, 如果存在文件,只修改相应字节的数据,如果不存在,则创建512字节的文件。
- 最终得到的这个 a.img 文件就是包含主引导程序的软盘映像了
如何使用 vmware 引导启动 a.img
- 我使用的 vmware 版本:16.2.4 build-20089737
- 不同版本之间可能存在些许差异
- 创建虚拟机
- 开启虚拟机,提示找不到操作系统,这个当然是正常的,因为我们前面选择了稍后安装操作系统
- 现在我们需要让这台新的计算机来加载我们写的主引导程序,而我们的主引导程序在软盘映像文件 a.img 中,那么 vmware 如何加载软盘映像文件呢?
- 点击“编辑虚拟机设置”->“硬件”,发现没有软盘选项,需要手动添加软盘驱动器
- 在添加好了软盘驱动器之后,接下来需要加载我们之前准备好的 a.img 映像文件
- 这时候我们再次点击“开启此虚拟机”后,成功看到了 “ Welcome to KOS. ” 打印信息
- 至此,说明我们自己编写的主引导程序被成功识别加载并运行