Ubuntu20.04/18.04安装Bochs2.6.9编译运行GeekOS
请注意:博主仅测试在Ubuntu18和Ubuntu20上成功安装Bochs-2.6.9、nasm-2.08.02、geekos-0.3.0,其它版本可能会出现不兼容的情况。若安装调试过程中出现各种奇奇怪怪的错误,请百度报错信息,或给我留言。博主也是在多次失败的情况下,总结各位大佬的解决方案,才成功的。
1.在电脑上安装Linux操作系统
安装过程就不多介绍了,放个Ubuntu的种子,需要的自行下载
- Ubuntu 18.04 Desktop (amd64)
magnet:?xt=urn:btih:286D2E5B4F8369855328336AC1263AE02A7A60D5&dn=ubuntu-18.04.4-desktop-amd64.iso
- Ubuntu 20.04 Desktop (amd64)
magnet:?xt=urn:btih:9FC20B9E98EA98B4A35E6223041A5EF94EA27809&dn=ubuntu-20.04-desktop-amd64.iso&xl=2715254784
Ubuntu20安装成功如下图
2.编译安装Bochs需要准备好安装环境
安装Bochs之前需要联网安装下面这些软件:
sudo apt-get install build-essential
sudo apt-get install xorg-dev
sudo apt-get install bison
sudo apt-get install libgtk2.0-dev
sudo apt-get install gcc-multilib
下载安装速度可能较慢,需要点耐心,如果下载中出现失败,用手机开个热点给电脑试下
3.安装Bochs2.6.9
-
下载Bochs2.6.9
进入链接: 下载地址.
找到bochs-2.6.9.tar.gz并下载保存 -
解压bochs-2.6.9.tar.gz
可以直接鼠标右键选择“提取到此处” -
安装Bochs
进入bochs-2.6.9目录
在终端输入下列命令
sudo ./configure --enable-debugger --enable-disasm
sudo make
sudo make install
-
启动Bochs
直接在终端输入bochs启动,这里可能会报错,不用着急,百度可以解决。
若没有报错,则会出现Bochs的菜单
但是建议选项为[2],没有找到配置文件
-
配置Bochs
当我们在终端输入bochs后,
Bochs会自己在当前目录顺序寻找以下文件作为默认配置文件:
.bochsrc
bochsrc
bochsrc.txt
bochsrc.bxrc(仅对Windows有效)
我们可以自己创建一个名为.bochsrc的文件,来指定Bochs配置我们想要的虚拟机
(请将.bochsrc文件放在 geekos-0.3.0/src/project0/build 目录下。没有geekos?请看第4步!在此目录下会有一个自带的.bochsrc文件,但它是隐藏文件)
在终端输入
sudo gedit .bochsrc
粘贴以下内容(注意这里要确保romimage和vgaromimage这两项的路径是正确的,不然虚拟机启动时会提示“couldn’t open ROM image file”的错误,还有Bochs的版本不一样的话,键盘设置的方式也不太一样):
#################################################################
# 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=fd.img, status=inserted
# 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
保存退出
4.安装nasm和下载GeekOS
- 下载安装nasm
进入链接: 下载地址.
选择nasm-2.08.02.tar.gz,下载保存
解压后进入nasm-2.08.02目录
依次输入以下命令:
./configure
sudo make
sudo make install
再在终端输入nasm -version
出现2.08.02,OK继续!
- 下载GeekOS
直接去GeekOS下载
下载完成后解压
5.编译GeekOS
进入目录 geekos-0.3.0/src/project0/build
终端输入
sudo make depend
sudo make
会报错,因为Makefile在make时将warnings全部视为了errors
于是我们打开当前目录下的Makefile
sudo gedit Makefile
找到第149行的-Werror:
CC_GENERAL_OPTS := $(GENERAL_OPTS) -Werror
修改为:
CC_GENERAL_OPTS := $(GENERAL_OPTS)
在Makefile文件的第148行 GENERAL_OPTS := -O -Wall $(EXTRA_C_OPTS) 后面添加编译选项:
(高版本的Ubuntu会有优化问题,导致project运行时线程报错,所以此处可以把-O改成-O0,取消优化)
-fno-stack-protector
然后把Makefile文件中的100行至109行修改为如下内容:
TARGET_CC := $(TARGET_CC_PREFIX)gcc -m32
# Host C compiler. This is used to compile programs to execute on
# the host platform, not the target (x86) platform. On x86/ELF
# systems, such as Linux and FreeBSD, it can generally be the same
# as the target C compiler.
HOST_CC := gcc -m32
# Target linker. GNU ld is probably to only one that will work.
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
即为编译成功
注意:这里的fd.img是软盘文件,和.bochsrc文件相关,非常重要!如果启动Bochs出现黑色界面,但是有弹窗报错,多半和它有关。
6.运行GeekOS
进入目录 geekos-0.3.0/src/project0/build
终端输入:bochs
会出现Bochs菜单,且建议选项为[6]意思是开始模拟
输入"6"弹出黑色页面,然后再在命令行输入"c"
如果出现错误提示,可能是因为软盘映像中没有找到编译好的可执行程序,所以需要我们导入程序。
可以自己编写一段程序,也可以使用自带的示例程序,将编译好的引导扇区写进软盘。
Linux下自带了dd命令可以很方便地进行软盘读写:
sudo dd if=main.o of=fd.img bs=512 count=1 conv=notrunc
("main.o"是要写入软盘的程序文件,“fd.img"是目的软盘,可以用自己建的软盘"a.img”,也可以用自动生成的)
重新运行GeekOS,看到Bochs界面上出现的“Welcome to GeekOS!”,恭喜你成功了!
感谢观看
如果文章对你有用,点个赞再走吧,有问题的可以评论区讨论。