记录bochs+geekos报错指南
环境:virtualbox+ubuntu12.04
物理机:ArchLinux
1. 安装virtualbox并实现文件共享
# Arch Linux
pacman -S virtualbox
在设备中创建共享文件夹,并在设备中选择安装增强功能
# 安装gcc、bzip2
apt install gcc bzip2 make perl
# 在虚拟机/media/vboxuser/VBox_GAs_7.1.6运行可执行文件
# 执行完成后将虚拟机用户添加至vboxsf组,否则共享文件夹无运行权限
sudo usermod -aG vboxsf usrname
2. 安装配置Bochs
# 安装 build-essential 及一些开发依赖
apt install build-essential
apt install libx11-dev libxpm-dev libxrandr-dev libgtk2.0-dev libtool automake
# 解压并进入Bochs文件夹,开始编译
cd ./Bochs
sudo ./configure -enable-debugger -enable-disasm # -enable-debugger和 -enable-disasm 表示开启调试和反汇编功能
sudo make
sudo make install
3. 编译安装nasm
apt install curl
# 从官网curl源文件
curl -O https://www.nasm.us/pub/nasm/releasebuilds/2.08.02/nasm-2.08.02.tar.gz
# 解压并进入文件夹
# 配置、编译、安装
sudo ./configure
sudo make
sudo make install
nasm版本一定要安装旧一点的版本,比如2.08.02版本,否则会出现如下问题
4. 编译 GeekOS
# 安装 32 位 C 标准库头文件
apt install gcc-multilib g++-multilib libc6-dev-i386
# 从官网下载源代码包,解压并进入project0
# 修改Makefile文件
# 对Makefile的第148行做如下修改,加入-fno-stack-protector参数(GCC中的一个编译选项,用于禁用栈保护)
GENERAL_OPTS := -O -Wall $(EXTRA_C_OPTS) -fno-stack-protector
# 对Makefile的第149行做如下修改,删除-Werror 参数(警告仅作为提示输出,不会阻止编译完成)
CC_GENERAL_OPTS := $(GENERAL_OPTS)
# 对Makefile的第100行,106行加上 -m32参数(用 32位模式 编译代码)
# 为第109行加上 -m elf_i386 参数(用 ELF 格式的 32 位 x86 (i386) 目标平台的规则来链接生成最终可执行文件)
# 在Makefile文件下运行 make 指令编译内核
sudo make depend # 将依赖写入.depend 文件
sudo make
使用你熟悉的文本编译器修改.bochsrc配置文件
vim .bochsrc
####
megs: 32
# 将路径替换为你自己具体的路径
romimage: file=/usr/local/share/bochs/BIOS-bochs-latest
vgaromimage: file=/usr/local/share/bochs/VGABIOS-lgpl-latest
boot: a
floppya: 1_44=fd.img, status=inserted
log: bochs.out
mouse: enabled=0
private_colormap: enabled=0
display_library: x
clock: sync=realtime, time0=local
cpu: count=1, ips=1000000
magic_break: enabled=1
####
# :wq保存并退出
运行bochs测试GeekOs系统