0x0 前言
之前,我们基于github中的项目分析了linux0.11版本的源码,但是其中有些东西有些模糊,因此,我们基于吾爱破解中的文章,尝试基于bochs实现一个操作系统。
感谢大佬的帖子:从0到-1写一个操作系统-0x00-环境准备 - 『软件调试区』 - 吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn
0x1 bochs安装
下载是从如下网站中下载2.6.8版本的工具:
https://sourceforge.net/projects/bochs/files/bochs/
step1:配置
step2:编译
make
出现了如下错误:
其原因是依赖问题,补全即可:
sudo apt-get install xorg-dev
sudo apt-get install libgtk2.0-dev
又出现了如下问题:
依赖库链接不正确,以如下方式解决:
./configure --enable-debugger --enable-disasm --enable-readline LIBS='-lX11'
make此时正确运行,继续下一命令:
sudo make install
运行成功,测试bochs安装完成。
0x2 规定磁盘参数
Step1:首先创建硬盘
工具根目录创建配置文件bochsrc.disk
注意,要根据自己的路径来修改其中bios位置、键盘映射路径。
#第一步,首先设置 Bochs 在运行过程中能够使用的内存,本例为 32MB
megs :512
#第二步,设置对应真实机器的 BIOS VGA BIOS
#对应两个关键字为 romimage vgaromimage
romimage: file=/home/hwp/bochs-2.6.8/bios/BIOS-bochs-latest
vgaromimage: file=/home/hwp/bochs-2.6.8/bios/VGABIOS-lgpl-latest
#第三步,设置 Bochs 所使用的磁盘,软盘的关键字为 floppy
#若只有一个软盘,目IJ 使用 floppy 即可,若有多个,则为 floppya, floppyb… #floppya: 1_ 44=a.img, status=inserted
#第四步,选择启动盘符。
#boot: floppy #默认从软盘启动,将其注释
boot: disk #改为从硬盘启动。我们的任何代码都将直接写在硬盘上,所以不会再有读写软盘的操作。
#第五步,设置日志文件的输出。
log: bochs.out
#第六步,开启或关闭某些功能。
#下面是关闭鼠标,并打开键盘。
mouse: enabled=0
keyboard:keymap=/home/hwp/bochs-2.6.8/gui/keymaps/x11-pc-us.map
#硬盘设置
ata0: enabled=1, ioaddr1=0x1f0, ioaddr2=0x3f0, irq=14
#下面的是增加的 bochs gdb 的支持,这样 gdb 可以远程连接到此机器的 234 口调试了
#gdbstub : enabled=l, port=l234, text_base=O, data_base=O, bss_base=O
ata0-master: type=disk, path="hd60M.img", mode=flat
################### 配置文件结束 #####################
原文中方案一我们会报没有-hd命令:
./bximage -hd -mode="flat" -size=60 -q hd60M.img
因此选择方案二:
./bximage
注意几个选项:
将最后一行加入配置文件中。
ata0-master: type=disk, path="hd60M.img", mode=flat
Step2:尝试启动我们的仿真机
bochs -f bochsrc.disk
两个选项:
由于没有引导程序,运行起来报错,符合预期