异想天开

What's the true meaning of light, Could you tell me why

第2节 环境搭建

日期:2015-12-20 21:11:52
  
最后更新日期:2016-12-04 14:31:25
实现一个操作系统第一步就是搭建一个满足需求的平台。而一个良好的平台对源代的编辑,编译和查错都很大辅助性。参考其他人平台搭建经验以及个人摸索,采用linux+bochs +gcc+vi+gdb+nasm的组合。为什么采用上诉组合?简洁来说就是方便,当我仅说方便这个词时,太过笼统感觉有点忽悠。方便体现在编译快捷,而且排错高效准确。我觉得应该养成的一个习惯就是对于某些陌生的关键字要养成百度的习惯,这样来获得对它的初步印象。熟悉了,以后办事就方便些。假定你已经做好了这一步,这里我们用vi编辑源文件,使用gcc编译c语言源文件,使用nasm编译汇编语言源文件,用bochs来模拟x86的硬件平台,调试采用gdb+bochs。
下面具体介绍怎么样来配置基本环境。
1.1 安装linux环境
如果读者已经安装了一个linux系统,那么可以跳过去。你可以选择在自己电脑上安装一个真实的linux系统,也可以装在虚拟机上。这里以第一个为例,安装ubantu系统。Ubuntu系统有一个软件叫wubi.exe(截至目前,这个软件还有),就是为了方便使用windows系统的用户安装ubantu。
第一步:在ubuntu官网上下载一个ubuntu系统的镜像-ubuntu-xxx.iso。我下载的是ubuntu-12.04-desktop-i386.iso。
第二步:iso文件,也就是光盘的镜像,可以用虚拟光驱来打开,更简单的可以用解压程序打开并解压。这里我们仅仅解压wubi.exe就可以了。示意图如下:

解压出wubi.exe后,点击即可安装,完全一键操作。

1.2下载并安装nasm。在wwww.sourceforge.net里面搜索nasm,选择下载tar压缩包。
tar -xzvf nasm-2.07.tar.gz
cd nasm-2.07
./configure ;make all ; make install
这样就是用默认配置编译好nasm。汇编编译器我们选择语法与intel assemble(masm)语法类似的nasm编译器。读者可以先粗略看一下nasm手册,要强调一点,写一个小型的os需要对汇编理解。可以用汇编写出代码,当然,用汇编操作硬件的感觉是很爽的,让一台机器在你的控制下,听从你的指挥。所以为了这点学习汇编是一件不那么枯燥的事。
1.3 下载并安装bochs。在www.sourceforge.net搜索bochs,选择下载tar压缩包。
tar -xzvf bochs-2.6.tar.gz
./configure --enable-disasm --with-x11 --enable-gdb-stub
make all ; make install
若需要汇编指令级别调试,则去掉enable-gdb-stub参数,使用 --enable-debugger参数,可能需要安装gtk开发库,sudo apt-get install libgtk2.0-dev
即可。
1.4 安装freedos系统
首先在www.sourceforge.net搜索下载一个freedos虚拟软盘。写一个启动freedos虚拟盘的bochsrc文件,如下章的源码目录下的bochsrc:
[code lang="cpp"]
plugin_ctrl: unmapped=1, biosdev=1, speaker=1, extfpuirq=1, ioapic=1
config_interface: textconfig
display_library: x
memory: host=32, guest=32
romimage: file="/usr/share/bochs/BIOS-bochs-latest"
vgaromimage: file="/usr/share/bochs/VGABIOS-lgpl-latest"
boot: floppy
floppy_bootsig_check: disabled=0
floppya:1_44=freedos.img,status=inserted
floppyb:1_44=pm.img,status=inserted
[/code]
在makefile里面如下,就可以方便的编程实践:
[code lang="cpp"]
SRC:=interrupt.asm
BIN:=$(subst .asm,.com,$(SRC))

all : $(BIN)
sudo mount –t vfat -o loop pm.img /mnt/floppy/
sudo cp $(BIN) /mnt/floppy/ -v
sudo umount /mnt/floppy/
bochs -qf bochsrc

clean: $(BIN)
sudo mount –t vfat -o loop pm.img /mnt/floppy/
sudo rm -f /mnt/floppy/$(BIN)
sudo umount /mnt/floppy/

$(BIN) : $(SRC)
nasm $< -o $@
[/code]
下一节: x86汇编语言及保护模式编程
即将用到的知识:
1.汇编语言编程;推荐王爽的《汇编语言》,该书很薄,行书风格容易阅读。32位的保护模式编程可以查看《于渊自己动手写操作系统》。
2.nasm的汇编语法。这种语法和masm语法类似,但比masm语法要简洁。
知识点达标:
1.读完推荐书目一;
2.使用nasm写一个hello world。并放在虚拟软盘在freedos下执行;
3.判断你汇编语言是否达标,一个简单的方法就是你能写出一个递归的汇编程序。那么请写一个递归求斐波拉契数列的a[3];