Ubuntu18.04安装配置Bochs2.6.9与编译运行GeekOS

Ubuntu18.04安装配置Bochs2.6.9与编译运行GeekOS

安装Bochs2.6.9

下载Bochs2.6.9

进入下载地址
找到bochs-2.6.9.tar.gz并下载保存

解压bochs-2.6.9.tar.gz

可使用命令解压,

sudo tar zxvf bochs-2.6.9.tar.gz

也可以直接鼠标右键选择“提取到此处”

安装Bochs

进入bochs-2.6.9目录
在终端输入下列命令

sudo ./configure --enable-debugger --enable-disasm
sudo make
sudo make install

输入第1行后,可能会报错:
ERROR: X windows gui was selected, but X windows libraries were not found.
那么此时你需要在终端输入:

sudo apt-get install libx11-dev xserver-xorg-dev xorg-dev

完成后再输入第2行和第3行

更多奇葩报错及其解决办法你可以去参考这两篇博客:
https://blog.csdn.net/geeker_12/article/details/11409009
https://blog.csdn.net/aurorayqz/article/details/80310954

启动Bochs

直接在终端输入bochs启动
然后可能会出现如下报错:
Bochs is exiting with the following message:
[ ] .bochsrc:187: cpu directive malformed.

说明是cpu配置问题
那么在终端输入:

bochs -help cpu

会出现:
Supported CPU models:
bx_generic
pentium
pentium_mmx
amd_k6_2_chomper
p2_klamath
p3_katmai
p4_willamette
core_duo_t2400_yonah
atom_n270

然后在终端输入 sudo gedit .bochsrc

大概在187行会找到cpu: model=

cpu: model= 后面的部分修改为以上支持的cpu models中的一个
(建议注释原来的而不是删除原来的)

例如:
cpu: model=bx_generic

保存退出
重新运行bochs

又可能会出现错误:
Bochs is not compiled with lowlevel sound support

在终端输入

sudo gedit .bochsrc

大概在915行,注释掉文件中的sound: driver=default, waveout=/dev/dsp. wavein=, midiout=

再次重新运行bochs
成功!!!

配置Bochs

当我们在终端输入bochs后,
Bochs会自己在当前目录顺序寻找以下文件作为默认配置文件:
.bochsrc
bochsrc
bochsrc.txt
bochsrc.bxrc(仅对Windows有效)

我们可以自己创建一个名为bochsrc的文件,来指定Bochs配置我们想要的虚拟机

在终端输入

sudo gedit bochsrc

粘贴以下内容(根据需要自行修改,注意这里要确保romimagevgaromimage这两项的路径是正确的,不然虚拟机启动时会提示couldn’t open ROM image file的错误):

#################################################################
# Bochs的配置文件
# Configuration file for Bochs
#################################################################

# how much memory the emulated machine will have
megs: 32

# filenameof ROM images
romimage:file=/usr/local/share/bochs/BIOS-bochs-latest
vgaromimage:file=/usr/local/share/bochs/VGABIOS-lgpl-latest

# which disk image will be used 这个是启动软盘
floppya:1_44=a.img, status=inserted
#后面我们会在运行GeekOS时将它改成fd.img

# choose the boot disk 确定启动方式
boot: floppy

# where do we send log messages?
log: bochsout.txt

# disable the mouse
mouse: enabled=0

# enable key mapping ,using US layout as default
keyboard:keymap=/usr/local/share/bochs/keymaps/x11-pc-us.map

保存退出

使用Bochs编译安装运行GeekOS

以下是生成自己的软盘,如果仅为了运行GeekOS这一步可跳过:
(在终端输入:sudo bximage
依次输入:
1
fd
然后一直按回车键即可生成软盘a.img)

安装nasm和下载GeekOS

安装nasm要特别注意安装旧一点的版本,比如2.08.02版本,最新的在后续操作中会产生错误,
首先去下载,选择nasm-2.08.02.tar.gz,下载保存
解压后进入nasm-2.08.02目录
依次输入以下命令:

./configure
sudo make
sudo make install

再在终端输入nasm -version
可以发现为2.08.02

下载GeekOS
直接去GeekOS下载
下载完成后解压

编译GeekOS

进入目录 cd geekos-0.3.0/src/project0/build
终端输入

sudo make depend
sudo make

会报错,其中有一行会显示:cc1: all warnings being treated as errors
Makefile在make时将warnings全部视为了errors

于是我们打开当前目录下的Makefile,

sudo gedit Makefile

找到第149行的-Werror:

CC_GENERAL_OPTS := $(GENERAL_OPTS) -Werror 

修改为:

CC_GENERAL_OPTS := $(GENERAL_OPTS)

保存退出,再次sudo make

【笔者第一次尝试时忘记安装nasm,导致此处出现Makefile:177: recipe for target ‘geekos/lowlevel.o’ failed
只能赶快安装nasm,记住一定要安装2.08.02版本,最新的貌似都不支持】

再次sudo make
又出现
对‘__stack_chk_fail’未定义的引用

解决办法是在Makefile文件的第148行 GENERAL_OPTS := -O -Wall $(EXTRA_C_OPTS) 后面添加编译选项

-fno-stack-protector

然后把Makefile文件中的100行至109行修改为如下内容

100 TARGET_CC := $(TARGET_CC_PREFIX)gcc -m32                                                  
101 
102 # Host C compiler.  This is used to compile programs to execute on                        
103 # the host platform, not the target (x86) platform.  On x86/ELF
104 # systems, such as Linux and FreeBSD, it can generally be the same                        
105 # as the target C compiler.                                                               
106 HOST_CC := gcc -m32                                                                       
107 
108 # Target linker.  GNU ld is probably to only one that will work.                          
109 TARGET_LD := $(TARGET_CC_PREFIX)ld  -m elf_i386

然后

sudo make clean
sudo make depend
sudo make

会出现
cat geekos/fd_boot.bin geekos/setup.bin geekos/kernel.bin > fd.img
即为编译成功

在终端输入ls -a进行检查
发现有fd.img以及.bochsrc

此时再修改我们之前创建的配置文件bochsrc中的floppy为fd.img
重新输入bochs运行
仍然会报错
因为此时默认使用.bochsrc,而这里的.bochsrc相当古老,基本没有价值。

所以我们重新在终端输入

bochs -f /home/shane/bochs-2.6.9/bochsrc

也就是在bochs后面加上 -f 刚刚创建和修改的配置文件bochsrc的绝对路径
输入6启动虚拟机调试
你会发现出现了一个黑色的界面,此时回到终端输入c,再回车
就会出现以下界面:
GeekOS运行成功了!!!

【再次强调,如果出现
Failed assertion in Init_IDT:g_handlerSizeNoErr == g_handlerSizeErr
是因为nasm版本太新的问题只能重新安装2.08.02再次开始以上工作】

由于笔者在完成这项任务时忙于尽快解决问题,所以本篇博客配图极少,只保留了最后的成功结果图,不过如果按照以上步骤来,应该没问题。

部分内容参考了以下博客:
https://111qqz.com/2016/06/geekok-project0/ (这篇博客很有帮助!)
https://blog.csdn.net/ByChen623/article/details/53619084#commentBox

发布了25 篇原创文章 · 获赞 19 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_42605042/article/details/90299638