bochs
Bochs 安装
2020/10/10 更新: Ubuntu20.04下安装Bochs
在学操作系统,想学着自己写一个玩,就找了书来读,第一步就是在 Linux 环境下安装 Bochs(一款开源的可调式虚拟机软件)
配环境什么的,我折腾过很多了,完全不怕!(然后就折腾了一下午)
准备好 Linux 系统
我本机是 Win10,又不想折腾双系统,就用 VMware 配了一个虚拟机,使用 CentOS7 的镜像
VMware 配虚拟机不需要多说,这个都用过,强烈建议装带图形界面的系统,不然后面安装和使用的时候会比较难受。
如果配的网络不行,或者想使用固定 IP 的形式,可以参考这篇博客:
下载并解压 Bochs
下不下最新版都可以,关键是要尽可能减少安装时的痛苦(?),所以我选择的是和安装教程同一个版本的
记得下载 .tar.gz
正常解压,如果你使用的是图形界面,直接双击可以解压,也可以命令行解压:
tar zxvf bochs-xx.xx.xx.tar.gz
编译安装
最痛苦的过程,我把我成功的流程发出来,说不定换个电脑就不行了
先安装各种依赖:
1 | sudo yum install gtk2 gtk2-devel |
进入解压后的目录,然后执行:
1 | ./configure --with-x11 --with-wx --enable-debugger --enable-disasm --enable-all-optimizations --enable-readline --enable-long-phy-address --enable-ltdl-install --enable-idle-hack --enable-plugins --enable-a20-pin --enable-x86-64 --enable-smp --enable-cpu-level=6 --enable-large-ramfile --enable-repeat-speedups --enable-fast-function-calls --enable-handlers-chaining --enable-trace-linking --enable-configurable-msrs --enable-show-ips --enable-cpp --enable-debugger-gui --enable-iodebug --enable-logging --enable-assert-checks --enable-fpu --enable-vmx=2 --enable-svm --enable-3dnow --enable-alignment-check --enable-monitor-mwait --enable-avx --enable-evex --enable-x86-debugger --enable-pci --enable-usb --enable-voodoo |
有不少 no 是很正常的现象,我遇见的问题大致如下:
Permission denied
su 切换成 root,全部安装完成后再切回来(su - your_name)
sudo ./configure....
xxx is not in the sudoer file
- su root (su -l) 输入root用户密码
- chmod u+w /etc/sudoers
- vim /etc/sudoers, 在 ROOT ALL=(ALL)ALL 下加一行:xxx ALL=(ALL) ALL 然后保存并退出。其中xxx是你要加 sudo 权限的用户名
- chmod u-w /etc/sudoers
- su - xxx
no acceptable C compiler found in $PATH
没装 gcc
sudo yum install gcc
configure: error: C++ preprocessor “/lib/cpp” fails sanity check
出现该情况是由于 C++ 编译器的相关包没有安装
sudo yum install glibc-headers
, sudo yum install gcc-c++
如果你没有用图形界面,好像还会报别的错误,这时候需要安装一些别的包(所以为啥要自己为难自己呢)
上面步骤没啥问题后执行编译
make
sudo make install
当然不会一帆风顺:
没有规则可以创建 “misc/bximage.o” …
原因是没有 .cc 文件,按照书上的方法我们将 .cpp 拷贝一份成 .cc 文件即可
1 | cp misc/bximage.cpp misc/bximage.cc |
ISO C++ 不允许成员 PHY_MEM_PAGES 的初始化
我是真的不知道这个问题咋解决,出现的时候我用的是 Centos6 的镜像,重新解压编译也不行,就换成了Centos7,就没这问题了…
symbols: DSO missing from command line collect2: error: ld returned 1 exit status
网上很多博客都说的一个问题,我是没遇见
在 Makefile 的 LIBS 中添加如下内容: -lz -lrt -lm -lpthread
全部完成之后试着打开一下,如果像下面一样就没啥问题了:
.brochsrc 的配置
ls 是看不见有这个文件的,需要 ls -a
才能看见,我们有一个默认的,记得修改之前备份一下
按照任何一个教程里的,或者书上的文件配置复制粘贴进去就行了
1 | # configuration file generated by Bochs |
制作软盘
一定要在你编译完成的文件夹下执行命令 ./bximage
然后选择 1(Create new floppy or hard disk image)
然后输入 fd(创建一个软盘)
然后回车(大小默认)
然后起一个名字 如 boot.img
做好的软盘 boot.img 默认在当前文件夹中,要放在 bochs 的文件夹根目录中,不要移动了
更新
由于 Centos7 使用体验极差(虚拟机出了各种问题)索性换到 Ubuntu20.04
大致可能出现的问题和前面类似,不再赘述,说一些新的问题
缺少 usb_uhci 巴拉巴拉一些
不会处理,看了网上的别人说的,这是低版本 Bochs 源码的问题,建议使用高版本
好吧,使用最新的 2.6.11
源码编译的时候出错
问题就像下面一样,这次好,有解决方案
x86_64-pc-linux-gnu-g++ -c -I… -I./… -I…/instrument/stubs -I./…/instrument/stubs -I. -I./. -march=native -O2 -pipe -D_FILE_OFFSET_BITS=64 -D_LARGE_FILES -pthread -I/usr/include/SDL -D_GNU_SOURCE=1 -D_REENTRANT dbg_main.cc -o dbg_main.o
In file included from dbg_main.cc:28:
dbg_main.cc: In function ‘void bx_dbg_tlb_lookup(bx_lin_address)’:
…/cpu/cpu.h:383:28: error: invalid use of ‘this’ in non-member function
383 | # define BX_CPU_THIS_PTR this->
| ^~~~
…/cpu/tlb.h:62:32: note: in expansion of macro ‘BX_CPU_THIS_PTR’
62 | #define BX_ITLB_INDEX_OF(lpf) (BX_CPU_THIS_PTR ITLB.get_index_of(lpf))
| ^~~~
…
解决方案:
找到 bx_debug/dbg_main.cc 或者是 dbg_main.cpp, 修改里面的部分代码(记得原版备份)
1 | char cpu_param_name[16]; |
重新编译即可正常的运行
真难…