当前位置: 首页 > Linux

开源虚拟机Bochs安装及陷阱

时间:2023-04-06 03:02:56 Linux

因为想写一个简单的操作系统,需要安装虚拟机来模拟硬件。VMware不适合这种场景,因为它会用到硬件级别的虚拟化,而bochs是一个开源的虚拟机,用软件把所有的硬件都虚拟出来,所以调试可以做到非常细粒度。比如CPU每执行一条命令,我们可以暂停一下,查看寄存器状态,查看内存状态,这对操作系统的开发和调试很有帮助。太大就是太大了。所以我们使用bochs虚拟机。Mac安装bochs我当前环境是Mac版本10.15.3,记录下安装过程和坑。步骤:安装sdl库,后续编译使用brewinstallsdl下载源码并解压下载地址:https://sourceforge.net/proje...#下载并解压tar-xvfbochs-2.6。tar.gz#配置./configure所需的参数--enable-ne2000\--enable-all-optimizations\--enable-cpu-level=6\--enable-x86-64\--enable-vmx=2\--enable-pci\--enable-usb\--enable-usb-ohci\--enable-e1000\--enable-debugger\--enable-disasm\--disable-debugger-gui\--with-sdl\--prefix=$HOME/opt/bochs这里的prefix参数指定安装的位置,修改成你想要的地址即可。第一个问题来了:问题1报了这个错误cdrom_osx.cc:194:18:error:assigningto'char'fromincompatibletype'constch于是上网查了一下,这个错误有补丁[https://raw.githubusercontent...],我们找到这个文件,修改源码,这个文件在bochs-2.6/iodev/hdimage/cdrom_osx.cc,我们打开修改193行if((devname=strrchr(devpath,'/'))!=NULL){改为:if((devname=(char*)strrchr(devpath,'/'))!=NULL){问题解决,我们继续编译。make&&makeinstall问题2这个时候报这个错误config.cc:3261:55:error:orderedcomparisonbetweenpointerandzero('char*'and'int')if(SIM->get_param_string("model",base)->getptr()>0){~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~1个错误生成。我们打开config.cc,找到3621行,修改为修改config.cc的3621行if(SIM->get_param_string("model",base)->getptr()>0){isif(SIM->get_param_string(“模型”,基础)->getptr()>(char*)0){.然后我们再次编译make&&makeinstall,编译成功。我们可以将bochs添加到环境变量中使用:exportBXSHARE="$HOME/workplace/os/bochs/share/bochs"exportPATH="$PATH:$HOME/workplace/os/bochs/bin"Bochs使用bochs安装目录下的bochs/share/doc/bochs/bochsrc-sample.txt就是配置文件的模板。我们写一个简单的配置文件运行:#设置虚拟机内存为32MBmegs:32#设置BIOS镜像romimage:file=$BXSHARE/BIOS-bochs-latest#设置VGABIOS镜像vgaromimage:file=$BXSHARE/VGABIOS-lgpl-latest#设置从硬盘启动:disk#设置日志文件log:bochsout.txt#关闭鼠标mouse:enabled=0#打开键盘keyboard:type=mf,serial_delay=250#设置硬盘diskata0:enabled=1,ioaddr1=0x1f0,ioaddr2=0x3f0,irq=14#添加gdb远程调试支持gdbstub:enabled=1,port=1234,text_base=0,data_base=0,bss_base=0并保存为bochsrc.在该目录运行命令执行:?my_srcgit:(master)?bochs========================================================================Bochsx86Emulator2.6从9月2日的SVN快照构建,20122020年2月11日14:52:19编译========================================================================00000000000i[]从bochsrc00000000000p[]读取配置>>PANIC<