1. 安装硬件环境模拟器bochs------------Ubuntu下源码安装bochs(裸机纯硬件)
Bochs是一个x86硬件平台的开源模拟器。它可以模拟各种硬件的配置。Bochs模拟的是整个PC平台,包括I/O设备、内存和BIOS。更为有趣的是,甚至可以不使用PC硬件来运行Bochs。通过改变配置,可以指定使用的CPU(386、486或者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 image、mouse、keyboard 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.bin(bios文件下 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”。