操作系统⮱⮱002【bochs学习01】2019-11-23

Alchemical Symbols ⭕🟪🧧🥬🟥🟦🟧

←↑→↓↖↙↗↘↕⏤
unicode=Geometric Shapes
▶ 仅仅个别字不同的时候的对比标识

◉ 着重强调

  ◆ 1、
  ◆ 2、
  ◆ 3、

  
  
  
  
  
  
  
  

Miscellaneous Symbols


Dingbats
✍ 重点记忆,个人总结的点,或者知识。
✎✎

⬢命令集⬢⬢⬢⬢⬢⬢⬢⬢⬢⬢⬢⬢⬢⬢⬢⬢⬢⬢⬢⬢⬢⬢⬢⬢⬢⬢⬢⬢⬢⬢⬢⬢⬢⬢⬢⬢⬢⬢⬢⬢⬢⬢⬢⬢命令集⬢
sudo mkdir /home/asd
sudo mount -t vboxsf 1 /home/asd
ls /home/asd

⬢命令集⬢⬢⬢⬢⬢⬢⬢⬢⬢⬢⬢⬢⬢⬢⬢⬢⬢⬢⬢⬢⬢⬢⬢⬢⬢⬢⬢⬢⬢⬢⬢⬢⬢⬢⬢⬢⬢⬢⬢⬢⬢⬢⬢⬢命令集⬢

章节号 内容            
1图片格式(png) 宽度大于610px,保持高宽比减低为620px
1-1 应用
1-1-1 方法

官方说明文档http://bochs.sourceforge.net/doc/docbook/user/introduction.html

第1章节  Bochs简介

  Bochs is a program that simulates a complete Intel x86 computer. It includes emulation of the Intel x86 CPU, common I/O devices, and a custom BIOS. Bochs can be compiled to emulate many different x86 CPUs, from early 386 to the most recent x86-64 Intel and AMD processors which may even not reached the market yet. Bochs interprets every instruction from power-up to reboot, and has device models for all of the standard PC peripherals: keyboard, mouse, VGA card/monitor, disks, timer chips, network card, etc. Because Bochs simulates the whole PC environment, the software running in the simulation "believes" it is running on a real machine. This approach allows Bochs to run a wide variety of software with no modification, include most popular x86 operating systems: Windows 95/98/NT/2000/XP and Vista, all Linux flavors, all BSD flavors, and more.
  Bochs是一个模拟完整Intel x86计算机的程序。它包括对Intel x86 CPU、通用I/O设备和自定义BIOS的模拟。Bochs可以被编译来模拟许多不同的x86处理器,从早期的386到最新的x86-64英特尔和AMD处理器,这些处理器可能还没有上市。Bochs解释从开机到重启的每一条指令,并为所有标准PC外围设备提供设备模型:键盘、鼠标、VGA卡/显示器、磁盘、定时器芯片、网卡等。由于Bochs模拟整个PC环境,因此在模拟中运行的软件“相信”它是在真实的机器上运行的。这种方法允许Bochs在不做任何修改的情况下运行各种各样的软件,包括最流行的x86操作系统:Windows 95/98/NT/2000/XP和Vista,所有Linux版本,所有BSD版本,等等。

  Bochs is written in the C++ programming language, and is designed to run on many different host platforms, including x86, PPC, Alpha, Sun, and MIPS. No matter what the host platform is, Bochs still simulates x86 hardware. In other words, it does not depend on the native instructions of the host machine at all. This is both a strength and a weakness, and it's the major difference between Bochs and many other x86 emulation software such as VirtualBox, VMware, etc. Because Bochs uses software simulation for every single x86 instruction, it can simulate a Windows application on an Alpha or Sun workstation. However, the downside of Bochs' approach is simulation performance. To model the processor accurately, Bochs must run many instructions for every simulated x86 instruction, and this makes the simulated machine many times slower than the physical machine. Commercial PC emulators (VMware, Connectix, etc.) can achieve much high emulation speed using a technique called virtualization, but they are neither portable to non-x86 platforms nor open source.
  Bochs是用C++编程语言编写的,它被设计为运行在许多不同的主机平台上,包括x86、PPC、Alpha、Sun和MIPS。不管主机平台是什么,Bochs仍然模拟x86硬件。换句话说,它完全不依赖于主机的本机指令。这既是优点也是缺点,也是Bochs与许多其他x86仿真软件(如VirtualBox、VMware等)的主要区别。因为Bochs对每个x86指令都使用软件仿真,所以它可以在Alpha或Sun工作站上模拟Windows应用程序。然而,Bochs方法的缺点是模拟性能。为了精确地模拟处理器,Bochs必须为每个模拟x86指令运行许多指令,这使得模拟机器比物理机器慢很多倍。商用PC模拟器(VMware、Connectix等)使用一种称为虚拟化的技术可以实现非常高的仿真速度,但它们既不能移植到非x86平台,也不能开源。

  Bochs Features功能特性
| Feature                            | Supported? | Description                                                  |
| ---------------------------------- | ---------- | ------------------------------------------------------------ |
| configure script                   | Yes        | Bochs  uses GNU autoconf to configure Makefiles and headers. Autoconf helps Bochs to  compile on a wide variety of platforms. |
| 386,486,Pentium Emulation          | Yes        | Bochs  can be configured to emulate one of several families of Intel hardware. Some  Pentium features are incomplete, such as SMM (System Management Mode). |
| P6 and later CPU Emulation         | Yes        | Bochs  can be configured to emulate any P6 family processor including optional MMX  and SSEx instructions. |
| x86-64 Extensions Emulation        | Yes        | Bochs  can be configured to emulate x86-64 with many recent Intel and AMD  extensions. |
| Command Line Debugger              | Yes        | Powerful  command line debugger (optional) that lets you stop execution and examine  registers and memory, set breakpoints, etc. |
| GUI Debugger                       | Yes        | Chourdakis  Michael and Bruce Ewing contributed very powerful GUI frontend for Bochs  internal debugger. GUI debugger frontend is supported for Win32 and GTK2  hosts. |
| Floating Point                     | Yes        | [Uses   software floating point engine based on SoftFloat floating point   emulation library.](http://www.jhauser.us/arithmetic/SoftFloat.html) |
| Enhanced BIOS                      | Yes        | [Implements ElTorito, EDD v3.0,   basic APM feature, PCIBIOS features and the PCI interrupt routing table. The   latest version of the Bochs BIOS has a 32-bit init for ACPI, SMM and SMP.   Bochs also known to work with recent SeaBIOS images.](http://www.seabios.org/) |
| VGA                                | Yes        | VGA  color graphics emulation in a window.                   |
| VBE (VESA) Support                 | Yes        | [Currently   resolutions up to 2560x1600x32bpp are supported. You must enable VBE with the   VGA extension option and use the LGPL'd VGABIOS. For more information   see Section 8.19.](http://bochs.sourceforge.net/doc/docbook/user/vesa-notes.html) |
| Cirrus Logic video card            | Yes        | [Cirrus   Logic CL-GD5430 ISA or CL-GD5446 PCI video card support. For more information   see Section 8.20.](http://bochs.sourceforge.net/doc/docbook/user/cirrus-notes.html) |
| Floppy disk                        | Yes        | Supports  floppy disk images on all platforms: 2.88M 3.5", 1.44M 3.5", 1.2M  5.25", 720K 3.5" and 360K 5.25". On Unix and Windows  NT/2000/XP, Bochs can access the physical floppy drive. It is also possible  to use a local directory as VFAT media (1.44M only). |
| Multiple ATA channels              | Yes        | Emulates  up to 4 ATA channels. Up to 8 ATA/ATAPI emulated devices can be attached, two  per ATA channel. So you can have eight hard disks or seven hard disks and a  CD-ROM or four hard disks and four CD-ROMs, or one hard disk and seven  CD-ROMs, etc... |
| Hard disk                          | Yes        | Emulates  ATA-6/IDE hard drives via image files. Physical hard disk access is supported  on some architecture, but NOT recommended, primarily for safety reasons. With  LBA48 support, hard disks up to 255TB are supported, on any platform that  support large files access. It is also possible to use a local directory as  VFAT drive. |
| CD-ROM                             | Yes        | Emulates  ATAPI-4/IDE CD-ROM. The CD-ROMs can read from an ISO disk image on any  platform. On Windows (NT/2000/XP/Vista), Linux, SunOS, FreeBSD, NetBSD,  OpenBSD, Amiga/MorphOS and MacOSX, Bochs can read from the physical CD-ROM  drive. The Bochs BIOS supports booting from the first CD-ROM drive. |
| Keyboard                           | Yes        | Emulates  a PS/2 keyboard with North American key mappings. Optional keyboard layout  remapping files are provided to support localized keyboard in X11 (Belgian,  Danish, French, German, Italian, Russian, Slovenian, Spanish, Swedish, U.K.)  and SDL/SDL2 (German). |
| Mouse                              | Yes        | Emulates  a serial, PS/2, bus or USB mouse with 3 buttons + optional mouse wheel  support. There is also a USB tablet emulation available. |
| Sound card                         | Yes        | [Emulates a Sound Blaster 16 card (ISA, no plug&play) or an   ES1370 PCI card. The SB16 emulation provides wave input / output, the OPL3   chip, the external MIDI port and volume control for wave and FM. The ES1370   provides wave input / output, the MIDI UART port and volume control for wave   output. On Windows, Linux, FreeBSD, MacOS 9, MacOSX and all platforms   supported by SDL, the output can be sent to the host computer's sound system.   For the SB16, see the developer documentation for details.](http://bochs.sourceforge.net/doc/docbook/development/sb16-emulation-basics.html) |
| Network card                       | Yes        | [Emulates an   NE2000 compatible network card (ISA / PCI) or an Intel(R) 82540EM Gigabit   Ethernet adapter (PCI). On Windows NT/2000, Linux, FreeBSD, and NetBSD, Bochs   will forward packets to and from the operating system so that the guest OS   can talk on the physical network. Unfortunately, on some platforms the guest   OS can talk to any machine on the network BUT NOT the host machine. On   Windows and on systems that allow the TAP or TUN/TAP interface, there is no   such limitation. Often the host machine may be configured so the guest OS has   access to the internet. On MacOSX, you may download the TUN driver   from: http://chrisp.de/en/projects/tunnel.html](http://chrisp.de/en/projects/tunnel.html) |
| Parallel Port                      | Yes        | Parallel  port emulation was added by Volker Ruppert for Bochs 1.3. Data that is sent  to the parallel port by the guest OS can be saved into a file or sent  directly into the parallel port device (Unix only). |
| Serial Port                        | Yes        | The  serial port (16550A UART emulation) is usable, on GNU/Linux, NetBSD, OpenBSD,  FreeBSD and MacOSX as host and guest. On other OSes the emulation is present,  but the connection to hard- or software of the host is not implemented yet.  Up to 4 ports are available. |
| Gameport                           | Yes        | Emulates  a standard PC gameport. The connection to a real joystick is currently  supported on Linux and win32 only. |
| PCI                                | Yes        | Emulates  most of the i440FX PCI chipset. The Host-to-PCI bridge (PMC/DBX), the  PCI-to-ISA bridge and the PCI IDE controller (PIIX3) are available. For PCI  cards there are 5 PCI slots supported. |
| USB                                | Yes        | Four  types of host controllers (UHCI, OHCI, EHCI and xHCI) and the devices  'mouse', 'tablet', 'keypad', 'disk', 'cdrom', 'floppy, ''hub' and 'printer'  are available. Plugging in and removing devices at runtime is possible.  Access to real hardware is not implemented yet. |
| Plugins                            | Yes        | Compiling  gui and devices as plugins is supported on Linux, MacOS X, Solaris, Cygwin,  MinGW/MSYS, MSVC nmake and the VS2013 IDE (workspace provided). |
| PIC                                | Yes        | Master  and slave programmable interrupt controller.         |
| CMOS functions                     | Yes        | Real  time clock (RTC) and CMOS RAM are available            |
| Dynamic Translation/Virtualization | No         | [Because   Bochs is designed to be portable, it does not attempt to do any dynamic code   translation or virtualization. See Section 1.1 for details.](http://bochs.sourceforge.net/doc/docbook/user/introduction.html#WHATISBOCHS) |
| Simulate a Multiprocessor          | Yes        | Bochs  can be configured to simulate up to 254 processor threads. This feature is  still experimental, but it can boot several Linux or Windows guests with SMP  support. Please note that this does NOT mean that Bochs can run faster on a  physical SMP machine. |
| Take advantage of your SMP box     | Minimal    | At  present, Bochs only uses threads in the lowlevel sound output code. The  simulation itself uses only one thread, so it will not run any faster on  multiprocessor hardware. |
| Copy and Paste                     | Yes        | Depending  on the host platform, the text-mode screen text can be exported to the  clipboard. Text in the clipboard can also be pasted, through Bochs, to the  guest OS, as simulated keystrokes. |

第3章节  安装(Installation)


  • 3-1 下载和获得Bochs

  官方下载网址:bochs.sourceforge.net
  The development versions (sometimes called SVN snapshots) may have some newer bug fixes and new features, but have not been tested as much as the releases.
  开发版本(有时称为SVN snapshots)可能有一些较新的错误修复和新功能,但没有像发行版那样经过测试。

  Second, you can choose to compile Bochs from source code or install a binary (if one is available for your platform). Binary packages will be quicker to install, and most include a small demo of a guest operating system called DLX Linux to get you started. However, some features can only be enabled if you compile Bochs yourself, for example the Bochs debugger. For multiuser systems, you will probably need system administrator privileges (root) to install a binary package. If you decide to get a binary, download it to your hard disk, uncompress it, then go to the section called Installing a Binary for more information.
  但是,部分功能只能通过编译源码安装的方式来开启,比如Bochs debugger。这应该就是很多人选择源码安装的原因所在了

  下载源码包后,网上较多使用如下命令:

sudo tar zxvf bochs-2.6.9.tar.gz

  详细使用手册http://www.gnu.org/software/tar/manual/
  之前一直疑惑,tar的命令格式不一,后man之后,才大致明白道理为:命令有3种使用格式:

1、  Traditional usage
       tar {A|c|d|r|t|u|x}[GnSkUWOmpsMBiajJzZhPlRvwo] [ARG...]

2、   UNIX-style usage
       tar -A [OPTIONS] ARCHIVE ARCHIVE

3、   GNU-style usage
       tar {--catenate|--concatenate} [OPTIONS] ARCHIVE ARCHIVE
        -z, --gzip, --gunzip, --ungzip
              Filter the archive through gzip(1).

        -x, --extract, --get
              Extract files from an archive.  Arguments are optional.  When given, they
              specify names of the archive members to be extracted.

        -v, --verbose
              Verbosely list files processed.

Device selection and switching
       -f, --file=ARCHIVE
              Use  archive  file  or  device ARCHIVE.  If this option is not given, tar
              will first examine the environment variable `TAPE'.  If it  is  set,  its
              value  will  be used as the archive name.  Otherwise, tar will assume the
              compiled-in default.  The default value can be inspected either using the
              --show-defaults option, or at the end of the tar --help output.

              An  archive  name  that has a colon in it specifies a file or device on a
              remote machine.  The part before the colon is taken as the  machine  name
              or  IP  address,  and  the  part after it as the file or device pathname,
              e.g.:

              --file=remotehost:/dev/sr0

              An optional username can be prefixed to the hostname, placing  a  @  sign
              between them.

               By default, the remote host is accessed via the rsh(1) command.  Nowadays
              it is common to use ssh(1) instead.  You can do so by giving the  follow‐
              ing command line option:

              --rsh-command=/usr/bin/ssh

              The  remote  machine  should  have  the rmt(8) command installed.  If its
              pathname does not match tar's default, you can inform tar about the  cor‐
              rect pathname using the --rmt-command option.


  • 3-2 使用SVN获得源码( Tracking the source code with SVN)

  SVN网站http://subversion.apache.org/

  • 3-3 二进制安装(Installing a Binary)

  区分不同平台的安装方式:
  1、windows
  2、Linux RPM

  user$ su
  Password:
  root$ ls -l bochs-2.5.x86_64.rpm
  -rw-r--r--    1 user     users     2628643 Nov 27 17:20 bochs-2.5.x86_64.rpm
  root$ rpm -i bochs-2.5.x86_64.rpm
  root$ exit
  user$ _

  3、 MacOS X DMG

  • 3-4  编译安装(Compiling Bochs)

  Bochs is written in C++, so you need a C++ compiler on your system. Most platforms have been tested with GNU gcc/g++, but other compilers are known to work too. By now, you should have unpacked your source TAR file or checked out Bochs from SVN. If not, you can return to Downloading Bochs for details. The top level directory of the source code will be referred to as $BOCHS. ( $BOCHS contains the files bochs.h and main.cc and subdirectories cpu and bios.)
  Bochs使用c++写的,所以要编译Bochs,你的电脑上必须要有c++的编译器才行,这也是为什么很多解决办法中都有提及安装c++编译器的事。

  The standard compile process has three basic steps: configure, make, and make install. Each step is described in a separate section below. The standard compile process is used on all Unix machines, MacOS X, and Cygwin (win32). There are separate instructions for compiling for Win32 with Microsoft VC++.
  标准的编译步骤为3个:
  ◆ 1、configure
  ◆ 2、make
  ◆ 3、make install

  3-4-1. 编译安装(Compiling Bochs)—Configure

  首先下载一个源码包:
  sudo wget https://sourceforge.net/projects/bochs/files/bochs/2.6.9/bochs-2.6.9.tar.gz
  然后解压看看内容:

root@pop-os:/home# tar zxvf bochs-2.6.9.tar.gz 
root@pop-os:/home/bochs-2.6.9# ls -ilh
total 2.4M
449638 -rwxr-xr-x 1 eqweq users 822K Apr  9  2017 configure

  可以看出这个configure是可执行文件。用vim打开看一看:

root@pop-os:/home/bochs-2.6.9# vim configure



  There is a script called configure which tests your machine, C/C++ compiler and libraries to discover what settings should work on your system. If you run configure with no arguments after it, defaults will be used for all settings. To change the settings, you can run configure with options that override the defaults. You can get a list of valid configure options by typing configure --help. One useful configure option is --prefix=directory, which sets the directory in which Bochs will be installed. All the possible configure options are documented in a later section.
  使用configure --help可以显示合法的设置选项:

root@pop-os:/home/bochs-2.6.9# ./configure --help

`configure' configures this package to adapt to many kinds of systems.

Usage: ./configure [OPTION]... [VAR=VALUE]...

To assign environment variables (e.g., CC, CFLAGS...), specify them as
VAR=VALUE.  See below for descriptions of some of the useful variables.

Defaults for the options are specified in brackets.

Configuration:
  -h, --help              display this help and exit
      --help=short        display options specific to this package
      --help=recursive    display the short help of all the included packages
  -V, --version           display version information and exit
  -q, --quiet, --silent   do not print `checking ...' messages
      --cache-file=FILE   cache test results in FILE [disabled]
  -C, --config-cache      alias for `--cache-file=config.cache'
  -n, --no-create         do not create output files
      --srcdir=DIR        find the sources in DIR [configure dir or `..']

Installation directories:
  --prefix=PREFIX         install architecture-independent files in PREFIX
                          [/usr/local]
  --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
                          [PREFIX]

By default, `make install' will install all the files in
`/usr/local/bin', `/usr/local/lib' etc.  You can specify
an installation prefix other than `/usr/local' using `--prefix',
for instance `--prefix=$HOME'.

For better control, use the options below.

Fine tuning of the installation directories:
  --bindir=DIR            user executables [EPREFIX/bin]
  --sbindir=DIR           system admin executables [EPREFIX/sbin]
  --libexecdir=DIR        program executables [EPREFIX/libexec]
  --sysconfdir=DIR        read-only single-machine data [PREFIX/etc]
  --sharedstatedir=DIR    modifiable architecture-independent data [PREFIX/com]
  --localstatedir=DIR     modifiable single-machine data [PREFIX/var]
  --libdir=DIR            object code libraries [EPREFIX/lib]
  --includedir=DIR        C header files [PREFIX/include]
  --oldincludedir=DIR     C header files for non-gcc [/usr/include]
  --datarootdir=DIR       read-only arch.-independent data root [PREFIX/share]
  --datadir=DIR           read-only architecture-independent data [DATAROOTDIR]
  --infodir=DIR           info documentation [DATAROOTDIR/info]
  --localedir=DIR         locale-dependent data [DATAROOTDIR/locale]
  --mandir=DIR            man documentation [DATAROOTDIR/man]
  --docdir=DIR            documentation root [DATAROOTDIR/doc/PACKAGE]
  --htmldir=DIR           html documentation [DOCDIR]
  --dvidir=DIR            dvi documentation [DOCDIR]
  --pdfdir=DIR            pdf documentation [DOCDIR]
  --psdir=DIR             ps documentation [DOCDIR]

X features:
  --x-includes=DIR    X include files are in DIR
  --x-libraries=DIR   X library files are in DIR

System types:
  --build=BUILD     configure for building on BUILD [guessed]
  --host=HOST       cross-compile to build programs to run on HOST [BUILD]
  --target=TARGET   configure for building compilers for TARGET [HOST]

Optional Features:
  --disable-option-checking  ignore unrecognized --enable/--with options
  --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
  --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
  --enable-static[=PKGS]  build static libraries [default=no]
  --enable-shared[=PKGS]  build shared libraries [default=yes]
  --enable-fast-install[=PKGS]
                          optimize for fast installation [default=yes]
  --disable-libtool-lock  avoid locking (might break parallel builds)
  --enable-ltdl-install   install libltdl
  --disable-largefile     omit support for large files
  --enable-idle-hack      use Roland Mainz's idle hack (no)
  --enable-plugins        enable plugin support (no)
  --enable-a20-pin        compile in support for A20 pin (yes)
  --enable-x86-64         compile in support for x86-64 instructions (no)
  --enable-smp            compile in support for SMP configurations (no)
  --enable-cpu-level      select cpu level (3,4,5,6 - default is 6)
  --enable-long-phy-address
                          compile in support for physical address larger than
                          32 bit (yes, if cpu level >= 5)
  --enable-large-ramfile  enable large ramfile support (yes)
  --enable-repeat-speedups
                          support repeated IO and mem copy speedups (no)
  --enable-fast-function-calls
                          support for fast function calls (no - gcc on x86 and
                          MSVC nmake only)
  --enable-handlers-chaining
                          support handlers-chaining emulation speedups (no)
  --enable-trace-linking  enable trace linking speedups support (no)
  --enable-configurable-msrs
                          support for configurable MSR registers (yes if cpu
                          level >= 5)
  --enable-show-ips       show IPS in Bochs status bar / log file (yes)
  --enable-cpp            use .cpp as C++ suffix (no)
  --enable-debugger       compile in support for Bochs internal debugger (no)
  --enable-disasm         compile in support for disassembler (no)
  --enable-debugger-gui   compile in support for Bochs internal debugger GUI
                          (yes, if debugger is on)
  --enable-gdb-stub       enable gdb stub support (no)
  --enable-iodebug        enable I/O interface to debugger (yes, if debugger
                          is on)
  --enable-all-optimizations
                          compile in all possible optimizations (no)
  --enable-readline       use readline library, if available (no)
  --enable-instrumentation=instrument-dir
                          compile in support for instrumentation (no)
  --enable-logging        enable logging (yes)
  --enable-stats          enable statistics collection (yes)
  --enable-assert-checks  enable BX_ASSERT checks (yes, if debugger is on)
  --enable-fpu            compile in FPU emulation (yes)
  --enable-vmx            VMX (virtualization extensions) emulation
                          (--enable-vmx=[no|1|2])
  --enable-svm            SVM (AMD: secure virtual machine) emulation (no)
  --enable-protection-keys
                          User-Mode Protection Keys support (no)
  --enable-3dnow          3DNow! support (no - incomplete)
  --enable-alignment-check
                          alignment check (#AC) support (yes, if cpu level >
                          3)
  --enable-monitor-mwait  support for MONITOR/MWAIT instructions (yes, if cpu
                          level > 5 - experimental)
  --enable-perfmon        support for limited hardware performance monitoring
                          emulation (yes, if cpu level > 5 - experimental)
  --enable-memtype        support for memory type
  --enable-avx            support for AVX instructions (no)
  --enable-evex           support for EVEX prefix and AVX-512 extensions (no)
  --enable-x86-debugger   x86 debugger support (no)
  --enable-pci            enable i440FX PCI support (yes)
  --enable-pcidev         enable PCI host device mapping support (no - linux
                          host only)
  --enable-usb            enable USB UHCI support (no)
  --enable-usb-ohci       enable USB OHCI support (no)
  --enable-usb-ehci       enable USB EHCI support (no)
  --enable-usb-xhci       enable USB xHCI support (no)
  --enable-ne2000         enable NE2000 support (no)
  --enable-pnic           enable PCI pseudo NIC support (no)
  --enable-e1000          enable Intel(R) Gigabit Ethernet support (no)
  --enable-raw-serial     use raw serial port access (no - incomplete)
  --enable-clgd54xx       enable CLGD54XX emulation (no)
  --enable-voodoo         enable 3dfx Voodoo Graphics emulation (no)
  --enable-cdrom          lowlevel CDROM support (yes)
  --enable-sb16           Sound Blaster 16 Support (no)
  --enable-es1370         enable ES1370 soundcard support (no)
  --enable-gameport       enable standard PC gameport support (yes, if
                          soundcard present)
  --enable-busmouse       enable Busmouse support (InPort & Standard)
  --enable-docbook        build the Docbook documentation (yes, if docbook
                          present)
  --enable-xpm            enable the check for XPM support (yes)

Optional Packages:
  --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
  --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
  --with-gnu-ld           assume the C compiler uses GNU ld [default=no]
  --with-pic              try to use only PIC/non-PIC objects [default=use
                          both]
  --with-tags[=TAGS]      include additional configurations [automatic]
  --with-x                use the X Window System
  --with-x11                        use X11 GUI
  --with-win32                      use Win32 GUI
  --with-macos                      use Macintosh/CodeWarrior environment
  --with-carbon                     compile for MacOS X with Carbon GUI
  --with-nogui                      no native GUI, just use blank stubs
  --with-term                       textmode terminal environment
  --with-rfb                        use RFB protocol, works with VNC viewer
  --with-vncsrv                     use LibVNCServer, works with VNC viewer
  --with-amigaos                    use AmigaOS (or MorphOS) GUI
  --with-sdl                        use SDL libraries
  --with-sdl2                       use SDL2 libraries
  --with-svga                       use SVGALib libraries
  --with-wx                         use wxWidgets libraries
  --with-all-libs                   compile all guis that Bochs supports

Some influential environment variables:
  CC          C compiler command
  CFLAGS      C compiler flags
  LDFLAGS     linker flags, e.g. -L<lib dir> if you have libraries in a
              nonstandard directory <lib dir>
  LIBS        libraries to pass to the linker, e.g. -l<library>
  CPPFLAGS    (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if
              you have headers in a nonstandard directory <include dir>
  CXX         C++ compiler command
  CXXFLAGS    C++ compiler flags
  CPP         C preprocessor
  CXXCPP      C++ preprocessor
  F77         Fortran 77 compiler command
  FFLAGS      Fortran 77 compiler flags
  XMKMF       Path to xmkmf, Makefile generator for X Window System

Use these variables to override the choices made by `configure' or to help
it to find libraries and programs with nonstandard names/locations.

Report bugs to the package provider.

  至此,终于明白了教程中那些“奇奇怪怪”的设置从何而来了。

  Among other things, the configure script tries to detect your platform and which compile options to use. If you want to control this, set these environment variables before running configure: CC, CXX, CFLAGS, CXXFLAGS. Here is an example that sets the environment variables, using bash/ksh[1] syntax:
  除此之外,configure脚本会尝试检测您的平台以及要使用的编译选项。如果要控制此情况,请在运行configure:CC、CXX、CFLAGS和CXXFLAGS之前设置这些环境变量。
  如何设置?直接在命令行输入就可以。

eqweq@pop-os:/home/bochs-2.6.9$   export CC=egcs
eqweq@pop-os:/home/bochs-2.6.9$   export CXX="$CC"
eqweq@pop-os:/home/bochs-2.6.9$   export CFLAGS="-Wall -O2 -m486 -fomit-frame-pointer -pipe"
eqweq@pop-os:/home/bochs-2.6.9$   export CXXFLAGS="$CFLAGS"

  执行完毕,使用env命令查看:

eqweq@pop-os:/home/bochs-2.6.9$ env

SHELL=/bin/bash
SESSION_MANAGER=local/pop-os:@/tmp/.ICE-unix/1568,unix/pop-os:/tmp/.ICE-unix/1568
COLORTERM=truecolor
XDG_CONFIG_DIRS=/etc/xdg/xdg-pop:/etc/xdg
XDG_MENU_PREFIX=gnome-
GNOME_DESKTOP_SESSION_ID=this-is-deprecated
GTK_IM_MODULE=ibus
LANGUAGE=en_US:en
QT4_IM_MODULE=ibus
LC_ADDRESS=en_US.UTF-8
GNOME_SHELL_SESSION_MODE=pop
LC_NAME=en_US.UTF-8
SSH_AUTH_SOCK=/run/user/1000/keyring/ssh
XMODIFIERS=@im=ibus
DESKTOP_SESSION=pop
LC_MONETARY=en_US.UTF-8
SSH_AGENT_PID=1482
GTK_MODULES=gail:atk-bridge
PWD=/home/bochs-2.6.9
LOGNAME=eqweq
XDG_SESSION_DESKTOP=pop
XDG_SESSION_TYPE=x11
GPG_AGENT_INFO=/run/user/1000/gnupg/S.gpg-agent:0:1
CXX=egcs
CXXFLAGS=-Wall -O2 -m486 -fomit-frame-pointer -pipe
XAUTHORITY=/run/user/1000/gdm/Xauthority
GJS_DEBUG_TOPICS=JS ERROR;JS LOG
WINDOWPATH=2
HOME=/home/eqweq
USERNAME=eqweq
IM_CONFIG_PHASE=1
LC_PAPER=en_US.UTF-8
LANG=en_US.UTF-8
LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.zst=01;31:*.tzst=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.wim=01;31:*.swm=01;31:*.dwm=01;31:*.esd=01;31:*.jpg=01;35:*.jpeg=01;35:*.mjpg=01;35:*.mjpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.oga=00;36:*.opus=00;36:*.spx=00;36:*.xspf=00;36:
XDG_CURRENT_DESKTOP=pop:GNOME
VTE_VERSION=5802
GNOME_TERMINAL_SCREEN=/org/gnome/Terminal/screen/808a8304_3514_4ffc_ba4c_e8417a4ba94d
INVOCATION_ID=1f335c3c3216405a890ffc7adeacc28f
MANAGERPID=1312
CLUTTER_IM_MODULE=ibus
GJS_DEBUG_OUTPUT=stderr
LESSCLOSE=/usr/bin/lesspipe %s %s
XDG_SESSION_CLASS=user
TERM=xterm-256color
LC_IDENTIFICATION=en_US.UTF-8
LESSOPEN=| /usr/bin/lesspipe %s
USER=eqweq
GNOME_TERMINAL_SERVICE=:1.127
DISPLAY=:1
SHLVL=1
LC_TELEPHONE=en_US.UTF-8
QT_IM_MODULE=ibus
LC_MEASUREMENT=en_US.UTF-8
PAPERSIZE=letter
XDG_RUNTIME_DIR=/run/user/1000
LC_TIME=en_US.UTF-8
JOURNAL_STREAM=9:30160
XDG_DATA_DIRS=/usr/share/pop:/usr/local/share/:/usr/share/
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
CC=egcs
GDMSESSION=pop
CFLAGS=-Wall -O2 -m486 -fomit-frame-pointer -pipe
DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus
LC_NUMERIC=en_US.UTF-8
OLDPWD=/home
_=/usr/bin/env

  可见相关环境变量均已经设置好了。
  测试完毕,为了不影响正常安装,现在把设置好的环境变量删除。使用unset 命令。

unset CC
unset CXX
unset CFLAGS
unset CXXFLAGS

  Once the configure script knows what options are selected, it creates a Makefile in every source code directory, and creates $BOCHS/config.h with all the option values written as preprocessor #defines. Now the sources are ready to compile.
  当configure script确定了选择的options之后,将创建一个Makefile,这个Makefile位于Bochs的源码目录之下(不同的目录都有各自的Makefile)。如果configure检查通过,将在源码目录下创建
config.h,此时才能进行编译。
  对比./configure前后的文档构成变化。前:

  后:

  这两个文件确实产生了。config.h文件内容部分如下:

  1 /* config.h.  Generated from config.h.in by configure.  */
  2 //
  3 //  Copyright (C) 2001-2017  The Bochs Project
  4 //
  5 //  This library is free software; you can redistribute it and/or
  6 //  modify it under the terms of the GNU Lesser General Public
  7 //  License as published by the Free Software Foundation; either
  8 //  version 2 of the License, or (at your option) any later version.
  9 //
 10 //  This library is distributed in the hope that it will be useful,
 11 //  but WITHOUT ANY WARRANTY; without even the implied warranty of
 12 //  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 13 //  Lesser General Public License for more details.
 14 //
 15 //  You should have received a copy of the GNU Lesser General Public
 16 //  License along with this library; if not, write to the Free Software
 17 //  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 US    A
 18 //
 19 
 20 //
 21 // config.h.in is distributed in the source TAR file.  When you run
 22 // the configure script, it generates config.h with some changes
 23 // according to your build environment.  For example, in config.h.in,
 24 // SIZEOF_UNSIGNED_CHAR is set to 0.  When configure produces config.h
 25 // it will change "0" to the detected value for your system.
 26 //
 27 // config.h contains ONLY preprocessor #defines and a few typedefs.
 28 // It must be included by both C and C++ files, so it must not
 29 // contain anything language dependent such as a class declaration.
 30 //
 31 
 32 #ifndef _BX_CONFIG_H_
 33 #define _BX_CONFIG_H_ 1
 34 
 35 ///////////////////////////////////////////////////////////////////
 36 // USER CONFIGURABLE OPTIONS : EDIT ONLY OPTIONS IN THIS SECTION //
 37 ///////////////////////////////////////////////////////////////////
 38 
 39 
 40 #if 1
 41 // quit_sim is defined in gui/siminterface.h
 42 #define BX_EXIT(x)  SIM->quit_sim (x)
 43 #else
 44 // provide the real main and the usual exit.
 45 #define BX_EXIT(x)  ::exit(x)
.
.
.



   使用快捷脚本进行Configure(Configure Shortcut Scripts)

  In the Bochs source directory, you will see a series of scripts called .conf.platform. These scripts run the configure script for you, with a set of options that are appropriate for that platform. It is not necessary to use the shortcut scripts; they are simply there to show you an example that the developers have used. Some of these scripts have been used to build official binary packages.

  使用ls -alh查看目录下所有的文件,包括隐藏文件。你将看到很多类似.conf.XXXXXXX的文件,当你运行对应你操作系统平台的文件的时候,将自动附带一些常规的设置来进行configure。

  If you run a shortcut script, you don't need to run configure manually.
  如果运行了快捷脚本,就不用再手动的进行输入configure进行设置了。

  运行脚本的方式:

sh .conf.linux
eqweq@pop-os:/home/bochs-2.6.9$ ls -alh

total 2.9M
drwxr-xr-x 16 eqweq users 4.0K Nov 24 12:55 .
drwxr-xr-x  4 root  root  4.0K Nov 24 06:38 ..
-rw-r--r--  1 eqweq users 228K Feb 20  2012 aclocal.m4
drwxr-xr-x  2 eqweq users 4.0K Nov 24 08:09 bios
-rw-r--r--  1 eqweq users  22K Dec 30  2016 bochs.h
-rw-r--r--  1 eqweq users  59K Apr  2  2017 .bochsrc
drwxr-xr-x  8 eqweq users 4.0K Apr  9  2017 build
drwxr-xr-x  2 eqweq users 4.0K Nov 24 08:09 bx_debug
-rw-r--r--  1 root  root   356 Nov 24 08:09 bxversion.h
-rw-r--r--  1 eqweq users  335 Nov 10  2001 bxversion.h.in
-rw-r--r--  1 root  root   471 Nov 24 08:09 bxversion.rc
-rw-r--r--  1 eqweq users  456 May 16  2014 bxversion.rc.in
-rw-r--r--  1 eqweq users 200K Apr  9  2017 CHANGES
-rwxr-xr-x  1 eqweq users  122 Nov 21  2006 .conf.amigaos
-rw-r--r--  1 eqweq users 1.1K Dec 31  2016 .conf.everything
-rw-r--r--  1 eqweq users 114K Mar 25  2017 config.cc
-rwxr-xr-x  1 eqweq users  44K Jun 11  2010 config.guess
-rw-r--r--  1 root  root   28K Nov 24 08:09 config.h
-rw-r--r--  1 eqweq users  28K Feb 28  2017 config.h.in
-rw-r--r--  1 root  root  160K Nov 24 08:09 config.log
-rwxr-xr-x  1 root  root   38K Nov 24 08:09 config.status
-rwxr-xr-x  1 eqweq users  35K Aug 13  2016 config.sub
-rwxr-xr-x  1 eqweq users 822K Apr  9  2017 configure
-rw-r--r--  1 eqweq users  91K Apr  9  2017 configure.in
-rw-r--r--  1 root  root   32K Nov 24 07:09 .configure.swp
-rwxr-xr-x  1 eqweq users 2.2K Mar 25  2017 .conf.linux
-rwxr-xr-x  1 eqweq users  995 Mar 25  2017 .conf.macos
-rw-r--r--  1 eqweq users 1.3K Mar 25  2017 .conf.macosx
-rwxr-xr-x  1 eqweq users  363 Oct 26  2012 .conf.nothing
-rwxr-xr-x  1 eqweq users  539 May  3  2011 .conf.sparc
-rwxr-xr-x  1 eqweq users  927 Mar 25  2017 .conf.win32-cygwin
-rwxr-xr-x  1 eqweq users  929 Mar 25  2017 .conf.win32-vcpp
-rw-r--r--  1 eqweq users  26K Feb  8  2009 COPYING
drwxr-xr-x  6 eqweq users 4.0K Nov 24 08:09 cpu
-rw-r--r--  1 eqweq users 2.1K Mar 26  2017 cpudb.h
-rw-r--r--  1 eqweq users 2.3K Apr  3  2011 crc.cc
drwxr-xr-x  2 eqweq users 4.0K Nov 24 08:09 disasm
drwxr-xr-x  4 eqweq users 4.0K Apr  9  2017 doc
drwxr-xr-x  2 eqweq users 4.0K Apr  9  2017 docs-html
-rw-r--r--  1 eqweq users 1.6K Mar 12  2017 extplugin.h
-rw-r--r--  1 eqweq users  23K Mar  7  2017 gdbstub.cc
drwxr-xr-x  5 eqweq users 4.0K Nov 24 08:09 gui
drwxr-xr-x  3 eqweq users 4.0K Apr  9  2017 host
-rwxr-xr-x  1 eqweq users 5.5K Mar  8  2002 install-sh
drwxr-xr-x  6 eqweq users 4.0K Apr  9  2017 instrument
drwxr-xr-x  7 eqweq users 4.0K Nov 24 08:09 iodev
-rwxr-xr-x  1 root  root  198K Nov 24 08:09 libtool
-rw-r--r--  1 eqweq users  301 Aug 31  2012 LICENSE
-rw-r--r--  1 eqweq users 8.9K Jan  3  2015 load32bitOShack.cc
-rw-r--r--  1 eqweq users  18K Dec 30  2016 logio.cc
-rw-r--r--  1 eqweq users  13K Dec 18  2013 ltdl-bochs.h
-rw-r--r--  1 eqweq users  86K Jan  3  2015 ltdl.c
-rw-r--r--  1 root  root  4.6K Nov 24 08:09 ltdlconf.h
-rw-r--r--  1 eqweq users 4.3K Oct 25  2002 ltdlconf.h.in
-rw-r--r--  1 eqweq users 177K Feb  8  2009 ltmain.sh
-rw-r--r--  1 eqweq users  49K Feb 19  2017 main.cc
-rw-r--r--  1 root  root   29K Nov 24 08:09 Makefile
-rw-r--r--  1 eqweq users  31K Mar 18  2017 Makefile.in
drwxr-xr-x  2 eqweq users 4.0K Nov 24 08:09 memory
drwxr-xr-x  3 eqweq users 4.0K Nov 24 08:09 misc
-rw-r--r--  1 eqweq users 1.5K Apr  3  2011 msrs.def
-rw-r--r--  1 eqweq users  11K Dec  6  2016 osdep.cc
-rw-r--r--  1 eqweq users 9.8K Dec 23  2014 osdep.h
-rw-r--r--  1 eqweq users  11K Feb 15  2017 param_names.h
-rw-r--r--  1 eqweq users 3.7K Mar 29  2017 PARAM_TREE.txt
drwxr-xr-x  2 eqweq users 4.0K Apr  9  2017 patches
-rw-r--r--  1 eqweq users  18K Jan 26  2015 pc_system.cc
-rw-r--r--  1 eqweq users 6.8K Dec 31  2014 pc_system.h
-rw-r--r--  1 eqweq users  29K Mar 31  2017 plugin.cc
-rw-r--r--  1 eqweq users  22K Apr  1  2017 plugin.h
-rw-r--r--  1 eqweq users  20K Jan  9  2016 qemu-queue.h
-rw-r--r--  1 eqweq users 3.6K Apr  9  2017 README
-rw-r--r--  1 eqweq users  19K Feb  6  2008 README-plugins
-rw-r--r--  1 eqweq users  200 Dec 24  2013 README.rfb
-rw-r--r--  1 eqweq users 5.4K Dec 24  2013 README-wxWidgets
-rw-r--r--  1 eqweq users 4.7K Nov  8  2011 TESTFORM.txt
-rw-r--r--  1 eqweq users 9.8K Mar 22  2017 TODO
-rw-r--r--  1 eqweq users 3.5K Jan 14  2014 win32_enh_dbg.rc
-rw-r--r--  1 eqweq users 3.9K Mar 19  2017 win32res.rc
-rw-r--r--  1 eqweq users  220 Dec 28  2013 wxbochs.rc

  其实快捷脚本的原理也很简单,我们可以看看内容是什么:

#!/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 --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 --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

  如果之前曾经安装过Bochs的话,你可能已经发现了,其实这个脚本文件就是把手动的命令的封装到了文件之中。
  这就意味着,个人可以按照脚本格式,修改内部的设置内容,以后再需要安装,直接运行脚本就可以了

  3-4-2. 编译安装(Compiling Bochs)—Make

  The make command compiles Bochs. Make is a program used by many software projects that reads the Makefile in each source directory and follows the instructions that it finds there. A Makefile tells which files depend on which other files, what commands to use to compile and link the code, and more. After you have finished the configure step, just type make to build the source code.

  The reason that make is so popular is that it is smart about when to compile and when not to compile. If you run make once, it compiles every file. But when you run it again, it checks to see if any source files have been modified; if not, there's nothing to do! For example, the Makefile says that main.o depends on main.cc. Knowing this, it will only compile main.cc if it is newer than main.o.

  Of course, make can only do the right thing if the Makefile lists all the dependencies correctly, so human error can sometimes lead make astray. If make refuses to build something that you think it should, or you are getting strange compile errors, try doing make all-clean and then make again. All-clean means to clean up the compiled files in every subdirectory, while make clean means to clean up just the current directory. However, it's important to note that make all-clean leaves the configuration intact. You do not have to run configure again.

  如果make出了问题,可以使用:

make clean
make all-clean

清除所有的make设置,但是configure的设置没有改变。

  If you're really in the mood for cleaning, make dist-clean erases all the configuration information too. In theory, after a dist-clean your directory should look much like when you first untarred it or checked it out. There's usually some extra stuff lying around, but the Makefile tries at least to erase any files that it created.
  如果确实有需要清除configure的一系列动作和影响,就执行:make dist-clean

root@pop-os:/home/bochs-2.6.9# make dist-clean

rm -f  *.o
rm -f  *.a
rm -f  bochs
rm -f  bochs.exe
rm -f  bximage
rm -f  bximage.exe
rm -f  bxhub
rm -f  bxhub.exe
rm -f  niclist
rm -f  niclist.exe
rm -f  bochs.out
rm -f  bochsout.txt
rm -f  *.exp *.lib
rm -f  bochs.def
rm -f  bochs.scpt
rm -f  -rf bochs.app
rm -f  -rf .libs
rm -f  .win32_dll_plugin_target
rm -f  config.h config.status config.log config.cache
rm -f  .dummy `find . -name '*.dsp' -o -name '*.dsw' -o -name '*.opt' -o -name '.DS_Store'`
rm -f  bxversion.h bxversion.rc build/linux/bochs-dlx _rpm_top *.rpm
rm -f  build/win32/nsis/Makefile build/win32/nsis/bochs.nsi
rm -f  build/macosx/Info.plist build/macosx/script_compiled.rsrc
rm -f  libtool
rm -f  ltdlconf.h
cd iodev && \
make dist-clean
make[1]: Entering directory '/home/bochs-2.6.9/iodev'
rm -f  -rf .libs *.lo *.o *.la *.a *.dll *.exp *.lib
rm -f  Makefile makeincl.vc
make[1]: Leaving directory '/home/bochs-2.6.9/iodev'
echo done
done
cd iodev/display && \
make dist-clean
make[1]: Entering directory '/home/bochs-2.6.9/iodev/display'
rm -f  -rf .libs *.lo *.o *.la *.a *.dll *.exp *.lib
rm -f  Makefile
make[1]: Leaving directory '/home/bochs-2.6.9/iodev/display'
echo done
done
cd iodev/hdimage && \
make dist-clean
make[1]: Entering directory '/home/bochs-2.6.9/iodev/hdimage'
rm -f  -rf .libs *.lo *.o *.la *.a *.dll *.exp *.lib
rm -f  Makefile
make[1]: Leaving directory '/home/bochs-2.6.9/iodev/hdimage'
echo done
done
cd iodev/usb && \
make dist-clean
make[1]: Entering directory '/home/bochs-2.6.9/iodev/usb'
rm -f  -rf .libs *.lo *.o *.la *.a *.dll *.exp *.lib
rm -f  Makefile
make[1]: Leaving directory '/home/bochs-2.6.9/iodev/usb'
echo done
done
cd iodev/network && \
make dist-clean
make[1]: Entering directory '/home/bochs-2.6.9/iodev/network'
rm -f  -rf .libs slirp/.libs *.lo slirp/*.lo *.o slirp/*.o *.la *.a *.dll *.exp *.lib
rm -f  Makefile
make[1]: Leaving directory '/home/bochs-2.6.9/iodev/network'
echo done
done
cd iodev/sound && \
make dist-clean
make[1]: Entering directory '/home/bochs-2.6.9/iodev/sound'
rm -f  -rf .libs *.lo *.o *.la *.a *.dll *.exp *.lib
rm -f  Makefile
make[1]: Leaving directory '/home/bochs-2.6.9/iodev/sound'
echo done
done
cd bx_debug && \
make dist-clean
make[1]: Entering directory '/home/bochs-2.6.9/bx_debug'
rm -f  *.o
rm -f  libdebug.a
rm -f  Makefile
make[1]: Leaving directory '/home/bochs-2.6.9/bx_debug'
echo done
done
cd bios && \
make dist-clean
make[1]: Entering directory '/home/bochs-2.6.9/bios'
rm -f  *.o *.a *.s _rombios*_.c rombios*.txt rombios*.sym
rm -f  usage biossums rombios16.bin
rm -f  rombios32.bin rombios32.out
rm -f  Makefile
make[1]: Leaving directory '/home/bochs-2.6.9/bios'
echo done
done
cd cpu && \
make dist-clean
make[1]: Entering directory '/home/bochs-2.6.9/cpu'
rm -f  *.o
rm -f  *.a
rm -f  decoder/*.o
rm -f  Makefile
make[1]: Leaving directory '/home/bochs-2.6.9/cpu'
echo done
done
cd cpu/avx && \
make dist-clean
make[1]: Entering directory '/home/bochs-2.6.9/cpu/avx'
rm -f  *.o
rm -f  *.a
rm -f  Makefile
make[1]: Leaving directory '/home/bochs-2.6.9/cpu/avx'
echo done
done
cd cpu/cpudb && \
make dist-clean
make[1]: Entering directory '/home/bochs-2.6.9/cpu/cpudb'
rm -f  amd/*.o
rm -f  intel/*.o
rm -f  *.a
rm -f  Makefile
make[1]: Leaving directory '/home/bochs-2.6.9/cpu/cpudb'
echo done
done
cd cpu/fpu && \
make dist-clean
make[1]: Entering directory '/home/bochs-2.6.9/cpu/fpu'
rm -f  *.o
rm -f  *.a
rm -f  Makefile
make[1]: Leaving directory '/home/bochs-2.6.9/cpu/fpu'
echo done
done
cd memory && \
make dist-clean
make[1]: Entering directory '/home/bochs-2.6.9/memory'
rm -f  *.o
rm -f  *.a
rm -f  Makefile
make[1]: Leaving directory '/home/bochs-2.6.9/memory'
echo done
done
cd gui && \
make dist-clean
make[1]: Entering directory '/home/bochs-2.6.9/gui'
rm -f  -rf .libs *.la *.a *.lo *.o *.dll *.exp *.lib
rm -f  Makefile
make[1]: Leaving directory '/home/bochs-2.6.9/gui'
echo done
done
cd disasm && \
make dist-clean
make[1]: Entering directory '/home/bochs-2.6.9/disasm'
rm -f  *.o
rm -f  *.a
rm -f  Makefile
make[1]: Leaving directory '/home/bochs-2.6.9/disasm'
echo done
done
cd instrument/stubs && \
make dist-clean
make[1]: Entering directory '/home/bochs-2.6.9/instrument/stubs'
rm -f  *.o
rm -f  *.a
rm -f  Makefile
make[1]: Leaving directory '/home/bochs-2.6.9/instrument/stubs'
echo done
done
cd misc && \
make dist-clean
make[1]: Entering directory '/home/bochs-2.6.9/misc'
rm -f  *.o
rm -f  make_cmos_image
rm -f  Makefile
make[1]: Leaving directory '/home/bochs-2.6.9/misc'
echo done
done
cd doc/docbook && \
make dist-clean
make[1]: Entering directory '/home/bochs-2.6.9/doc/docbook'
# remove generated files
for S in user documentation development; do \
  rm -f $S/*.html $S/*.htm $S/*.ps $S/*.pdf $S/*.out; \
done
rm -f  bochsdoc.tar.gz
rm -f  Makefile
make[1]: Leaving directory '/home/bochs-2.6.9/doc/docbook'
echo done
done
cd host/linux/pcidev && \
make dist-clean
make[1]: Entering directory '/home/bochs-2.6.9/host/linux/pcidev'
rm -f  *.o *~ core *.mod.* .*.cmd *.ko
rm -f  Makefile
make[1]: Leaving directory '/home/bochs-2.6.9/host/linux/pcidev'
echo done
done
rm -f  Makefile

  可以看到,很多rm命令也就是删除命令被执行了。而且ls后,也发现经过configure产生的一些文件等都没有了。

  3-4-3. 编译安装(Compiling Bochs)— Make Install

  Once the program has been built, the next step is typically to run make install to copy the executables, documentation, and other required files into a public place so that all users can use it. By default the files are copied to some directories in /usr/local. The following tables shows the directories and their contents.
  程序构建完成后,下一步通常是运行make install,将可执行文件、文档和其他所需文件复制到公共场所,以便所有用户都可以使用它。默认情况下,文件被复制到/usr/local中的一些目录中。下表显示了目录及其内容:

bin binary executables (bochs, bximage)
lib/bochs/plugins plugins (if present)
man/man1 manpages for installed binaries
man/man5 manpage for the config file (bochsrc)
share/bochs BIOS images, VGABIOS images, keymaps
share/doc/bochs HTML docs, license, readme, changes, bochsrc sample

  3-4-4. 编译安装(Compiling Bochs)— Installing the DLX Linux demo

  To download and install the DLX Linux demo distributed with Bochs binary release packages, use these two make commands:

#必须首先configure
  make unpack_dlx
#首先Bochs安装好
  make install_dlx

  The package will be downloaded from the Bochs website and installed at same location as the files of the Bochs base system.

root@pop-os:/home/bochs-2.6.9# make unpack_dlx

rm -f dlxlinux4.tar.gz
wget http://bochs.sourceforge.net/guestos/dlxlinux4.tar.gz
--2019-11-24 15:27:11--  http://bochs.sourceforge.net/guestos/dlxlinux4.tar.gz
Resolving bochs.sourceforge.net (bochs.sourceforge.net)... 216.105.38.10
Connecting to bochs.sourceforge.net (bochs.sourceforge.net)|216.105.38.10|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1504652 (1.4M) [application/x-gzip]
Saving to: ‘dlxlinux4.tar.gz’

dlxlinux4.tar.gz    100%[===================>]   1.43M  5.63KB/s    in 4m 5s   

2019-11-24 15:31:18 (5.99 KB/s) - ‘dlxlinux4.tar.gz’ saved [1504652/1504652]

test -f dlxlinux4.tar.gz
rm -rf dlxlinux
gunzip -c dlxlinux4.tar.gz | tar -xvf -
dlxlinux/
dlxlinux/testform.txt
dlxlinux/readme.txt
dlxlinux/bochsrc.txt
dlxlinux/hd10meg.img
test -d dlxlinux
(cd dlxlinux; mv bochsrc.txt bochsrc.txt.orig; sed -e "s/1\.1\.2/2.6.9/g"  -e 's,/usr/local/bochs/latest,/usr/local/share/bochs,g' < bochsrc.txt.orig > bochsrc.txt; rm -f bochsrc.txt.orig)

  可以看到一些自动下载,解压缩的过程。

  以dlx开头的文件和包。

第4章节  Configure设置( Configure Options)

  This section describes the configure options for Bochs. Perhaps the most important option is --help, since it gives you a list of all the other options. The configure script will detect your platform and choose the default GUI for your platform. If the default choice is not what you want, use the --with-* options to override the default. The options in the first table tell which GUI library is the default for each platform. Starting in version 2.0, you can use multiple --with-* options at once to compile with multiple display libraries, and then choose between them at runtime with the display_library option in the configuration file. Or, you can let the configure script detect which libraries are on your system and use them all, by configuring with --with-all-libs.
  本节介绍BOCH的配置选项。也许最重要的选项是--help,因为它提供了所有其他选项的列表。configure脚本将检测您的平台并为您的平台选择默认GUI。如果默认选项不是您想要的,请使用--with-选项覆盖默认选项。第一个表中的选项指示每个平台的默认GUI库。从2.0版开始,您可以同时使用多个--with-选项编译多个显示库,然后在运行时使用配置文件中的display_library选项在它们之间进行选择。或者,您可以让configure脚本检测系统上的哪些库并全部使用它们,方法是使用--with all libs进行配置。

Defaults by Platform

| Platform                    | Default GUI    | Extra compile flags                                          |
| --------------------------- | -------------- | ------------------------------------------------------------ |
| win32, Cygwin or MinGW/MSYS | --with-win32   | If using nmake method, compile using cl /nologo /MT /W3 /EHs-c- /DNDEBUG /DWIN32 /D_WINDOWS /D_CRT_SECURE_NO_WARNINGS. If using Visual C++ workspace, see the workspace file for compile settings. See [Compiling on Win32 with Microsoft VC++](http://bochs.sourceforge.net/doc/docbook/user/compiling.html#COMPILING-WIN32) for instructions. |
| MacOS X or Darwin           | --with-carbon  | -fpascal-strings -fno-common -arch ppc -Wno-four-char-constants -Wno-unknown-pragmas -Dmacintosh |
| MacOS 9 or before           | --with-macos   | none                                                         |
| AmigaOS                     | --with-amigaos | none                                                         |
| any other platform          | --with-x11     | none                                                         |

Configure Options to Select the Display Library (optional)

选择UI显示库的设置选项
| Option          | Comments                                                     |
| --------------- | ------------------------------------------------------------ |
| --with-x11      | Use X windows user interface. On many operating systems, Bochs will use X windows by default. |
| --with-win32    | Use the native Win32 GUI. This is the default on win32 platforms. |
| --with-carbon   | Compile for MacOS X with the Carbon GUI. See the .conf.macosx file for the correct MacOS X compile options. WARNING: This Bochs feature is not maintained yet and may fail. |
| --with-amigaos  | Compile for Amiga MorphOS. This code is written by Nicholai Benalal. |
| --with-rfb      | Enable support for the RFB protocol to talk to AT&T's [VNC Viewer](http://www.realvnc.com/). Refer to [Section 3.4.9](http://bochs.sourceforge.net/doc/docbook/user/compiling.html#COMPILE-RFB) for details. |
| --with-vncsrv   | Enable support for an extended RFB(VNC) GUI using the LibVNCServer library. Refer to [Section 3.4.10](http://bochs.sourceforge.net/doc/docbook/user/compiling.html#COMPILE-VNCSRV) for details. |
| --with-sdl      | Enable support for the SDL 1.2.x GUI interface; see [Section 3.4.11](http://bochs.sourceforge.net/doc/docbook/user/compiling.html#COMPILE-SDL). |
| --with-sdl2     | Enable support for the SDL 2.x GUI interface; see [Section 3.4.12](http://bochs.sourceforge.net/doc/docbook/user/compiling.html#COMPILE-SDL2). |
| --with-term     | Use text-only gui with curses library. Almost certainly won't work right with the debugger or the textconfig interface. |
| --with-macos    | Use Macintosh/CodeWarrior environment. This is for running configure on a platform which supports running configure, so that you may then transfer the configured code over to the real compile environment. WARNING: This Bochs feature is not maintained yet and may fail. |
| --with-wx       | Enable support for wxWidgets configuration and display interface; see [Section 3.4.13](http://bochs.sourceforge.net/doc/docbook/user/compiling.html#COMPILE-WX). |
| --with-svga     | Use SVGALIB library for Linux. This allows a full-screen text and graphics display without X windows. The SVGALIB port was written by Igor Popik. WARNING: This Bochs feature is not maintained yet and may fail. |
| --with-nogui    | No native GUI; just use blank stubs. This is if you don't care about having video output, but are just running tests. |
| --with-all-libs | Automatically detect which libraries are installed on your system and enable them. This option is still experimental; it might enable libraries that are not usable and cause the compile to fail. If you have trouble, just list the `--with-*` options for the specific display libraries that you want. |

  The remaining options can generally be used with any GUI. For each option such as --enable-cdrom, you can also write --disable-cdrom to explicitly turn it off. The following 3 tables show the general options (.e.g debugger and plugins support), the CPU-related stuff (e.g. cpu level, SMP, x86_64 support) and the devices options (e.g. PCI, USB, Cirrus graphics).
  以下的选项均可以配合任何GUI选项使用。
  所有的--enable均可以使用--disable来关闭设置。

Configure Options (General)

| Option                               | Default               | Comments                                                     |
| ------------------------------------ | --------------------- | ------------------------------------------------------------ |
| --enable-plugins                     | no                    | Plugins are shared libraries that can be loaded on demand. Example: the serial device is implemented as a plugin. In Unix, the serial plugin is called libbx_serial.so. When Bochs reads its configuration file, if the serial device is enabled it loads libbx_serial.so. See the Features section for supported platforms. |
| --enable-debugger                    | no                    | Compile in support for Bochs internal command-line debugger. This has nothing to do with x86 hardware debug support. It is a more powerful and non-intrusive native debugger. Enabling this will of course slow down the emulation. You only need this option if you know you need it. After you have run **./configure**, you may want to edit `config.h` to customize the debugger further; see [Section 8.14](http://bochs.sourceforge.net/doc/docbook/user/internal-debugger.html) for more information. |
| --enable-debugger-gui                | yes if debugger is on | Enable support for the gui frontend of the Bochs debugger. This feature is supported on Windows hosts and on hosts with GTK2 installed. |
| --enable-readline                    | detected by configure | Compile the debugger with the GNU readline library, which gives command line editing and history. |
| --enable-gdb-stub                    | no                    | Enable support for the remote GDB stub. See [Using Bochs and the remote GDB stub](http://bochs.sourceforge.net/doc/docbook/user/debugging-with-gdb.html). NOTE: This feature cannot be used if the Bochs debugger is also enabled. WARNING: This Bochs feature is not maintained yet and may fail. |
| --enable-disasm                      | yes                   | Compile in support for built-in disassembler. Bochs has a built-in disassembler, which is useful if you either run the built-in debugger (`--enable-debugger`), or want disassembly of the current instruction when there is a panic in bochs. |
| --enable-docbook                     | detected              | Build the docbook documentation in doc/docbook. The configure script will enable this option automatically if you have a program called docbook2html installed. |
| --enable-instrumentation=`directory` | no                    | Compile in support for instrumentation. This allows you to collect instrumentation data from bochs as it executes code. You have to create your own instrumentation library and define the instrumentation macros (hooks in bochs) to either call your library functions or not, depending upon whether you want to collect each piece of data. |
| --enable-xpm                         | yes                   | Enables the check for the XPM library. This option is only valid if the x display library is enabled (`--with-x11`). |
| --enable-show-ips                    | yes                   | Enables logging of measured IPS, see the **ips** parameter of the [cpu option](http://bochs.sourceforge.net/doc/docbook/user/bochsrc.html#BOCHSOPT-CPU-IPS). |
| --enable-logging                     | yes                   | By default, Bochs generates logfile output that can be configured with bochsrc options and at runtime. Use `--disable-logging` to turn off this feature completely. |
| --enable-assert-checks               | yes if debugger is on | BX_ASSERT event causes a panic on assertion failure if enabled (logging feature must be enabled, too). |
| --enable-cpp                         | no                    | Use .cpp as C++ suffix. Renames all the .cc files to .cpp for use with compilers which want that, like older MS C++ compilers. Don't use this option unless you know you need it. |
| --enable-idle-hack                   | no                    | Enables Roland Mainz's experimental idle code, which is intended to keep Bochs from always using 100% of CPU time. When Bochs is waiting around for an interrupt, the idle code uses a select() loop and some X11 tricks to wait until user input arrives. This is designed to keep Bochs responsive while still yielding to other processes when Bochs is idle. It only works with X11 or term GUI. |

Configure Options (CPU & Memory)

CPU及Memory设置
| Option                         | Default               | Comments                                                     |
| ------------------------------ | --------------------- | ------------------------------------------------------------ |
| --enable-cpu-level={`3,4,5,6`} | 6                     | Select which CPU level to emulate. Choices are 3,4,5,6 which mean to target 386, 486, Pentium, or Pentium Pro and later emulation. |
| --enable-smp                   | no                    | Compile in support for SMP simulation. This allows you to boot Linux and maybe other OSes in SMP mode, and bochs will simulate all the different CPUs and communication between them. Do not expect this option to speed up your simulation! On the contrary, it has to spend extra time simulating the different CPUs (even if they're mostly idle) and the communication between them. Use it to try out an SMP OS if you don't have an SMP machine, or to debug SMP OS drivers. Refer to [Section 8.9](http://bochs.sourceforge.net/doc/docbook/user/smp.html) for more details on SMP in Bochs. |
| --enable-fpu                   | yes                   | If you want to compile Bochs to make use of the FPU emulator written by Stanislav Shwartsman, use this option. |
| --enable-3dnow                 | no                    | 3DNow! instruction set support (incomplete)                  |
| --enable-x86-64                | no                    | Add support for x86-64 instruction set, written by Peter Tattam and Stanislav Shwartsman. |
| --enable-vmx                   | no                    | Intel Virtualization Extensions (VMX) support                |
| --enable-svm                   | no                    | AMD SVM (Secure Virtual Machine) extensions emulation support |
| --enable-avx                   | no                    | AVX instructions support                                     |
| --enable-x86-debugger          | no                    | X86 debugger support. If the software you run in bochs needs to use the x86 hardware debugging facilities such as DR0..DR7, instruction and data breakpoints etc., then you should use this option. Otherwise don't use it, as it will slow down the emulation. |
| --enable-monitor-mwait         | no                    | MONITOR/MWAIT instructions support (still experimental)      |
| --enable-alignment-check       | yes if cpu level >= 4 | support for alignment check in the CPU and #AC exception     |
| --enable-configurable-msrs     | no                    | support for user configurations of emulated MSR registers (see example in msrs.def) |
| --enable-long-phy-address      | no                    | support for guest physical address larger than 32 bit        |
| --enable-a20-pin               | yes                   | support for the A20 pin                                      |
| --enable-large-ramfile         | yes                   | support for guest memory larger than the host supports       |
| --enable-repeat-speedups       | no                    | enable support repeated I/O and memory copy speedups         |
| --enable-fast-function-calls   | no                    | enable support for fast function calls (gcc on x86 only)     |
| --enable-handlers-chaining     | no                    | enable support for handlers chaining optimization            |
| --enable-all-optimizations     | no                    | Turn on the enables for all speed optimizations that the developers believe are safe to use: --enable-repeat-speedups, --enable-fast-function-calls, --enable-handlers-chaining. |

Configure Options (Devices)

设备
| Option              | Default               | Comments                                                     |
| ------------------- | --------------------- | ------------------------------------------------------------ |
| --enable-cdrom      | yes                   | Enable use of a real CDROM/DVD drive. The cdrom emulation and the portable ISO image file support are always present. You can use this option to compile in support for accessing the media in your workstation's cdrom drive. The supported platforms are Linux, Solaris, FreeBSD, OpenBSD, MacOS X and Windows. For other platforms, a small amount of code specific to your platform must be written. |
| --enable-sb16       | no                    | Enable Sound Blaster emulation. The available lowlevel sound interfaces are autodetected. See section [Using Sound](http://bochs.sourceforge.net/doc/docbook/user/using-sound.html) for supported platforms and more info. This option also enables the standard PC gameport which is a part of the SB16. If you don't want to use it, you might use `--disable-gameport`. |
| --enable-es1370     | no                    | Enable ES1370 sound emulation. Just like the SB16 option, the available lowlevel sound interfaces are autodetected and the gameport is turned on. |
| --enable-gameport   | no                    | Enables the standard PC gameport. This option is only necessary if you want to have a gameport, but no SB16 or ES1370 (see above). The connection to a real joystick is currently supported on Linux and win32 only. |
| --enable-ne2000     | no                    | Enable NE2000 network card support. This requires a low-level component to be written for each OS (supported on FreeBSD, OpenBSD, Linux, and Windows 9x/NT/2K/XP). When enabled and configured, the NE2000 device model can talk to any computer on the network EXCEPT FOR the local host. Exception: Under most circumstances, Bochs can talk to the local host on Windows, and in the ethertap interface for Linux. |
| --enable-pnic       | no                    | Enable PCI pseudo NIC (network card) support.                |
| --enable-e1000      | no                    | Enable Intel(R) 82540EM Gigabit Ethernet adapter support.    |
| --enable-clgd54xx   | no                    | Enable Cirrus Logic GD54xx (CL-GD5430 ISA or CL-GD5446 PCI) video card support. For more information see [Section 8.20](http://bochs.sourceforge.net/doc/docbook/user/cirrus-notes.html). |
| --enable-voodoo     | no                    | Enable experimental 3dfx Voodoo Graphics emulation. Currently only the Voodoo1 model is known to work (Voodoo2 is under construction). |
| --enable-iodebug    | yes if debugger is on | Dave Poirier has written an experimental interface to the debugger using I/O ports, so that software running in the guest OS can access features of the debugger. You only want this option if you are developing guest OS code for use in Bochs. In other words, most people don't. Also, it should only be used with `--enable-debugger`. See the [developer documentation](http://bochs.sourceforge.net/doc/docbook/development/iodebug.html) for details. |
| --enable-pci        | yes                   | Enable limited i440FX / i430FX PCI support. This is still incomplete, but usable. |
| --enable-pcidev     | no                    | Enable PCI host device mapping support. This requires `--enable-pci` to be set as well as Linux 2.4, 2.6 or 3.x as host. WARNING: This Bochs feature is not maintained yet and may fail. |
| --enable-usb        | no                    | Enable i440FX PCI USB support (UHCI). The host controller with 2-port root hub and 8 USB device types are available. |
| --enable-usb-ohci   | no                    | Enable USB OHCI support. The host controller with 2-port root hub is available (USB device types: same as UHCI). |
| --enable-usb-ehci   | no                    | Enable USB EHCI support. The host controller with 6-port root hub is available (USB device types: same as UHCI). |
| --enable-usb-xhci   | no                    | Enable USB xHCI support. The host controller with 4-port root hub is available (USB device types: same as UHCI). |
| --enable-raw-serial | no                    | Enable support for the serial port emulation to access to the host's serial port. This feature is partly implemented for Windows hosts only. |

Transcript of Successful Compilation(Linux)

成功编译的案例示范输出(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 /usr/local/share/doc/bochs; else install -m 644 ./$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$ _

Compiling on Win32 with Microsoft VC++

  在windows平台下用VC编译,比较复杂,需要在能运行configure脚本的环境下先进行相关处理。
  The standard compile uses the configure script, but the Windows platform cannot run the configure script natively. The current solution to this problem is that the Bochs configure script must be run on a different platform that does support shell scripts, with options that cause it to configure for a Win32 platform instead of the native one. Many people have access to a UNIX machine that could run the configure script, or you can use Cygwin or MinGW/MSYS to run the configure script.

  Download the Bochs sources on a machine that can run shell scripts. Edit the configure shortcut script .conf.win32-vcpp if you want to adjust the configure options. Then type these commands in the Bochs source directory:

sh .conf.win32-vcpp
make win32_snap

  These commands will run the configure step, produce VC++ makefiles and workspace files, and pack it all into a .zip file in the directory above the source directory [4]. The .zip file is all ready to transfer to the target Windows machine to be unzipped and compiled. Or, if you run the sh/make steps in Cygwin, you are already on the target machine so you don't need the .zip file.
  When you have the Win32 sources transferred to a Windows machine with VC++, find the workspace file called bochs.sln in the folder "vs2013" and load it in VC++. Choose Project:Set Active Project and be sure that "bochs" is selected. Then choose Build:Build bochs.exe. This will build all the required libraries (iodev, cpu, etc.) and the auxiliary programs bximage.exe, bxhub.exe and niclist.exe.

  Using workspaces is easy and intuitive, but there is one caveat. The workspaces come directly out of a ZIP file in build/win32/vs2013ex-workspace.zip, and they are not controlled by the configure script. When you compile with certain configure options (e.g. --with-sdl) you need to link with additional libraries. For now you must add them to the VC++ workspace by hand. In version 2.0, we have improved the situation considerably by adding #if...#endif around every optional file and including nearly every Bochs source file in the workspace. This solves the problem of having to manually add source files to the workspace when you turn on configure options such as --enable-debugger. The problem of adding link libraries remains unresolved.

  Tip: To compile with the Bochs debugger enabled, add --enable-debugger to the configure line in .conf.win32-vcpp before running it. No modifications to the workspace are necessary.

  An alternative way to compile is to run nmake.exe in an MS-DOS window. Instead of using the workspace files, nmake uses the Bochs makefiles that are generated by configure. The nmake method is currently used to build the release binaries.

  The make install doesn't work with nmake yet. Currently it must be run inside of Cygwin or MinGW/MSYS and requires the environment variable INSTDIR to be set.

Compiling on Win32 with Cygwin or MinGW/MSYS

  Cygwin is a free Unix-like environment for Windows written by Steve Chamberlain and now maintained by RedHat, Inc. You can download it from www.cygwin.com. Because Cygwin supports the configure script and uses GNU gcc/g++, you can use the standard compile process. The configure script should automatically detect Cygwin and add "-mno-cygwin -DWIN32" to the compiler options. You should get a working Bochs if you just type:

configure
make

  Optionally, you can use the configure shortcut script for Cygwin, .conf.win32-cygwin, instead of running configure directly. If this script is close to what you need, just edit the script and then run it. To use the configure shortcut script and compile in Cygwin, the commands are

sh .conf.win32-cygwin
make

  To find out the options which are known to work in Cygwin, open the file .conf.win32-cygwin in any text editor/viewer and have a look at the end of that file.
When using gcc 4.7 or newer you need to add the switch -mno-ms-bitfields to the CFLAGS, to make sure that hdimage and network structures are packed as expected.

  The command make install installs the Bochs files in the directory structure of your build environment. To install Bochs into any desired folder you need to use the install_win32 target. It requires the environment variable INSTDIR to be set.

  其余还有Compiling on MacOS 9 with CodeWarrior、 MacOS X、Amiga/MorphOS等。

Compiling with the wxWidgets interface
编译wxWidgets interface

  wxWidgets is a cross-platform C++ user interface library which you can download for free at wxwidgets.org. The wxWidgets port of Bochs provides both a graphical configuration interface for editing bochsrc options (see config_interface option) and a display (see display_library option). It was written by Bryce Denney, Don Becker, Dave Poirier, and Volker Ruppert.

  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):

  setenv WX_CONFIG '/home/compile/wx/bin/wx-config'


编译当中的问题(Compile Problems)

configure阶段(The configure script failed)

  The configure script can fail for various reasons. If the error message on the shell doesn't give enough information, it is recommended to review the output file config.log to find out what exactly happened. The following issues can be fixed by modifying the configure options used:
  如果configure阶段出现问题,并且没有足够的错误提示信息,可以查阅当前目录下的config.log文件。

  •   deprecated option (option from previous Bochs version not needed / supported anymore)
      去掉选项(一些不必须、不再被支持的老旧Bochs选项)

  •   mutually exclusive option (e.g. --enable-debugger and --enable-gdb-stub)
      检查并去掉互斥的选项

  •   dependent option (e.g. USB support requires PCI support)
      检查所有依赖选项(usb需要pci的支持)

  •   incomplete option (e.g. --enable-cpu-level requires an argument)
      检查是否有不完整选项(--enable-cpu-level需要带参数)

  •   development package for library not installed (e.g. for --with-wx)
       未安装库的开发包(比如--with-wx)

  If the configure issue cannot be fixed by option changes and / or installing development packages / tools it should be reported in the bochs-developers mailing list or the SF bug tracker for the Bochs project.

Make / compilation failure

  In some cases it might be useful to rebuild Bochs completely by calling make dist-clean and running the configure script once again. These steps are recommended if the development sources from SVN are used and one of the build system files (e.g. Makefile or config.h.in) has been changed.
  大多数时候解决make问题的方法是:

make dist-clean
./ configure --参数设置

  Sometimes it is possible to isolate the failing piece of code by disabling one or more configure options. For example, if the compilation fails somewhere in the cpu/avx* files, it might help to configure without --enable-avx. The same could be done with other Bochs facilities controlled by configure options.
  有时可以通过禁用一个或多个配置选项来隔离失败的代码片段。例如,如果编译在cpu/avx*文件中的某个地方失败,则在不启用avx的情况下进行配置可能会有所帮助。其他由configure选项控制的Bochs设施也可以这样做。

Runtime issues with self-compiled Bochs

  After a successful compilation the self-compiled Bochs can fail if at least one library is not installed properly. This can happen if the library consists of a development and a runtime package and the second one is missing. Another problem can appear on build environments like Cygwin and MinGW/MSYS. Applications built there are usually designed to be run inside of the environment. When starting them from the Windows shell, it may cause errors like "missing cygwin1.dll" or similar. In that case, the missing DLL must be copied from e.g. the Cygwin folder to the location of the compiled EXE file.

第5章节  启动配置( Setup)

  These are the minimum requirements for running an OS inside of Bochs:
  使用Bochs虚拟机运行操作系统的最小需求为:

  ◆ 1、the Bochs executable
  Bochs程序

  ◆ 2、the BIOS image (usually called BIOS-bochs-latest)
  BIOS映像文件

  ◆ 3、the VGA BIOS image (e.g. VGABIOS-lgpl-latest or VGABIOS-elpin-2.40)
  VBA BIOS映像文件

  ◆ 4、at least one bootable media, either as disk image (floppy, hard disk or CD-ROM) or physical disk (floppy or CD-ROM)
  至少1个可引导启动的介质映像文件(软驱、硬盘、光驱等)或者物理介质。

  The easiest way to setup Bochs for the first time is to use the example configuration file called bochsrc-sample.txt.Locate that file (location depends on the (host) OS and on the installation facility used) and copy it to a location where Bochs looks for that file
  Bochs编译安装完成后,最简单的启动方式就是使用bochsrc-sample.txt文件。找到这个文件,并复制到Bochs需要它出现的位置即可(但是还要进行相关的设置)。

root@pop-os:/# whereis bochsrc-sample.txt
bochsrc-sample: /usr/local/bin/bochsrc-sample.txt

  If your keyboard output inside of Bochs is wrong, you may also need a keymap file to remap your keyboard layout to the U.S. layout. A set of keymap files for the X window system and SDL (Linux port) is distributed with Bochs. If your keyboard layout is not supported yet, you can create your own one by following the instructions given in Section 4.4.
  如果Bochs内键盘的输出有问题,还需要设置keymap。

  A collection of disk images of different operating systems can be found at http://bochs.sourceforge.net/diskimages.html. Some disk images are the size of a floppy disk (1 meg compressed) and others are gigantic (160 meg compressed). If you want to create a disk image yourself, please see Section 8.2.

  • 5-2 启动配置( Setup)—ROM images

  Just like a real PC, Bochs needs a system BIOS and VGA BIOS to initialize the machine when it powers on or after a hardware reset. Bochs needs to load them from image file into the emulated memory. The Bochs package contains a set of system BIOS and VGA BIOS images.

System and VGA BIOS images
| File                             | Description                                                  |
| -------------------------------- | ------------------------------------------------------------ |
| BIOS-bochs-latest                | default ROM BIOS image for Bochs                             |
| BIOS-bochs-legacy                | ROM BIOS image without 32-bit init code (for i386 and ISA graphics card emulation) |
| bios.bin-1.7.5                   | SeaBIOS ROM image                                            |
| VGABIOS-elpin-2.40               | legacy VGA BIOS image for Bochs                              |
| VGABIOS-lgpl-latest              | LGPL'd VGA BIOS image for Bochs                              |
| VGABIOS-lgpl-latest-debug        | LGPL'd VGA BIOS image for Bochs with debug output to the logfile |
| VGABIOS-lgpl-latest-cirrus       | LGPL'd VGA BIOS image for Bochs with the Cirrus extension enabled |
| VGABIOS-lgpl-latest-cirrus-debug | LGPL'd VGA BIOS image for Bochs with the Cirrus extension enabled and debug output to the logfile |

  Bochs must be set up to use system and VGA BIOS like this:

romimage: file=BIOS-bochs-latest, address=0xe0000
vgaromimage: file=VGABIOS-lgpl-latest

  We recommend to use the ROM images distributed with Bochs or one of the latest SeaBIOS images. BIOS images designed for real hardware mostly do not work properly.
  真正为硬件设计的BIOS不能在Bochs中运行。

  Bochs supports optional ROM images to be loaded into the ISA ROM space, typically between C8000 and EFFFF (see Section 4.3.10). The PCI versions of the Bochs network adapter emulation support loading a boot ROM into the PCI ROM space (see Section 4.3.34).

  • 5-3 启动配置( Setup)— The configuration file “bochsrc(或者是bochsrc-sample.txt)”

  Bochs uses a configuration file called “bochsrc” to know where to look for disk images, how the Bochs emulation layer should work, etc. When you first start up Bochs, it looks around for its configuration file (see Section 5.2), and parses it. Here are a few lines from a sample file:
  Bochs使用一个叫做“bochsrc”的配置文件来对运行环境的各项参数进行设定。下面是文件中的部分设置代码:

  ata0-master: type=disk, path="30M.sample", cylinders=615, heads=6, spt=17
  boot: disk

  The format is very strict, so be sure to put the right number of spaces and use lowercase letters. As you can see, most lines have a keyword telling what is being configured, followed by a colon, followed by a few property=value pairs, separated by commas. For very simple options, sometimes just a single value is needed. The source and binary distributions come with a sample bochsrc, so you can just copy the sample file and edit the settings you need to change.
  代码设置格式非常严格,空格的数目不能错,字母大小写也要严格遵守规定。

  我们剔除配置文件中的注释,看看关键的部分:

cpu: model=pentium, count=1, ips=50000000, reset_on_triple_fault=1, ignore_bad_msrs=1, msrs="msrs.def"
cpu: cpuid_limit_winnt=0
memory: guest=512, host=256
romimage: file=$BXSHARE/BIOS-bochs-latest, options=fastboot
vgaromimage: file=$BXSHARE/VGABIOS-lgpl-latest
mouse: enabled=0
pci: enabled=1, chipset=i440fx
private_colormap: enabled=0
floppya: 1_44=/dev/fd0, status=inserted
ata0: enabled=1, ioaddr1=0x1f0, ioaddr2=0x3f0, irq=14
ata1: enabled=1, ioaddr1=0x170, ioaddr2=0x370, irq=15
ata2: enabled=0, ioaddr1=0x1e8, ioaddr2=0x3e0, irq=11
ata3: enabled=0, ioaddr1=0x168, ioaddr2=0x360, irq=9
ata0-master: type=disk, mode=flat, path="30M.sample"
boot: disk
floppy_bootsig_check: disabled=0
log: bochsout.txt
panic: action=ask
error: action=report
info: action=report
debug: action=ignore, pci=report # report BX_DEBUG from module 'pci'
debugger_log: -
parport1: enabled=1, file="parport.out"
speaker: enabled=1, mode=sound

  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  

  • 3-1 类的初步—定义一个类并创建对象实例

  3-1-1. 导言—用户管理—用户的分类及介绍
  • 3-2 类的初步—定义一个类并创建对象实例

  3-2-1. 导言—用户管理—用户的分类及介绍

第3章节 

  • 3-1 类的初步—定义一个类并创建对象实例

  3-1-1. 导言—用户管理—用户的分类及介绍
  • 3-2 类的初步—定义一个类并创建对象实例

  3-2-1. 导言—用户管理—用户的分类及介绍

  
  
  
  
  
  
  
  
  
  
  
  
  

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,980评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,178评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,868评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,498评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,492评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,521评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,910评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,569评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,793评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,559评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,639评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,342评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,931评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,904评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,144评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,833评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,350评论 2 342

推荐阅读更多精彩内容