008_配置windows+bochs环境

bochs配置参数

plugin_ctrl设备挂载

plugin_ctrl控制可选设备插件的存在。
这些插件使用这个选项直接加载,其中一些插件安装了一个配置选项,该选项仅在加载插件设备时可用。

  • “1”表示加载插件
  • “0”将卸载它(如果之前加载)
    bochsrc默认加载下列插件(如果存在):
  • biosdev :BIOS主板
  • extfpuirq
  • gameport :游戏端口
  • iodebug :IO调试
  • parallel :并口
  • serial :串口
  • speaker :声卡
  • unmapped :未映射的资源
    可选加载的bochsrc插件包括:
  • e1000 :以太太网
  • es1370
  • ne2k :NE2000 网卡
  • pcidev :PCI设备
  • pcipnic
  • sb16
  • usb_ohci : usb主控器1.1
  • usb_uhci : usb主控器1.0,1.1
  • usb_ehci : usb主控器2.0
  • usb_xhci : usb主控器3.0
  • voodoo

config_interface配置界面

  • 文本模式版本称为“textconfig”:使用stdin/stdout并始终在中编译,除非Bochs仅针对wx编译。
  • 图形版本称为“win32config”:仅在win32上可用,它是默认选项。
  • 图形版本称为“wx”:仅在Bochs编译时使用wxWidgets支持。

display_library显示库

使用GTK调试器gui(sdl,x)

cup

model

从所有受支持配置的预定义列表中选择要模拟的CPU配置。当使用此选项且该值与“bx_generic”不同时,CPUID选项的参数不再有效。

count

设置CPU的数量:每个内核处理器:每线程数为SMP仿真编译Bochs时的核心。Bochs目前最多支持14个线程(遗留APIC)或254个线程(xAPIC或更高版本)同时运行。如果Bochs是在没有SMP支持的情况下编译的,它将不接受与1不同的值。

quantum

在将控制权返回给另一个cpu之前,处理器允许执行的最大指令量。此选项仅存在于使用SMP支持编译的Bochs二进制文件中。

reset_on_triple_fault

当发生三重故障时(强烈建议)重置CPU,而不是死机。

如果试图在三重故障后继续,模拟将完全是假的!

cpuid_limit_winnt

确定是否将最大CPUID函数限制为2。此模式是解决WinNT安装和引导问题所必需的。

mwait_is_nop

启用此选项时,MWAIT不会将CPU置于休眠状态。此选项仅在使用—enable monitor mwait编译Bochs时存在。

msrs

定义用户CPU模型特定寄存器(MSR)规范的路径。

ignore_bad_msrs

忽略Bochs不理解的MSR引用;打印警告消息而不是生成#GP异常。默认情况下启用此选项,但如果启用了可配置MSR,则此选项不可用。

ips

每秒模拟指令数。这是Bochs能够在您的机器上运行的IP数量。您可以在启用—enable show ips选项的情况下重新编译Bochs,以查找工作站的功能。测量的IPS值将被记录到您的日志文件或状态栏中(如果gui支持的话)。

cupid CPU特性

这些设置只有在cpu型号设置为默认值“bx_generic”时才有效和可配置

level

设置CPUID返回的模拟CPU级别信息。默认值由configure选项—enablecuplevel决定。当前支持的值为5(对于奔腾和类似处理器)和6(对于P6及更高版本的处理器)。

family

设置CPUID返回的族信息。由configure选项确定的默认系列值—enable cpu level。

model

设置CPUID返回的模型信息。默认模型值为3。

stepping

设置CPUID返回的步进信息。默认步进值为3。

vendor_string

设置CPUID返回的CPUID供应商字符串(0x0)。这应该是一个12个字符的ASCII字符串。

brand_string

设置CPUID返回的CPUID品牌字符串(0x80000002。。0x80000004])。这最多应该是48个字符的ASCII字符串。

mmx

选择MMX指令集支持。此选项仅在Bochs编译时使用BXCPU级别>=5时存在。

apic

选择APIC配置(LEGACY/XAPIC/XAPIC_EXT/X2APIC)。此选项仅在Bochs编译时使用BXCPU级别>=5时存在。

sep

选择SYSENTER/SYSEXIT指令集支持。此选项仅在Bochs编译时使用BXCPU级别>=6时存在。

simd

选择SIMD指令支持。可以选择NONE/SSE2/SSE3/SSSE3/SSE4_1/SSE4_2/AVX/AVX2/AVX512中的任何一个。此选项仅在Bochs编译时使用BX_CPU_级别>=6时存在。只有使用—enable AVX选项编译Bochs时,AVX选项才存在。

sse4a

选择AMD SSE4A指令支持。此选项仅在Bochs编译时使用BXCPU级别>=6时存在。

misaligned_sse

选择AMD未对准SSE模式支持。此选项仅在Bochs编译时使用BXCPU级别>=6时存在。

aes

选择AES指令集支持。此选项仅在Bochs编译时使用BXCPU级别>=6时存在

sha

选择SHA指令集支持。此选项仅在Bochs编译时使用BXCPU级别>=6时存在。

movbe

选择MOVBE Intel(R)Atom指令支持。此选项仅在Bochs编译时使用BXCPU级别>=6时存在。

adx

选择ADCX/ADOX指令支持。此选项仅在Bochs编译时使用BXCPU级别>=6时存在。

xsave

选择XSAVE扩展支持。此选项仅在Bochs编译时使用BXCPU级别>=6时存在。

xsaveopt

选择XSAVEOPT指令支持。此选项仅在Bochs编译时使用BXCPU级别>=6时存在。

avx_f16c

选择AVX float16转换指令支持。此选项仅在使用—enable avx选项编译Bochs时存在。

avx_fma

选择AVX融合乘法加法(FMA)指令支持。此选项仅在使用—enable avx选项编译Bochs时存在。

bmi

选择BMI1/BMI2指令支持。此选项仅在使用—enable avx选项编译Bochs时存在。

fma4

选择AMD四操作数FMA指令支持。此选项仅在使用—enable avx选项编译Bochs时存在。

xop

选择AMD XOP指令支持。此选项仅在使用—enable avx选项编译Bochs时存在。

tbm

选择AMD TBM指令支持。此选项仅在使用—enable avx选项编译Bochs时存在。

x86_64

启用x86-64和长模式支持。此选项仅在Bochs使用x86-64支持进行编译时存在。

1g_pages

在长模式下启用1G页面大小支持。此选项仅在Bochs使用x86-64支持进行编译时存在。

pcid

在长模式下启用进程上下文标识符(PCID)支持。此选项仅在Bochs使用x86-64支持进行编译时存在。

smep

启用管理器模式执行保护(SMEP)支持。此选项仅在Bochs编译时使用BXCPU级别>=6时存在。

smap

启用管理器模式访问保护(SMAP)支持。此选项仅在Bochs编译时使用BXCPU级别>=6时存在。

mwait

选择MONITOR/MWAIT指令支持。此选项仅在使用—enable monitor mwait编译Bochs时存在。

vmx

选择VMX扩展仿真支持。此选项仅在使用—enable vmx选项编译Bochs时存在。

svm

选择AMD SVM(安全虚拟机)扩展仿真支持。此选项仅在使用—enable-svm选项编译Bochs时存在。

memory 内存

memory命令用于设置要模拟的物理内存量。

guest

设置要模拟的物理内存量。默认值为32MB,最大值仅受物理地址空间限制。

host

设置要为RAM仿真分配的主机内存量。在系统中分配的内存可能少于您想要模拟的内存。这将冒充看到不存在的内存。一旦系统需要新的内存块,它将从内存池中动态获取。如果guest已经使用了所有分配的主机内存并需要更多内存,将收到警告(致命的恐慌)。

注意:

由于主机操作系统的限制,Bochs无法在大多数32位系统上分配超过1024MB的空间。为了克服这个问题,使用—enable large ramfile选项配置和构建Bochs

megs

megs选项将“guest”和“host”内存参数设置为相同的值。
在所有其他情况下,应该使用“内存”选项

romimage

rombios控制着个人电脑首次开机时的功能。

可以在名为BIOS bochs latest的源或二进制发行版中使用预编译的BIOS。

默认的rombios通常从地址0xfffe0000开始加载,它的长度正好是128k。bochsbios的旧版本通常从地址0xffff0000开始加载,它的长度正好是64k。

可以使用环境变量$BXSHARE来指定BIOS的位置。现在支持在内存顶部使用外部大BIOS映像(最多512k),但建议使用Bochs分发的BIOS。起始地址是可选的,因为它可以根据图像大小来计算。

Bochs BIOS目前只支持选项“fastboot”跳过引导菜单延迟

vgaromimage VGA ROM配置

vgaromimage告诉Bochs要加载什么VGA ROM BIOS(在0xC0000)

vga VGA显示器

vga定义了与VGA显示器相关的参数.

extension

extension选项可用于指定VGA显示扩展名。
值为none时,您可以使用不带扩展名的标准VGA。其他支持的值包括Bochs vbe的vbe(需要VGABIOS lgpl最新版本作为VGA BIOS,请参阅vgaromimage选项)、cirrus用于cirrus SVGA支持(需要VGABIOS lgpl最新cirrus作为VGA BIOS)和voodoo,用于voodoo图形支持(需要外部VGA BIOS)。

VGA更新频率指定每秒的显示更新次数。此参数可以在运行时更改。默认值为5。

realtime

realtime选项指定VGA更新计时器的操作模式。
如果设置为1,则VGA计时器基于实时,否则基于ips设置。
如果主机速度慢(低IP、更新频率)并且客户机适当地使用HLT,则将其设置为0并“clock:sync=none”可能会提高来宾GUI在来宾处于空闲状态时的响应能力。默认值为1。

keyboard

type

键盘控制器的键盘类型。它必须是“xt”、“at”或“mf”之一。默认为“mf”。

serial_delay

通过串行路径将一个字符从键盘传输到控制器所需的大约时间(微秒)

paste_delay

尝试将字符粘贴到键盘控制器之间的大致时间(微秒)。这给来宾操作系统留下了处理字符流的时间。理想的设置取决于操作系统如何处理字符。之所以选择默认值100000 usec(.1秒),是因为它在Windows中始终有效。

如果操作系统在粘贴过程中丢失字符,请增加粘贴延迟,直到它停止丢失字符为止。

keymap

使本地物理键盘能够重新映射到虚拟化的美国键盘,正如PC架构所期望的那样。

键盘映射可用于显示库x、sdl(Linux端口)和wx(GTK端口)。对于SDL,您必须使用为SDL设计的键映射,wxWidgets GUI使用用于X11的键映射。

user_shortcut

定义了当您按下“用户”按钮时要发送的键盘快捷键。快捷方式字符串由最多3个键名(如下所示)组成,并用“-”字符分隔。

可使用的键盘键值名
alt, bksl, bksp, ctrl, del, down, end, enter, esc, f1, … f12, home, ins, left, menu, minus, pgdwn, pgup, plus, power, print, right, scrlck, shift, space, tab, up and win.

mouse

type

鼠标类型选项,您可以选择要模拟的鼠标类型。默认值为“ps2”。其他选项有’imps2’(PS/2上的滚轮鼠标)、’serial’、’serial_wheel’、’serial_msys’(一个com端口需要设置’mode=mouse’,请参阅com选项)’’inport’和’bus’(如果有)。要将鼠标连接到USB端口,请参阅USB_uhci、“USB_ohci”、“USB_ehci”或“USB_xhci”(需要PCI和USB支持)

enable

除非’enabled’选项设置为0,否则BochsGUI会创建鼠标“事件”。硬件仿真本身不会因此而禁用。除非您有特定的原因默认启用鼠标,否则建议您将其关闭。您还可以在运行时切换鼠标的使用(请参见headerbar和“toggle”选项)。

toggle

在运行时切换鼠标捕捉的默认方法是按下CTRL键和鼠标中键(“CTRL+mbutton”)。此选项允许将方法更改为“ctrl+f10”(如DOSBox)或“ctrl+alt”(如QEMU)或“f12”

clock

sync

这定义了如何将Bochs内部时间与实时同步的方法。值为’none’时,Bochs时间依赖于IPS值,并且不使用主机时间同步。“减速”方法牺牲性能以保持再现性,同时允许主机时间相关性。“实时”方法牺牲了再现性,以保持性能和主机时间相关性。可以同时启用这两种同步方法。

rtc_sync

如果此选项与实时同步一起启用,RTC将以实时速度运行。默认情况下,此功能处于禁用状态。

time0

指定虚拟机的开始(引导)时间。使用time(2)系统调用返回的时间值或ctime(3)系统调用返回的字符串。如果没有设置time0值,或者time0等于1(特殊情况),或者time0等于“local”,则模拟将在当前本地主机时间开始。如果time0等于2(特殊情况)或time0等于’utc’,模拟将在当前utc时间开始。

private_colormap

请求GUI创建并使用自己的非共享colormap。
在Bochs窗口中时将使用此颜色贴图。如果未启用,则可以使用共享颜色映射方案。再次,enabled=1打开此功能,0关闭它

floppy

Floppya是第一个驱动器,floppyb是第二个驱动器。如果从软盘启动,floppya应该指向可引导磁盘。要从磁盘映像读取,请写入映像文件的名称。在许多操作系统中,Bochs可以直接从原始软盘驱动器读取数据。对于原始磁盘访问,请使用设备名(Unix系统)或驱动器号和冒号(Windows系统)。

支持以下软盘介质类型:2u88、1u44、1u2720k、360k、320k、180k、160k,以及允许Bochs自动检测软盘介质类型的“image”(仅对图像有效,不适用于原始软盘驱动器)。在这种情况下,大小必须与支持的类型之一匹配。

您可以将介质的初始状态设置为弹出或插入。通常你会想用插入式。

参数’type’可用于启用没有指定介质和状态的软盘驱动器。通常驱动器类型是根据介质类型设置的。

可选参数“write_protected”可用于控制介质写保护开关。默认情况下,它处于禁用状态。

ata

ata0, ata1, ata2, ata3

这些选项支持多达4个ata通道。对于每个通道,必须指定两个基本io地址和irq。默认情况下启用ata0和ata1

ata0-master, ata0-slave, ata1-, ata2-, ata3-*

ata0-master, ata0-slave, ata1-, ata2-, ata3-* 定义了所有连接的ata设备特性

选项说明
type设备类型[disk | cdrom]
pathimage路径
modeimage 类型, 仅磁盘有效[flat | concat | external | dll | sparse | vmware3 | vmware4 | undoable | growing | volatile | vpc | vbox | vvfat ]
cylindersonly valid for disks
heads仅适用于磁盘
spt仅适用于磁盘
status仅仅适用于cdroms[inserted | ejected]
biosdetect侦测类型[auto | cmos | none]
translationBIOS完成的转换类型(旧版int13),仅适用于磁盘[none | lba | large | rechs | auto]
modelidentify device ATA命令返回的字符串
journal可撤消、易失性和vvfat磁盘的重做日志的可选文件名

boot

这定义了引导顺序。最多可以指定3个引导驱动器,可以是“软盘”、“磁盘”、“cdrom”或“网络”(引导ROM)。也支持旧版“a”和“c”

floppy_bootsig_check

使用floppy_bootsig_check命令禁用引导软盘上0xaa55签名检查该,默认打开

log

给出您想要Bochs debug和misc的日志文件的路径。
如果不使用此选项或不将文件名设置为“-”,则输出将写入控制台。如果你不想要它,就把它设为“/dev/null”(Unix)或“nul”(win32)

logprefix

logprefix命令用于日志输出时每行的输出前缀。

可选的格式如下:


  %t : 11 decimal digits timer tick
  %i : 8 hexadecimal digits of current cpu eip (ignored in SMP configuration)
  %e : 1 character event type ('i'nfo, 'd'ebug, 'p'anic, 'e'rror)
  %d : 5 characters string of the device, between brackets

debugger_log

Bochs记录调试器输出的日志文件的路径。如果您不需要它,请将其设为’/dev/null’或’-‘。

debug/info/error/panic

bochsrc中的debug、info、error和panic控制Bochs遇到每种类型的事件时将执行的操作。
允许的操作包括:fatal(终止bochs)、ask(询问用户要做什么)、warn(显示带有消息的对话框并继续)、report(将信息打印到控制台或日志文件)或ignore(不执行任何操作

 debug: action=ignore, pci=report
  info: action=report
  error: action=report
  panic: action=ask

com

com定义了一个串行端口(UART类型16550A)。

当使用模式’term’时,可以指定一个设备作为com1使用。这是一个真正的串行线路,或pty。要使用pty(在X/Unix下),创建两个窗口(通常是xterm)。其中一个将运行Bochs,另一个将充当com1。使用“tty”命令找出com1窗口的tty,并将其用作“dev”参数。然后在com1窗口中执行“sleep 1000000”操作以防止shell弄乱事情,并在另一个窗口中运行Bochs。到com1的串行I/O(端口0x3f8)将全部转到另一个窗口。

当使用socket和pipe(仅限win32)模式时,Bochs将成为套接字/命名管道客户端或服务器。在客户端模式下,它连接到已经运行的服务器(如果连接失败,Bochs将com端口视为未连接)。在服务器模式下,它将打开套接字/命名管道,并等待客户端应用程序连接到它,然后再开始模拟。此模式对于远程调试非常有用(例如,使用gdb的“target remote主机:端口“命令或windbg的命令行选项-kcom:管道,端口=.\pipe\pipename)。套接字模式使用简单的TCP通信,管道模式使用双工字节模式管道。

其他串行模式有“null”(无输入/输出)、“file”(输出到指定为“dev”参数并在运行时可更改的文件)、“raw”(使用实际串行端口-部分在win32上实现)、“mouse”(标准串行鼠标-需要鼠标选项设置“type=serial”、“type=serial”或“type=serial”msys)

parport并口

定义了一个并行(打印机)端口。打开并定义输出文件后,模拟打印机端口将客户端操作系统打印的字符发送到输出文件中。在某些平台上,可以使用设备文件名将数据发送到真正的并行端口(例如,Linux上的“/dev/lp0”,win32平台上的“lpt1”)。输出文件可以在运行时更改

speaker扬声器

speaker定义了PC扬声器输出模式。

  • 在“sound”模式下,蜂鸣音由方波发生器产生,方波发生器是低电平声音支持的一部分。
  • “system”模式仅在Linux和Windows上可用。在Linux/dev/console上用于输出,在Windows上使用Beep()函数。
  • “gui”模式将蜂鸣声转发到相关的gui方法(当前仅由carbongui使用)

ne2k以太网适配器

  • IOADDR,IRQ:你可能不需要更改IOADDR和IRQ,除非有是IRQ冲突。如果NE2000分配给PCI插槽。

  • MAC:MAC地址不能与网络上任何机器的地址匹配。另外,第一个字节必须是偶数(位0表示多播地址),并且不能使用ff:ff:ff:ff:ff:ff,因为这是广播地址。对于ethertap模块,必须使用fe:fd:00:00:00:01。有可能还有其他限制。为了安全起见,使用b0:c4。。。地址。

  • ETHMOD:ETHMOD值定义了哪个低级操作系统特定模块用于访问物理以太网接口。也可以指定网络模拟器或无输入/输出(“空”)的模块。

  • ETHDEV:ETHDEV值是主机上网络接口的名称平台。在UNIX计算机上,可以通过运行ifconfig来获取名称。打开Windows计算机上,必须运行niclist以获取ethdev的名称。Niclist源代码位于misc/Niclist.c中,并且包含在Windows中二进制版本。

  • script:脚本值是可选的,是脚本的名称在bochs初始化网络接口后执行。你可以用此脚本可配置此网络接口,或启用伪装。这主要适用于仅存在于Bochs执行。网络接口名称将提供给脚本作为第一个参数。

  • BOOTROM:BOOTROM值是可选的,是ROM映像的名称装载。请注意,此功能仅在PCI版本中实现NE2000。

bochs.bxrc文件

有的参数在启动过程中会发现错误,删除或者注释就行了,

# 指定虚拟机的内存大小为4G
megs: 2048

# 指定虚拟机的BIOS镜像,下面这两个地址填自己bochs安装目录下文件的对应地址
romimage: file="D:\Program Files\Bochs-2.6.11\BIOS-bochs-latest"
vgaromimage: file="D:\Program Files\Bochs-2.6.11\VGABIOS-lgpl-latest"

# configuration file generated by Bochs
plugin_ctrl: unmapped=1, biosdev=1, speaker=1, extfpuirq=1, parallel=1, serial=1
config_interface: textconfig
# display_library: sdl

boot: disk
# floppy_bootsig_check: disabled=0
# floppya: type=1_44, 1_44="boot.img", status=inserted, write_protected=0
# no floppyb
ata0: enabled=1, ioaddr1=0x1f0, ioaddr2=0x3f0, irq=14
# 下面文件名也要填自己的
ata0-master: type=disk, path="./zuos.img", mode=flat 
# ata0-slave: type=none
ata1: enabled=1, ioaddr1=0x170, ioaddr2=0x370, irq=15
ata1-master: type=none
ata1-slave: type=none
ata2: enabled=0
ata3: enabled=0
pci: enabled=1, chipset=i440fx
vga: extension=vbe, update_freq=5

cpu: count=1:1:1, ips=4000000,  reset_on_triple_fault=1, cpuid_limit_winnt=0, ignore_bad_msrs=1, mwait_is_nop=0, msrs="msrs.def"

#cpuid: x86_64=1,level=6, mmx=1, sep=1, aes=1, movbe=1, xsave=1,apic=x2apic,sha=1,movbe=1,adx=1,xsaveopt=1,avx_f16c=1,avx_fma=1,bmi=bmi2,1g_pages=1,pcid=1,fsgsbase=1,smep=1,smap=1,mwait=1,vmx=1
#cpuid: family=6, model=0x1a, stepping=5, vendor_string="GenuineIntel", brand_string="Intel(R) Core(TM) i7-4770 CPU (Haswell)"

print_timestamps: enabled=0
debugger_log: -
magic_break: enabled=0
port_e9_hack: enabled=0
private_colormap: enabled=0
clock: sync=none, time0=local, rtc_sync=0
# no cmosimage
# no loader
log: -
logprefix: %t%e%d
debug: action=ignore
info: action=report
error: action=report
panic: action=ask
keyboard: type=mf, serial_delay=250, paste_delay=100000, user_shortcut=none
mouse: type=ps2, enabled=0, toggle=ctrl+mbutton
speaker: enabled=1, mode=system
parport1: enabled=1, file=none
parport2: enabled=0
com1: enabled=1, mode=null
com2: enabled=0
com3: enabled=0
com4: enabled=0

运行测试

bochsdbg.exe -q -f .\bochs.bxrc

image.png
设置断点

b 0x100000

image.png
继续运行 c
退出 q
image.png
可以看见 cs ss是64位的了,CUP也是从long mode退出的

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值