最近稍微空闲了一点点,想把以前搞操作系统的梦实现一下,所以按照《操作系统真象还原》进行学习。
1.配置环境
我使用的是Vmware虚拟机和deepin系统,为了减少不必要的麻烦建议使用和作者一样的软件版本bochs2.6.2(试过直接apt安装但是bochsrc.disk中的一些配置已经发生改变,需要自己查阅资料进行改进)
下载&解压
下载 2.6.2版本
https://telkomuniversity.dl.sourceforge.net/project/bochs/bochs/2.6.2/bochs-2.6.2.tar.gz
解压
tar zxvf bochs-2.6.2.tar.gz
进入 解压目录
配置环境生成makefile(下面可以写到一行)
./configure \
--prefix=/your_path/bochs \
--enable-debugger \
--enable-disasm \
--enable-iodebug \
--enable-x86-debugger \
--with-x \
--with-x11
参数解析:
- --prefix=/your_path/bochs指定安装bochs的安装目录,需要根据自己的实际情况修改路径
- --enable-debugger 开启bochs自己的调试器
- --enable-disasm 使bochs支持反汇编
- --enable-iodebug 启用io接口调试器
- --enable-x86-debugger 支持x86调试器
- --with-x 使用x windows
- --with-x11 使用x11图形用户接口
编译&安装
编译bochs
make
安装
make install
报错&解决办法
遇到的报错和书上一模一样
问题1
报错信息
undefined reference to 'pthread_create'
undefined reference to 'pthread_join'
解决办法
在Makefile文件的92行末尾添加-lpthread
LIBS = -lm -lgtk-x11-2.0 -lgdk-x11-2.0 -lpangocairo-1.0 -latk-1.0 -lcairo -lgdk_pixbuf-2.0 -lgio-2.0 -lpangoft2-1.0 -lpango-1.0 -lgobject-2.0 -lglib-2.0 -lfontconfig -lfreetype -lpthread
问题2
报错信息
x.cc:37:10: fatal error: X11/Xlib.h: 没有那个文件或目录
解决方法:安装相应的库
sudo apt-get install libx11-dev ................. for X11/Xlib.h
sudo apt-get install mesa-common-dev........ for GL/glx.h
sudo apt-get install libglu1-mesa-dev ..... for GL/glu.h
sudo apt-get install libxrandr-dev ........... for X11/extensions/Xrandr.h
sudo apt-get install libxi-dev ................... for X11/extensions/XInput.h
问题3
报错信息
/usr/bin/ld: gui/libgui.a(x.o): undefined reference to symbol 'XSetForeground'
/usr/lib/x86_64-linux-gnu/libX11.so.6: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
解决办法
./configure 添加 LIBS='-lX11'
2.配置bochs
bochsrc.disk
###############################################
# Configuration file for Bochs
###############################################
# 第一步,首先设置Bochs在运行过程中能够使用的内存,本例为32MB。
# 关键字为:megs
megs: 32
# 第二步,设置对应真实机器的BIOS和VGA BIOS.
# 对应两个关键字为:romimage 和 vgaromimage
romimage: file=/usr/share/bochs/BIOS-bochs-latest
vgaromimage: file=/usr/share/vgabios/vgabios.bin
# 第三步,设置Bochs所使用的磁盘,软盘的关键字为floppy。
# 若只有一个软盘,则使用floppya即可,若有多个,则为floppya,floppyb...
#floppya: 1_44=a.img, status=inserted
# 第四步,选择启动盘符。
#boot: floppy
boot: disk
# 第五步,设置日志文件的输出。
log: log.bochsrc.disk
# 第六步,开启或关闭某些功能。
# 下面是关闭鼠标,并打开键盘。
mouse: enabled=0
keyboard_mapping: enabled=1
map=/usr/share/bochs/keymaps/x11-pc-us.map
# 硬盘设置
ata0: enabled=1, ioaddr1=0x1f0, ioaddr2=0x3f0, irq=14
# start gdb
gdbstub: enabled=1, port=1234, text_base=0, data_base=0, bss_base=0
使用bximages创建硬盘
./bximage -hd -mode="flat" -size=60 -q hd60M.img
参数解析:
- -fd 创建软盘
- -hd 创建硬盘
- -mode创建硬盘的类型,有flat、sparse、growing三种
- size 指定创建多大的硬盘,以MB为单位
- -q 以静默方式创建,创建过程不会和用户交互
启动bochs
-f 指定启动的硬盘
bin/bochs -f bochsrc.disk