从0开始制作一个简单的OS(bochs bios bximage)

 

1.      安装硬件环境模拟器bochs------------Ubuntu下源码安装bochs(裸机纯硬件)

 

Bochs是一个x86硬件平台的开源模拟器。它可以模拟各种硬件的配置。Bochs模拟的是整个PC平台,包括I/O设备、内存和BIOS。更为有趣的是,甚至可以不使用PC硬件来运行Bochs。通过改变配置,可以指定使用的CPU(386486或者586),以及内存大小等。Bochs是电脑里的“PC”。

 

安装编译工具和依赖库

bochs是由C++编写的,我们要安装相应的编译环境build-essential .如果要图形界面,安装xorg-dev.

sudo apt-get install build-essential

sudo apt-get install xorg-dev

sudo apt-get install libgtk2.0-dev

 

编译安装

$ apt-get sourcebochs //下载源码

$ cd bochs-2.5.1

$ ./configure  --enable-debugger  --enable-disasm

$ make

$ make install

NOTE:若出现not reference error,一般是因为没有在makefile中加入相关的库,直接加入库名即可;

若出现not command error安装相关的工具apt-get install即可。

 

2.      准备bios(BIOS-bochs-latest)

Bochs 安装后相当于准备好硬件了.机器启动的时候,首先进入rom中的bios。因此需要rom bios image.

$ cd bochs/bios

$ make 

ERROR:出现/bin/bash: iasl command not found.

解决方法: apt-getinstall iasl.

将生成的BIOS-bochs-latest复制到/usr/local/share/bochs/目录下。

 

3.      准备虚拟磁盘/软盘(a.img)

Bochs已经安装配置完毕,硬件方面已经有了一个计算机,操作系统需要写在磁盘里,所以还需要一个磁盘,在Bochs的组件中,有一个工具叫做bximage,它不但可以生成虚拟软盘还可以生成虚拟硬盘,我们称他们为磁盘映像。

$ bximage

 按照提示输入相关参数即可。

 

4.      配置bochs的相关参数(修改bochsrc配置文件)

配置CPU Memory、磁盘、bios rom imagemousekeyboard map等信息。

$ cp  .bochsrc  ./bochsrc

$ vi bochsrc

 Config_interface:textconfig

Display_library: x

Romimage: file=/usr/local/share/bochs/BIOS-bochs-latest (bios文件夹下 make生成的)

Vgaromimage: file=/usr/share/vgabios/vgabios.binbios文件下 make生成的)

floppya:1_44=a.img, status=inserted(软盘a.img是由步骤3生成的

boot:floppy

log:bochsout.txt

mouse:enabled=0

keyboard_mapping:enabled=1,map=/usr/share/bochs/keymaps/sdl-pc-us.map

display_library: sdl

 

5.      制作一个最简单的操作系统(boot.bin)

完成上述操作后,就可以启动bochs了。

$ bochsrc

选择2 ,输入加载的配置文件bochsrc;选择6,启动bochs.

因为我们还没有操作系统在我们的虚拟磁盘floppya,因此还要制作一个简单的操作系统程序。

 

代码参考网址: http://www.cnblogs.com/JohnShao/archive/2011/06/11/2078419.html

 

org    07c00h                ; tell thecompiler that the program is loaded at 7c00

  mov   ax, cs

  mov   ds, ax

  mov   es, ax

  call   DispStr              ; callthe example about string display

  jmp   $                  ; unlimited loop

 DispStr:

   mov   ax, BootMessage

   mov   bp, ax                ; ES:BP =address of string

   mov   cx, 16                ; CX =length of string

   mov   ax, 01301h            ; AH =13, AL = 01h

   mov   bx, 000ch           ; page num = 0 (BH= 0), red word with black backgroud (BL = 0ch, highlight)

   mov    dl, 0

   int   10h                  ; breakat 10h

   ret

 BootMessage:           db     "Hello, OS World!"

 times   510-($-$$)     db     0   ; fill the remaining space to the number of the binary code reach 512bytes

 dw    0xaa55                     ; end

 

 

 

要用NASM编译上述代码,首先要安NASM,然后编译。

sudo aptitude install nasm

nasm boot.asm-o boot.bin

我们就得到了一个512字节的boot.bin

实际上,这只是一个引导扇区。当BIOS检查第一个扇区,发现以0xAA55结束,BIOS就认为这是一个引导扇区。“一旦BIOS”发现了引导扇区,就会将512字节的内容装载到内存地址0000:7c00处,然后跳转到0000:7c00处将控制权彻底交给这段引导代码。到此为止,计算机不再由BIOS中固有的程序来控制,而变成由操作系统的一部分来控制。

 

6.      将程序boot.bin写入磁盘a.img的第一个扇区,启动bochs

使用软盘绝对扇区读写工具这个文件写到一张空白软盘的第一扇区:

dd if=boot.bin of=a.img bs=512count=1 conv=notrunc

 

输入命令:

bochs –f bochsrc,就会显示运行结果“helloworld”。

 

你可能感兴趣的:(从0开始制作一个简单的OS(bochs bios bximage))