bochs编译安装

本文参考X86汇编语言 从实模式到保护模式教材设置
不建议使用Ubuntu22.04,可能由于版本过高,源码编译过程中各种报错和环境依赖问题,无从下手
本机使用deepin20.9顺利编译安装成功,并且deepin对虚拟机适配更友好

特别注意编译带debug的版本,bochs主要工作就是进行调试的,如果你运行bochs没有等待你输入指令就自动执行了可能需要重新安装哦

编译命令
./configure --prefix=‘/usr/local/bochs2.6’ --enable-debugger --enable-disasm --enable-iodebug --enable-x86-debugger --with-x --with-x11
make
sudo make install

GDB调试版本
./configure --enable-gdb-stub --prefix=‘/usr/local/bochs-gdb’

编译报错问题
./configure …命令执行后需要在生成的makefile中LIBS属性后添加-lpthread,因为头文件引入pthread.h在Linux默认Import Library中没有,需要使用库libpthread.a进行编译链接。
可能缺少的依赖,每个人的环境不一样,具体根据报错baidu
以下仅供参考 sudo apt-get install libx11-dev libc6-dev build-essential xorg-dev libgtk2.0-dev libreadline-dev
安装依赖需要重新configure,修改makefile

安装后添加路径
sudo vim /etc/profile
末尾添加
export PATH=“$PATH:/usr/local/bochs2.6/bin”
这里执行完需要注销下,否则不会立即生效

配置文件
运行bochs可以设置自动生成3edit option->12disk&boot option->(4First HD&15Boot option)
按0可以返回,不要忘了保存配置,命名bochsrc在你的工作目录下,否则每次需要你load
在选项里设置硬盘参数和硬盘启动disk,跳过软盘检查
硬盘可以和virtualbox共用一块,本机使用的virtualbox生成的vhd标准的100M硬盘,bochs的bximage工具也可以生成,本机未测试是否可用,使用VHD需在bochs配置里设置mode为vpc
以上设置均可在以下配置文件中体现,很多参数是自动生成的,参考配置bochsrc(bochs2.6)

# configuration file generated by Bochs
plugin_ctrl: unmapped=1, biosdev=1, speaker=1, extfpuirq=1, parallel=1, serial=1, iodebug=1
config_interface: textconfig
#display_library: x, options="gui_debug"
display_library: x

memory: host=32, guest=32
#文件在安装目录下
romimage: file="/usr/local/bochs/share/bochs/BIOS-bochs-latest"
vgaromimage: file="/usr/local/bochs/share/bochs/VGABIOS-lgpl-latest"
#硬盘启动
boot: disk
floppy_bootsig_check: disabled=1
# no floppya
# no floppyb
ata0: enabled=1, ioaddr1=0x1f0, ioaddr2=0x3f0, irq=14
#硬盘参数,使用bximage(2.7版本支持,也可使用课件提供的fixvhdw64工具,其他方法自行baidu)查看C/H/S
ata0-master: type=disk, mode=vpc, translation=auto, path="/home/Sun/Desktop/virtualbox/Other.vhd", cylinders=1003, heads=12, spt=17, biosdetect=auto, model="Generic 1234"
ata1: enabled=1, ioaddr1=0x170, ioaddr2=0x370, irq=15
ata2: enabled=0
ata3: enabled=0
pci: enabled=0
vga: extension=vbe, update_freq=5
cpu: count=1, ips=4000000, model=bx_generic, reset_on_triple_fault=1, cpuid_limit_winnt=0, ignore_bad_msrs=1, mwait_is_nop=0
cpuid: family=6, model=0x03, stepping=3, mmx=1, apic=xapic, sse=sse2, sse4a=0, sep=1, aes=0, xsave=0, xsaveopt=0, movbe=0, adx=0, smep=0, mwait=1
cpuid: vendor_string="GenuineIntel"
cpuid: brand_string="              Intel(R) Pentium(R) 4 CPU        "

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
panic: action=ask
error: action=report
info: action=report
debug: action=ignore
keyboard: type=mf, serial_delay=250, paste_delay=100000, keymap=
user_shortcut: keys=none
mouse: enabled=0, type=ps2, toggle=ctrl+mbutton 
parport1: enabled=1, file=""
parport2: enabled=0
com1: enabled=1, mode=null, dev=""
com2: enabled=0
com3: enabled=0
com4: enabled=0

引导扇区

;test.asm
;仅供测试,在屏幕上输出a
start:mov ax,0xb800
mov ds,ax
mov byte [0],'a'
mov byte [1],02h
jmp $
times 510-($-$$) db 0
db 0x55,0xaa

引导扇区写入脚本附启动vritualbox,不需要VB就自行注释吧

#run
#!/usr/bin/bash
#关闭正在运行的VB,虚拟机名称为asm
VBoxManage controlvm "asm" poweroff
nasm -f bin ./test.asm -o test
dd if=test of=Other.vhd bs=512 count=1 conv=notrunc
hexdump -C Other.vhd | head -10
#开启VB
timeout 10s bash ./start > /dev/null 2>&1
echo "--------  start successfully  ---------"

#start
#!/usr/bin/bash
while true
do sleep 0.3 if VBoxManage startvm "asm" | grep -q "successfully" then break fi
done

在这里插入图片描述

运行bochs
6.Begin simulation
输入b 0x7c00打断点
输入c 执行到断点处

在这里插入图片描述

注意下面的Booting from 0000:7c00,到这说明安装的没有问题

在这里插入图片描述

virtualbox下可以看到输出a
终端运行bochs,输入c执行同样看到了输出a说明环境搭建好啦★,°:.☆( ̄▽ ̄)/$:.°★

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值