bochs用户手册-3.4编译

原文链接:用户手册

3.4. Compiling Bochs

3.4.1. Standard Compile

\qquad bochs是用C++编写的,因此您需要在系统上使用C++编译器。大多数平台已经用GNU gcc/g++进行了测试,但其他编译器也可以工作。到目前为止,您应该已经解包了源TAR文件或从SVN中取出了Bochs。如果没有,您可以返回Downloading Bochs 了解详细信息。源代码的顶级目录将被称为 B O C H S 。( BOCHS。( BOCHS。(BOCHS包含文件bochs.h和main.cc以及子目录cpu和bios。)
\qquad 标准编译过程有三个基本步骤:配置(configure)、生成(make)和安装(install)。每个步骤在下面的单独章节中进行了描述。标准编译过程用于所有Unix机器、MacOSX和Cygwin(win32)。对于使用Microsoft VC++ 的 Win32进行编译,有单独的说明。

3.4.1.1. Configure

\qquad 有一个名为configure的脚本,它测试您的机器、C/C++编译器和库,以发现哪些设置应该在您的系统上工作。如果运行configure后没有参数,则所有设置都将使用默认值。要更改设置,可以使用替代默认设置的选项运行configure。您可以通过键入configure–help来获得有效配置选项的列表。一个有用的配置选项是–prefix=directory,它设置将安装Bochs的目录。所有可能的配置选项都将在后面的部分中进行说明。

\qquad 除其他外,configure脚本会尝试检测您的平台以及要使用的编译选项。如果要对此进行控制,请在运行configure之前设置以下环境变量:CC、CXX、CFLAGS、CXXFLAGS。下面是一个使用bash/ksh语法设置环境变量的示例:

export CC=egcs
export CXX=“$CC”
export CFLAGS=“-Wall -O2 -m486 -fomit-frame-pointer -pipe”
export CXXFLAGS="$CFLAGS

\qquad 一旦配置脚本知道选择了哪些选项,它就会在每个源代码目录中创建一个Makefile,并创建$BOCHS/config.h,其中所有选项值都是作为预处理器#define 编写的。现在,源代码已准备好进行编译。

3.4.1.1.1. Configure Shortcut Scripts

\qquad 在Bochs源目录中,您将看到一系列名为.conf.xxxplatform的脚本。这些脚本为您运行配置脚本,并提供一组适用于该平台的选项。没有必要使用快捷方式脚本;它们只是向您展示开发人员使用过的一个示例。其中一些脚本已被用于构建官方二进制包。

提示:
\qquad 如果一个快捷脚本对你来说“几乎正确”,只需编辑它,然后运行它!如果运行快捷方式脚本,则不需要手动运行configure。

使用Bourne shell运行一个快捷脚本,如下所示:
sh .conf.win32-vcpp

这些.conf.xxxplatform脚本已在最近的Bochs版本中进行了测试:在这里插入图片描述

3.4.1.2. Make

\qquad make命令编译Bochs。Make是许多软件项目使用的一个程序,它读取每个源目录中的Makefile,并遵循在那里找到的指令。Makefile告诉哪些文件依赖于哪些其他文件,使用哪些命令编译和链接代码,等等。完成配置步骤后,只需键入make即可构建源代码。

\qquad make之所以如此受欢迎,是因为它对何时编译和何时不编译都很明智。如果运行make一次,它会编译每个文件。但当你再次运行它时,它会检查是否有任何源文件被修改;如果没有,那就没什么可做的了!例如,Makefile说main.o依赖于main.cc。知道这一点,它只会在main.cc比main.o更新的情况下编译main.cc。

\qquad 当然,只有在Makefile正确列出所有依赖项的情况下,make才能做正确的事情,因此人为错误有时会导致make误入歧途。如果make拒绝构建您认为应该构建的东西,或者您遇到了奇怪的编译错误,请尝试执行make all clean,然后再进行make。All clean表示清理每个子目录中已编译的文件,而make clean表示只清理当前目录。但是,重要的是要注意,“全部清理”会使配置保持原样。您不必再次运行configure。

\qquad 如果你真的有心情清理,那么make dist clean也会擦除所有的配置信息。理论上,在dist清理后,您的目录应该与您第一次取消标记或签出时非常相似。通常会有一些额外的东西,但Makefile至少会尝试擦除它创建的任何文件。

3.4.1.3. Make Install

\qquad 一旦程序构建完成,下一步通常是运行make-install,将可执行文件、文档和其他所需文件复制到公共位置,以便所有用户都可以使用它。默认情况下,这些文件会复制到/usr/local中的一些目录中。下表显示了目录及其内容。

表3-6。已安装的文件
在这里插入图片描述

3.4.1.4. Installing the DLX Linux demo

要下载并安装随Bochs二进制发行包分发的DLX Linux演示,请使用以下两个make命令:

make unpack_dlx
make install_dlx

该软件包将从Bochs网站下载,并安装在与Bochs基本系统文件相同的位置。

3.4.2. Configure Options

\qquad 本章节介绍了Bochs的配置选项。也许最重要的选项是--help,因为它为您提供了所有其他选项的列表。配置脚本将检测您的平台并为您的平台选择默认GUI。如果默认选项不是您想要的,请使用--with-xxx选项来覆盖默认选项。第一个表中的选项告知每个平台的默认GUI库。从2.0版本开始,您可以同时使用多个--with-xxx选项来编译多个显示库,然后在运行时使用配置文件中的display_library选项在它们之间进行选择。或者,您可以让configure脚本检测系统上有哪些库,并通过使用--withall-lib进行配置来使用它们。

注:
\qquad Bochs 1.4中增加了平台检测和默认GUI的概念。在Bochs1.3及之前的版本中,X11GUI始终是默认的。
在这里插入图片描述
在这里插入图片描述

其余的选项通常可以与任何GUI一起使用。对于每个选项,如–enable cdrom,您也可以写入–disable cdrom以显式关闭它。以下3个表显示了常规选项(例如调试器和插件支持)、与CPU相关的内容(例如CPU级别、SMP、x86_64支持)和设备选项(例如PCI、USB、Cirrus图形)。

表3-9。配置选项(常规)

选项默认注释
–enable-pluginsno插件是可以按需加载的共享库。示例:串行设备被实现为一个插件。在Unix中,串行插件被称为libbx_serial.so。当Bochs读取其配置文件时,如果启用了串行设备,它将加载libbx_serial.so。有关支持的平台,请参阅功能部分。
–enable-debuggerno编译以支持Bochs内部comand-line命令行调试器。这与x86硬件调试支持无关。它是一个功能更强大且非侵入性更强的本机调试器。启用此功能当然会减慢模拟速度。只有当你知道自己需要这个选项,你才需要这个选项。在你已经运行 ./configure,您可能需要编辑config.h来进一步自定义调试器;详见第8章。
–enable-debugger-guiyes if debugger is on启用对Bochs调试器的gui前端的支持。Windows主机和安装了GTK2/GTK3的主机都支持此功能。
–enable-readlinedetected by configure使用GNU readline库编译调试器,该库提供命令行编辑和历史记录。
–enable-gdb-stubno启用对远程GDB存根的支持。请参阅使用Bochs和远程GDB存根。注意:如果同时启用了Bochs调试器,则无法使用此功能。警告:此Bochs功能尚未维护,可能会失败。
–enable-docbookdetected在doc/docbook中构建docbook文档。如果您安装了一个名为docbook2html的程序,那么配置脚本将自动启用此选项。
–enable-instrumentation=directoryno编译以支持检测。这允许您在执行代码时从bochs收集指令插入数据。您必须创建自己的检测库,并定义检测宏(bochs中的钩子)来调用库函数或不调用库函数,这取决于您是否要收集每一条数据。
–enable-xpmyes启用对XPM库的检查。只有启用了x显示库(–with-x11)时,此选项才有效。
–enable-show-ipsyes启用测量IPS的日志记录,请参阅cpu选项的IPS参数。
–enable-loggingyes–enable logging yes默认情况下,Bochs生成日志文件输出,该输出可以在运行时使用bochsrc选项进行配置。使用–disable logging可完全关闭此功能。
–enable-assert-checksyes if debugger is on如果启用了BX_ASSERT事件,则断言失败时会引发死机(日志记录功能也必须启用)。
–enable-cppno使用.cpp作为C++后缀。将所有.cc文件重命名为.cpp,以便与需要的编译器一起使用,如旧的MS C++编译器。除非你知道自己需要,否则不要使用这个选项。
–enable-idle-hackno启用Roland Mainz的实验性空闲代码,该代码旨在防止Bochs始终使用100%的CPU时间。当Bochs在等待中断时,空闲代码使用select()循环和一些X11技巧来等待,直到用户输入到来。这是为了使Bochs保持响应,同时在Bochs空闲时仍向其他进程让步。它只适用于X11或术语GUI。

Table 3-10.配置选项 (CPU & Memory)

选项默认注释
–enable-cpu-level={3,4,5,6}6选择要模拟的CPU级别。选项为3、4、5、6,表示以386、486、Pentium或Pentium Pro及更高版本的仿真为目标。
–enable-smpno编译以支持SMP模拟。这允许您以SMP模式引导Linux和其他操作系统,并且bochs将模拟所有不同的CPU以及它们之间的通信。不要期望此选项会加快模拟速度!相反,它必须花费额外的时间来模拟不同的CPU(即使它们大部分是空闲的)以及它们之间的通信。如果没有SMP机器,可以使用它来试用SMP操作系统,或者调试SMP操作系统驱动程序。有关Bochs中SMP的更多详细信息,请参阅第9.9节。
–enable-fpuyes如果您想编译Bochs以利用Stanislav Shwartsman编写的FPU模拟器,请使用此选项。
–enable-3dnowno3DNow! 指令集支持(不完整)
–enable-x86-64no添加对x86-64指令集的支持,该指令集由Peter Tattam和Stanislav Shwartsman编写。
–enable-vmxno英特尔虚拟化扩展(VMX)支持
–enable-svmnoAMD SVM(安全虚拟机)扩展仿真支持
–enable-avxnoAVX指令支持
–enable-x86-debuggernoX86调试器支持。如果你在bochs中运行的软件需要使用x86硬件调试工具,如DR0…DR7、指令和数据断点等,那么你应该使用这个选项。否则不要使用它,因为它会减慢模拟的速度。
–enable-monitor-mwaitnoMONITOR/MWAIT指令支持(仍处于实验阶段)
–enable-alignment-checkyes支持CPU中的对齐检查和#AC异常
–enable-configurable-msrsno支持模拟MSR寄存器的用户配置(请参阅msrs.def中的示例)
–enable-long-phy-addressno支持大于32位的来宾物理地址
–enable-a20-pinyes支持 A20pin
–enable-large-ramfileyes支持比主机所支持的还要大的来宾内存
–enable-repeat-speedupsno启用支持重复I/O和内存复制加速
–enable-fast-function-callsno支持快速函数调用(仅限x86上的gcc)
–enable-handlers-chainingno支持处理程序链接优化
–enable-all-optimizationsno: 为开发人员认为可以安全使用的所有速度优化启用:–enable-repeat-speedups, --enable-fast-function-calls, --enable-handlers-chaining.

Table 3-11. 配置选项 (Devices)

选项默认注释
–enable-cdromyes允许使用真正的CDROM/DVD驱动器。cdrom仿真和便携式ISO映像文件支持始终存在。您可以使用此选项进行编译,以支持访问工作站的cdrom驱动器中的介质。支持的平台有Linux、Solaris、FreeBSD、OpenBSD、MacOSX和Windows。对于其他平台,必须编写少量特定于您的平台的代码。
–enable-sb16no启用Sound Blaster仿真。可用的低级别声音接口是自动检测的。有关支持的平台和更多信息,请参阅“使用声音”一节。此选项还启用标准PC游戏端口,该端口是SB16的一部分。如果您不想使用它,可以使用–disable gameport。
–enable-es1370no启用ES1370声音模拟。就像SB16选项一样,可用的低级别声音接口是自动检测的,游戏端口是打开的。
–enable-gameportno启用标准PC游戏端口。只有当您想要一个游戏端口,但没有SB16或ES1370(见上文)时,此选项才是必要的。目前只有Linux和win32支持连接到真正的游戏杆。
–enable-ne2000no启用NE2000网卡支持。这需要为每个操作系统编写一个底层组件(在FreeBSD、OpenBSD、Linux和Windows 9x/NT/2K/XP上受支持)。启用和配置后,NE2000设备型号可以与网络上的任何计算机通话,本地主机除外。例外:在大多数情况下,Bochs可以与Windows上的本地主机以及Linux的etherstap接口进行通信。
–enable-pnicno启用PCI伪NIC(网卡)支持。
–enable-e1000no启用Intel(R)82540EM千兆以太网适配器支持。
–enable-clgd54xxno启用Cirrus Logic GD54xx(CL-GD5430 ISA或CL-GD5446 PCI)视频卡支持。有关更多信息,请参见第9.19节。
–enable-voodoono启用实验性3dfx Voodoo图形仿真。众所周知,Voodoo1可以工作,Voodoo2支持还不完整,但几乎可以使用。Banshee/Vodoo3支架正在建造中,但基本可用。有关更多信息,请参见第9.20节。
–enable-iodebugyes如果调试器在上,Dave Poirier已经使用I/O端口为调试器编写了一个实验接口,以便在来宾操作系统中运行的软件可以访问调试器的功能。只有当您正在开发用于Bochs的来宾操作系统代码时,才需要此选项。换句话说,大多数人不会。此外,它应该只与–enable-debugger一起使用。有关详细信息,请参阅开发人员文档。
–enable-pciyes启用有限的i440FX/i430FX/i440BX PCI支持。这仍然是不完整的,但可以使用。
–enable-pcidevno启用PCI主机设备映射支持。这需要启用pci以及Linux 2.4、2.6或3.x作为主机。警告:此Bochs功能尚未维护,可能会失败。
–enable-usbno启用i440FX/i440BX PCI USB支持(UHCI)。具有2端口根集线器和8种USB设备类型的主机控制器可用。
–enable-usb-ohcino启用USB OHCI支持。具有2端口根集线器的主机控制器可用(USB设备类型:与UHCI相同)。
–enable-usb-ehcino启用USB EHCI支持。提供带6端口根集线器的主机控制器(USB设备类型:与UHCI相同)。
–enable-usb-xhcino启用USB xHCI支持。具有4端口根集线器的主机控制器可用(USB设备类型:与UHCI相同)。
–enable-raw-serialno启用对串行端口仿真的支持以访问主机的串行端口。此功能仅部分针对Windows主机实现。

3.4.3.编译成功的记录

此示例显示了Linux上编译和安装的输出。

user$ ls -l bochs-2.5.tar.gz
-rw-r–r-- 1 user users 4117999 27. Nov 17:14 bochs-2.5.tar.gz
user$ gunzip -c bochs-2.5.tar.gz | tar -xvf -
bochs-2.5/
bochs-2.5/.conf.sparc
bochs-2.5/build/
bochs-2.5/build/macosx/
bochs-2.5/build/macosx/pbdevelopment.plist
bochs-2.5/build/macosx/make-dmg.sh
.
.
.
bochs-2.5/memory/memory.cc
bochs-2.5/memory/misc_mem.cc
bochs-2.5/memory/Makefile.in
user$ cd bochs-2.5
user$ ./configure --enable-cpu-level=6
checking build system type… x86_64-unknown-linux-gnu
checking host system type… x86_64-unknown-linux-gnu
checking target system type… x86_64-unknown-linux-gnu
checking if you are configuring for another platform… no
checking for standard CFLAGS on this platform…
checking for gcc… gcc
.
.
.
config.status: creating build/win32/nsis/bochs.nsi
config.status: creating host/linux/pcidev/Makefile
config.status: creating config.h
config.status: creating ltdlconf.h
user$ make
cd iodev &&
make libiodev.a
make[1]: Entering directory ‘/home/volker/Archiv/test/bochs-2.5/iodev’
g++ -c -I… -I./… -I…/instrument/stubs -I./…/instrument/stubs -g -O2 -D_FILE_OFFSET_BITS=64 -D_LARGE_FILES devices.cc -o devices.o
g++ -c -I… -I./… -I…/instrument/stubs -I./…/instrument/stubs -g -O2 -D_FILE_OFFSET_BITS=64 -D_LARGE_FILES virt_timer.cc -o virt_timer.o
g++ -c -I… -I./… -I…/instrument/stubs -I./…/instrument/stubs -g -O2 -D_FILE_OFFSET_BITS=64 -D_LARGE_FILES slowdown_timer.cc -o slowdown_timer.o
g++ -c -I… -I./… -I…/instrument/stubs -I./…/instrument/stubs -g -O2 -D_FILE_OFFSET_BITS=64 -D_LARGE_FILES pic.cc -o pic.o
.
.
.
echo done
done
/bin/sh ./libtool --mode=link g++ -o bochs -g -O2 -D_FILE_OFFSET_BITS=64 -D_LARGE_FILES -DBX_SHARE_PATH=‘“/usr/local/share/bochs”’ -export-dynamic logio.o main.o config.o load32bitOShack.o pc_system.o osdep.o plugin.o crc.o
iodev/libiodev.a cpu/libcpu.a cpu/cpudb/libcpudb.a
memory/libmemory.a gui/libgui.a
disasm/libdisasm.a
fpu/libfpu.a
-lSM -lICE -lX11 -lXpm -lXrandr




-lm
mkdir .libs
g++ -o bochs -g -O2 -D_FILE_OFFSET_BITS=64 -D_LARGE_FILES -DBX_SHARE_PATH=“/usr/local/share/bochs” logio.o main.o config.o load32bitOShack.o pc_system.o osdep.o plugin.o crc.o -Wl,–export-dynamic iodev/libiodev.a cpu/libcpu.a cpu/cpudb/libcpudb.a memory/libmemory.a gui/libgui.a disasm/libdisasm.a fpu/libfpu.a -lSM -lICE -lX11 -lXpm -lXrandr -lm
gcc -c -I. -I./. -Iinstrument/stubs -I./instrument/stubs -g -O2 -D_FILE_OFFSET_BITS=64 -D_LARGE_FILES ./misc/bximage.c -o misc/bximage.o
/bin/sh ./libtool --mode=link g++ -o bximage -g -O2 -D_FILE_OFFSET_BITS=64 -D_LARGE_FILES misc/bximage.o
g++ -o bximage -g -O2 -D_FILE_OFFSET_BITS=64 -D_LARGE_FILES misc/bximage.o
gcc -c -I. -I./. -Iinstrument/stubs -I./instrument/stubs -g -O2 -D_FILE_OFFSET_BITS=64 -D_LARGE_FILES ./misc/bxcommit.c -o misc/bxcommit.o
/bin/sh ./libtool --mode=link g++ -o bxcommit -g -O2 -D_FILE_OFFSET_BITS=64 -D_LARGE_FILES misc/bxcommit.o
g++ -o bxcommit -g -O2 -D_FILE_OFFSET_BITS=64 -D_LARGE_FILES misc/bxcommit.o
user$ su
root# make install
cd iodev &&
make libiodev.a
make[1]: Entering directory `/home/volker/Archiv/test/bochs-2.5/iodev’
.
.
.
for i in CHANGES COPYING README TODO; do if test -f $i; then install -m 644 i / u s r / l o c a l / s h a r e / d o c / b o c h s ; e l s e i n s t a l l − m 644. / i /usr/local/share/doc/bochs; else install -m 644 ./ i/usr/local/share/doc/bochs;elseinstallm644./i /usr/local/share/doc/bochs; fi; done
rm -f /usr/local/share/doc/bochs/README
cat ./build/linux/README.linux-binary ./README > /usr/local/share/doc/bochs/README
install -m 644 ./.bochsrc /usr/local/share/doc/bochs/bochsrc-sample.txt
root# exit
user$ _

3.4.4.使用Microsoft VC在Win32上编译++

\qquad 标准编译使用配置脚本,但Windows平台无法以本机方式运行配置脚本。该问题的当前解决方案是,Bochs配置脚本必须在支持shell脚本的不同平台上运行,并带有使其配置为Win32平台而不是本机平台的选项。许多人都可以访问可以运行配置脚本的UNIX计算机,或者您可以使用Cygwin或MinGW/MSYS来运行配置脚本。[3] 。

\qquad 在可以运行shell脚本的机器上下载Bochs源代码。如果要调整配置选项,请编辑配置快捷方式脚本.conf.win32-vcpp。然后在Bochs源目录中键入以下命令:
sh .conf.win32-vcpp
make win32_snap

\qquad 这些命令将运行配置步骤,生成VC++makefile和工作区文件,并将其全部打包到源目录上方目录中的.zip文件中。.zip文件已经准备好传输到目标Windows机器上进行解压缩和编译。或者,如果您在Cygwin中运行sh/make步骤,那么您已经在目标机器上了,因此不需要.zip文件。

\qquad 将Win32源传输到使用VC++的Windows计算机时,在文件夹“vs2013”中找到名为bochs.sln的工作区文件,并将其加载到VC++中。选择项目:设置活动项目并确保选择了“bochs”。然后选择Build:Build bochs.exe。这将构建所有所需的库(iodev、cpu等)以及辅助程序bximage.exe、bxhub.exe和niclist.exe。

\qquad 使用工作区既简单又直观,但有一点需要注意。工作区直接来自build/win32/vs2013ex-workspace.ZIP中的ZIP文件,并且不受配置脚本的控制。当您使用某些配置选项(例如,–with-sdl)进行编译时,您需要链接到其他库。现在,您必须手动将它们添加到VC++工作区中。在2.0版本中,我们通过添加#if…#endif围绕每个可选文件,并包括工作区中几乎每个Bochs源文件。这解决了在打开诸如–enable debugger之类的配置选项时必须手动将源文件添加到工作区的问题。添加链接库的问题仍未解决。

\qquad 提示:要在启用Bochs调试器的情况下进行编译,请在运行它之前,将–enable-debugger添加到.conf.win32-vcpp中的配置行。无需修改工作区。

\qquad 另一种编译方法是在MS-DOS窗口中运行nmake.exe。nmake不使用工作区文件,而是使用由configure生成的Bochs makefile。nmake方法目前用于构建发布二进制文件。

\qquad make install还不能与nmake一起使用。目前,它必须在Cygwin或MinGW/MSYS内部运行,并且需要设置环境变量INSTDIR。

3.4.5.使用Cygwin或MinGW/MSYS在Win32上编译

\qquad Cygwin是一个免费的类Unix Windows环境,由Steve Chamberlain编写,现在由RedHat,Inc.维护。您可以从www.Cygwin.com下载它。因为Cygvin支持配置脚本并使用GNU gcc/g++,您可以使用标准编译过程。配置脚本应该自动检测Cygwin,并将“-mno-cygwin-DWIN32”添加到编译器选项中。如果你只需键入以下内容,你应该得到一个工作Bochs:
configure
make

\qquad 或者,您可以使用Cygwin的配置快捷方式脚本.conf.win32-Cygwin,而不是直接运行configure。如果这个脚本接近你需要的,只需编辑脚本,然后运行它。运行快捷配置脚本并在Cygwin中编译的命令是:
sh .conf.win32-cygwin
make

\qquad 要找出在Cygwin中工作的已知选项,请在任何文本编辑器editor/viewer中打开文件.conf.win32-Cygwin,并查看该文件的末尾。

\qquad 当使用gcc 4.7或更新版本时,您需要将switch-mno-ms-bitfields添加到CFLAGS中,以确保hdimage和网络结构按预期打包。

\qquad 命令make install将Bochs文件安装在构建环境的目录结构中。要将Bochs安装到任何所需的文件夹中,您需要使用install_win32目标。它需要设置环境变量INSTDIR。

3.4.6.使用CodeWarrior在MacOS 9上编译

\qquad 这可能是自1999年以来从未尝试过的。理论上,您可以在Unix盒子上运行sh .conf.macos来构建makefile和头文件,将整个文件复制到Mac上,然后使用CodeWarrior进行编译。由于它已经很久没有经过测试了,很可能需要做一些工作来更新Mac端口。

\qquad 如果您有兴趣并拥有所需的MacOS开发工具,请联系bochs开发人员邮件列表,让我们知道。有人几乎每个月都会请求一次MacOS端口,但没有一个开发人员知道如何帮助他们。

3.4.7.在MacOS X上编译

\qquad Emmanuel Mailliard开发的带有Carbon API的MacOS X端口非常新,Bryce Denney添加了configure和makefile支持。您将需要开发工具CD中的编译器和库。如果您只需键入以下内容,Bochs应使用Carbon GUI进行配置和编译:
configure
make

\qquad 或者,您可以使用MacOS X的配置快捷方式脚本.conf.macosx,而不是直接运行configure。如果此脚本接近您的需要,只需编辑脚本,然后运行它。要使用配置快捷方式脚本并进行编译,命令如下
sh .conf.macosx
make

\qquad MacOSX对应用程序捆绑包有一种特殊的格式,它看起来像一个包含所需资源文件和二进制文件的目录。Makefile目前使用mkdir和copy“手动”创建这个应用程序包,这肯定是错误的做法。Bryce不知道从Makefile创建应用程序的官方方法,所以在真正的Mac开发人员帮助清理之前,这种黑客攻击将一直存在。

\qquad 在MacOSX上,默认的GUI是Carbon界面,但您也可以尝试其他Bochs GUI。对于X windows 使用–with-x11,对于VNC/rfb使用–with-rfb,对于SDL使用–with-sdl或对于SDL2使用–with-shdl2。

3.4.8.在Amiga/MorphOS上编译

\qquad Nicholai Benalal为Amiga上运行的MorphOS创建了这个端口。它应该与以下内容一起编译:
configure
make

If the platform is not detected properly, you might need to use --enable-amigaos as a configure option. Optionally, you can use the configure shortcut script, .conf.amigaos.
\qquad 如果平台检测不正确,您可能需要使用–enable-amigaos作为配置选项。您可以选择使用配置快捷方式脚本.conf.amigaos。

3.4.9.使用RFB接口进行编译

\qquad RFB代码由Don Beckerx-odus@iname.com编写,在他的网站上有一个Bochs-RFB网页,http://www.psyon.org/bochs-rfb/.
This interface allows you to view the Bochs display with AT&T’s VNC Viewer. The protocol used between a VNC server and a VNC viewer is called RFB. Because the RFB code in Bochs is written with portable network socket and POSIX thread code, it can be compiled on many platforms and has been tested in Linux and Win32. No additional libraries are required. To try it, type:
\qquad 此界面允许您使用AT&T的VNC Viewer查看Bochs显示。VNC服务器和VNC查看器之间使用的协议称为RFB。由于Bochs中的RFB代码是用可移植网络套接字和POSIX线程代码编写的,因此它可以在许多平台上编译,并已在Linux和Win32中进行了测试。不需要额外的库。要尝试,请键入:
configure --with-rfb
make

RFB当前使用此设置:
端口范围5900到5949(使用第一个可用端口)
没有身份验证
默认情况下等待客户端30秒
仅支持8 bpp(BGR233/RGB332)
如果客户端不支持调整大小:桌面尺寸720x480(适用于文本模式和标准VGA)
如果支持调整大小:最大分辨率1280x1024

通过显示库选项“timeout”,可以更改30秒的默认值。如果值为0,则可以在没有连接客户端的情况下启动模拟。

3.4.10.使用VNCSRV接口进行编译

\qquad LibVNCServer是一个跨平台库,允许轻松实现VNC服务器功能。在LibVNCServer支持的平台上,Bochs可以通过以下方式编译并支持它:
configure --with-vncsrv
make

与RFB GUI不同,此新实现不限于8bpp,并且可以将Bochs会话连接到web浏览器。

3.4.11.使用SDL接口进行编译

\qquad Dave Poirier为Bochs编写了一个SDL接口。Simple DirectMedia Layer,简称SDL,是一个从libsdl.org分发的跨平台多媒体库。SDL可用于许多平台,包括Win32、Linux、BSD、IRIX、MacOS、MacOS X和AmigaOS。

\qquad 要使用SDL编译Bochs,您必须首先从libsdl.org安装SDL库。您可以获取源代码并自行编译,也可以安装平台的开发库(已编译)。然后,进入Bochs目录并键入:
configure --with-sdl
make

\qquad 如果你在FreeBSD上,并且使用ports集合安装了SDL,Bochs将无法自动找到库,因为在这种情况下,SDL配置脚本被称为sdl11-config(即使是1.2版本)。让Bochs找到它的最简单方法是在路径中的目录中创建一个指向该脚本的符号链接,称为SDL-config。例如:
ln -s /usr/local/bin/sdl11-config ~/bin/sdl-config

\qquad 若要在Microsoft VS2013Ex中编译,必须在不同的系统上进行配置(请参阅使用Microsoft VC++在Win32上编译)。在运行配置脚本之前,必须将–with-sdl添加到快捷方式脚本中。如果已经进行了配置,则可以在config.h中将BX_WITH_SDL设置为1。

然后,您必须以这种方式为SDL设置项目:

-将源文件sdl.cc添加到模块gui

-添加SDL的路径,包括模块bochs和gui的文件

-将lbraries SDL.lib和SDLmain.lib添加到模块块

-将所有模块的运行库更改为多线程DLL(/MD)

目前还不支持使用MSVC nmake进行编译。

3.4.12.使用SDL版本2接口进行编译

\qquad SDL库版本2现在也由Bochs支持。有关SDL的一些基本信息,请参阅第3.4.11节。启用SDL2支持的配置选项是–with-sdl2,配置脚本称为sdl2-config。请注意,SDL版本1.2.x和2.x的Bochs-gui是互斥的。遗留的SDL gui支持总有一天会被删除。当使用gui库自动检测(–with-all-libs)时,配置脚本首先探测SDL版本2。

3.4.13.使用wxWidgets接口进行编译

\qquad wxWidgets是一个跨平台的C++用户界面库,您可以在wxWidgets.org上免费下载。Bochs的wxWidget端口提供了一个用于编辑bochsrc选项的图形配置界面(请参阅config_interface选项)和一个显示器(请参阅display_library选项)。它由布莱斯·丹尼、唐·贝克尔、戴夫·波里埃和沃尔克·鲁珀特撰写。
configure --with-wx
make

If you want Bochs to use a wxWidgets installation not in your path (but installed somewhere else), you need to set the WX_CONFIG environment variable to the proper wx-config script, before running configure (example for csh):
\qquad 如果您希望Bochs不在您的路径中使用wxWidgets安装(但安装在其他地方),则在运行configure(例如csh)之前,需要将WX_CONFIG环境变量设置为正确的wx-config配置脚本:
setenv WX_CONFIG ‘/home/compile/wx/bin/wx-config’

3.4.14.在Linux上构建RPM

\qquad RPM代表“RedHat软件包管理器”。RPM是一个压缩文件,包含要安装在系统上的文件。Bochs有一个名为make-rpm的特殊shell脚本,它有助于构建Bochs的RPM。从一个干净的源目录开始。如果要调整配置选项,请先编辑.conf.linux。然后,键入:
./build/redhat/make-rpm | tee /tmp/build.txt

\qquad 当这个命令完成时,您应该在当前目录中有一个源RPM和一个二进制RPM Bochs。命令的tee部分(可选)将构建过程的记录保存到/tmp/build.txt中,如果出现任何问题,这将非常有用。此处提供了安装RPM的说明。
Note: In the past, you had to build rpms as root, but as of version 2.0 you can build them as a normal user.
注意:在过去,您必须以root用户身份构建rpms,但从2.0版本开始,您可以以普通用户身份构建它们。

3.4.15.编译问题

3.4.15.1.配置脚本失败

\qquad 由于各种原因,配置脚本可能会失败。如果shell上的错误消息没有提供足够的信息,建议查看输出文件config.log以了解具体发生了什么。可以通过修改所使用的配置选项来解决以下问题:

  • 不推荐使用的选项(不再需要/支持以前Bochs版本的选项)

  • 互斥选项(例如–enable-debugger和–enable-gdb-stub)

  • 依赖选项(例如USB支持需要PCI支持)

  • 不完整选项(例如–enable-cpu-level需要一个参数)

  • 未安装库的开发包(例如用于–with-wx)
    如果配置问题无法通过选项更改 与/或 安装 开发包/工具 来解决,则应在bochs开发人员邮件列表或bochs项目的SF错误跟踪器中报告。

3.4.15.2.制作/编译失败

\qquad 只有当指定的目标不受环境支持或根本不存在时,make实用程序本身才会失败。在大多数情况下,从make调用的程序会导致失败(例如编译器/链接器)。

\qquad 在某些情况下,通过调用make-dist-clean并再次运行configure脚本来完全重建Bochs可能会很有用。如果使用了SVN的开发
\qquad 有时,可以通过禁用一个或多个配置选项来隔离失败的代码段。例如,如果编译在cpu/avx*文件中的某个位置失败,那么在没有–enable-avx的情况下进行配置可能会有所帮助。对于由配置选项控制的其他Bochs设施也可以这样做。

3.4.15.3.自编译Bochs的运行时问题

\qquad 成功编译后,如果至少有一个库安装不正确,自编译的Bochs可能会失败。如果库由一个开发包和一个运行时包组成,而缺少第二个包,则可能会发生这种情况。另一个问题可能出现在像Cygwin和MinGW/MSYS这样的构建环境中。在那里构建的应用程序通常被设计为在环境内部运行。当从Windows外壳启动它们时,可能会导致类似“missingcygwin1.dll”或类似的错误。在这种情况下,必须将丢失的DLL从例如Cygwin文件夹复制到编译的EXE文件的位置。

初充:我的linux上的编译过程

1、下载linux版的bochs文件

下载地址:https://sourceforge.net/projects/bochs/files/bochs/2.7/

文件:
在这里插入图片描述

2、 编译前准备

1、在ubuntu 16.4环境下,提前已安装好了GNU的gcc 与 g++等。
2、把bochs-2.7.tar.gz 在~/Download下展开。会自动展开在目录bochs-2.7。进入该目录。
3、把linux的通用配置脚本复制一份:
cp .conf.linux myconf.linux
4、进入myconf.linux,准备修改
vim myconf.linux

5、修改如下:

在这里插入图片描述
全部内容如下:

#!/bin/sh
#
# .conf.linux
#

which_config=normal
#which_config=plugins

CC="gcc"
CXX="c++"
CFLAGS="-Wall -O3 -fomit-frame-pointer -pipe"    # for speed
#CFLAGS="-Wall -g -pipe"                         # for development
CXXFLAGS="$CFLAGS"

export CC
export CXX
export CFLAGS
export CXXFLAGS


case $which_config in

  normal)
    #######################################################################
    # configuration 1 for release binary RPMs
    # Include a few standard options, speed optimizations, X11 only.
    #######################################################################
    ./configure  \
                --prefix=/home/mao/Documents/bochs-2.7 \
                --enable-debugger\
                --enable-iodebug \
                --with-x \
                --with-x11 \
                --enable-sb16 \
                --enable-ne2000 \
                --enable-all-optimizations \
                --enable-cpu-level=6 \
                --enable-x86-64 \
                --enable-vmx=2 \
                --enable-pci \
                --enable-clgd54xx \
                --enable-voodoo \
                --enable-usb \
                --enable-usb-ohci \
                --enable-usb-ehci \
                --enable-usb-xhci \
                --enable-busmouse \
                --enable-es1370 \
                --enable-e1000 \
                --enable-show-ips \
                ${CONFIGURE_ARGS}
    ;;

  plugins)
    #######################################################################
    # configuration 2 for release binary RPMs
    # Include plugins, every possible gui.
    #######################################################################
    ./configure  \
                --prefix=/home/mao/Documents/bochs-2.7 \
                --enable-debugger\
                --enable-sb16 \
                --enable-ne2000 \
                --enable-all-optimizations \
                --enable-cpu-level=6 \
                --enable-x86-64 \
                --enable-vmx=2 \
                --enable-pci \
                --enable-clgd54xx \
                --enable-voodoo \
                --enable-usb \
                --enable-usb-ohci \
                --enable-usb-ehci \
                --enable-usb-xhci \
                --enable-busmouse \
                --enable-es1370 \
                --enable-e1000 \
                --enable-plugins \
                --enable-show-ips \
                --with-all-libs \
                ${CONFIGURE_ARGS}
    ;;

esac

6、配置
执行自动配置,命令如下:
sh myconf.linux

3、编译

3.1、执行命令 make

编译过程中出现如下错误:
在这里插入图片描述

这是一个编译 Bochs 时常见的错误。它表示在编译 Bochs 的 X11 模块时,无法找到 Xlib.h 这个头文件。
为了解决这个问题,您需要安装 X11 的开发文件。具体的命令如下:
在 Ubuntu/Debian 上:

bash
sudo apt-get install libx11-dev

3.2、再次make

又出现下列错误:
在这里插入图片描述

这里解释一下Xrandr

Xrandr 是 X Window 系统的一个扩展,全称为 X Resize, Rotate and Reflect 支持。
它提供了更动态和灵活的屏幕配置支持,允许在运行时通过软件完成以下配置:

  • 改变屏幕的大小(Resolution)和刷新率(Refresh rate)
  • 旋转(Rotate)屏幕显示方向
  • 镜像(Reflect)屏幕显示
    这些配置通过 RandR 扩展在 X 服务器和 X 客户端程序之间进行协商和控制。使用 RandR,用户可以通过 GUI 或命令行工具动态更改屏幕布局,而无需重新启动 X 服务器。
    具体来说,Xrandr 支持:
  • 动态设置屏幕尺寸、刷新率以及输出设备
  • 添加、删除和控制输出设备,如 VGA、LVDS、DisplayPort 等
  • 启用、禁用和控制现有的输出设备
  • 镜像显示或扩展桌面到多个输出设备
  • 旋转屏幕到横屏或竖屏模式
    因此,使用 Xrandr 可以提供更加丰富和灵活的显示配置,用户可以方便地在不同的屏幕模式之间切换,实现各种桌面布局。

要解决这个问题,您有两种选择:

  • 1、 升级 X11 库版本。以及安装libxrandr-dev 包, Xrandr 是 X11 的扩展功能,较新的 X11 版本已经内置了 Xrandr 支持。所以更新 X11 库可能会解决此问题。
    对于 Ubuntu/Debian 系统:
    运行以下命令即可更新 X11 库:
bash
sudo apt-get update
sudo apt-get upgrade libx11-dev
sudo apt-get install libxrandr-dev
  • 2、禁用 Bochs 的 Xrandr 支持。
    您可以在配置 Bochs 时添加参数: --disable-xrandr 。这样 Bochs 就不会编译 Xrandr 相关的功能,此错误就会消失。
    举个例子,如果您使用源码包 bochs-2.7.tar.gz,可以在配置时运行:
bash
./configure --disable-xrandr

如果您使用 bochs-2.7-msvc-src.zip 和 Visual Studio,可以在 CMake GUI 或命令行中添加该选项:
-DENABLE_XRANDR=OFF 添加这个参数后,重新生成项目文件和编译 Bochs,就可以解决此错误了。

3.3 升级Xrandr后,再次make

要清除原来的旧文件:

make clean

重新配置:

sh myconf.linux

再次编译

make

到这里,应该编译成功了。

安装

make install

成功后,根据在myconf.linux中设置的安装目录 --prefix=/home/mao/Documents/bochs-2.7
就可以在/home/mao/Documents目录下看到有一个bochs-2.7的目录。进入后可以看到如下内容:
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Bochs是一个用于模拟x86计算机的开源软件,其使用手册详细介绍了Bochs的使用方法和功能。 Bochs使用手册首先介绍了如何在不同操作系统上安装和配置Bochs。针对不同操作系统,手册提供了相应的安装步骤和配置参数,让用户可以快速上手。 手册接着介绍了Bochs模拟器的配置文件,这个文件包含了模拟器运行时的各种设置,如内存大小、硬盘映像文件、网络配置等。手册提供了详细的配置项说明,让用户了解并能自己根据需求进行配置。 手册的下一部分是关于Bochs的调试功能的介绍。调试是Bochs的一个重要特性,它可以帮助用户定位和修复代码中的问题。手册详细解释了调试器的使用方法,包括设置断点、单步执行、查看寄存器和内存等。通过调试功能,用户可以更好地理解代码的执行过程,并找到bug的所在。 在手册的后续部分,会介绍如何使用Bochs加载和运行操作系统。手册详细说明了如何创建一个合适的硬盘映像文件,以及如何将操作系统的安装介质加载到Bochs中进行安装和运行。用户可以按照手册的指导,成功地在Bochs中运行自己的操作系统。 最后,手册还提供了一些有关Bochs其他特性的简要说明。这些特性包括网络模拟、音频模拟和外设模拟等。用户可以根据需要选择性地了解和使用这些特性。 总之,Bochs使用手册详细地介绍了Bochs的各种功能和使用方法。通过阅读手册,用户可以了解如何安装和配置Bochs,使用其调试功能,加载和运行操作系统,并了解其他特性。对于想要学习和使用Bochs的人来说,这本手册将是一个宝贵的参考资料。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值