文章目录
- 下载Bochs
- 配置Bochs
Bochs
Bochs是一个x86硬件平台的开源模拟器。它可以模拟各种硬件的配置。Bochs模拟的是整个PC平台,包括I/O设备、内存和BIOS。更为有趣的是,甚至可以不使用PC硬件来运行Bochs。事实上,它可以在任何编译运行Bochs的平台上模拟x86硬件。通过改变配置,可以指定使用的CPU(386、486或者586),以及内存大小等。一句话,Bochs是电脑里的“PC”。根据需要,Bochs还可以模拟多台PC,此外,它甚至还有自己的电源按钮。
《摘自百度百科》
实验环境:ubuntu18.04+VMware
下载Bochs
Bochs下载链接:
- https://sourceforge.net/projects/bochs/files/bochs/2.6.8/bochs-2.6.8.tar.gz/download
下载解压后
进入文件夹bochs-2.6.8中
cd bochs-2.6.8/
在命令行中输入以下内容
./configure \
--prefix=/home/cooiboi/bochs \
--enable-debugger \
--enable-disasm \
--enable-iodebug \
--enable-x86-debugger \
--with-x \
--with-x11
笔者这里的虚拟机环境较为齐全~
【补充】虚拟机中之前没有安装相应环境的可以先运行下面的代码
apt-get -y install gcc
apt-get install build-essential
apt-get install g++
之后在命令行中输入make
接着,输入sudo make install
这里多了的两个bin文件和share文件夹在/home/cooiboi/bochs目录下。
配置Bochs
完成下载后,我们需要配置Bochs,Bochs是通过配置文件完成的。
进入到/home/cooiboi/bochs目录下。
bin目录下会看到bximage和bochs两个文件,其中bximage是我们配置启动盘时的核心。
接下来开始配置!!!
首先,进入bin目录
(base) user@ubuntu:/home/cooiboi/bochs$ cd bin
(base) user@ubuntu:/home/cooiboi/bochs/bin$ ls
bochs bximage
sudo vim bochsrc.disk
修改后的配置文件代码
bochsrc.disk
# 首先设置Bochs在运行中能够使用的内存
megs : 512
# 设置对应真实机器的BIOS和VGA BIOS。
romimage: file=/home/cooiboi/bochs/share/bochs/BIOS-bochs-latest
vgaromimage: file=/home/cooiboi/bochs/share/bochs/VGABIOS-lgpl-latest
# 选择启动盘符,这里是硬盘启动
boot: disk
# 设置日志的输出
log: bochs.out
# 开启关闭某些功能
mouse:enabled=0
keyboard:keymap=/home/cooiboi/bochs/share/bochs/keymaps/x11-pc-us.map
# 硬盘设置
ata0:enabled=1,ioaddr1=0x1f0,ioaddr2=0x3f0,irq=14
# 启动盘信息hd60M.img,下面的hd60M.img为我们启动硬盘
ata0-master: type=disk, path="hd60M.img", mode=flat,cylinders=121,heads=16,spt=63
#ata0-master: type=disk, path="/home/cooiboi/bochs/bin/./hd60M.img", mode=flat, cylinders=121, heads=16, spt=63
#gdbstub:enabled=1,port=1234,text_base=0,data_base=0,bss_base=0
(base) user@ubuntu:/home/cooiboi/bochs$ bin/bochs
或者到当前目录使用./bochs【记得:一定要加./】
上面的BXSHARE not set. using…那一行说明我们并未使用配置文件。
输入6
开始模拟
输入c
这里的意思是bochs启动时找不到启动盘。
下面部分参考Ubuntu下bochs详细安装步骤(超详细!)文章~
【重点】接下来的思路是创建后缀名为asm测试文件,然后经过nasm编译,生成后缀名为bin的二进制文件。再通过bin目录下的bximage来创建一个硬盘,接着把刚才生成的.bin文件写入硬盘中,最后启动bochs测试。
步骤1:创建硬盘
命令如下:
(base) user@ubuntu:/home/cooiboi/bochs$ bin/bximage -hd -mode="flat" -size=60 -q hd60M.img
* -fd 创建软盘。
* -hd 创建硬盘。
* -mode 创建硬盘的类型,有 flat sparse growing三种。
* -size 指创建多大的硬盘,以 MB 为单位。
* -q 以静默模式创建,创建过程中不会和用户交互。
* bin/bximage --help 查看帮助手册
出现Bug:
使用以下方式创建
(base) user@ubuntu:/home/cooiboi/bochs/bin$ sudo ./bximage
========================================================================
bximage
Disk Image Creation / Conversion / Resize and Commit Tool for Bochs
$Id: bximage.cc 12690 2015-03-20 18:01:52Z vruppert $
========================================================================
1. Create new floppy or hard disk image
2. Convert hard disk image to other format (mode)
3. Resize hard disk image
4. Commit 'undoable' redolog to base image
5. Disk image info
0. Quit
Please choose one [0] 1
Create image
Do you want to create a floppy disk image or a hard disk image?
Please type hd or fd. [hd] hd
What kind of image should I create?
Please type flat, sparse, growing, vpc or vmware4. [flat] flat
Enter the hard disk size in megabytes, between 10 and 8257535
[10] 60
What should be the name of the image?
[c.img] hd60M.img
Creating hard disk image 'hd60M.img' with CHS=121/16/63
The following line should appear in your bochsrc:
ata0-master: type=disk, path="hd60M.img", mode=flat
【注意】hd60M.img要创建再bin目录下~
步骤2:创建汇编文件(test.asm)
(base) user@ubuntu:/home/cooiboi/bochs/bin$ sudo vim test.asm
test.asm
org 07c00h ; 告诉编译器程序加载到7c00处
mov ax, cs
mov ds, ax
mov es, ax
call DispStr ; 调用显示字符串例程
jmp $ ; 无限循环
DispStr:
mov ax, BootMessage
mov bp, ax ; ES:BP = 串地址
mov cx, 16 ; CX = 串长度
mov ax, 01301h ; AH = 13, AL = 01h
mov bx, 000ch ; 页号为0(BH = 0) 黑底红字(BL = 0Ch,高亮)
mov dl, 0
int 10h ; 10h 号中断
ret
BootMessage: db "Hello, OS world!"
times 510-($-$$) db 0 ; 填充剩下的空间,使生成的二进制代码恰好为512字节
dw 0xaa55 ; 结束标志
步骤3:对汇编文件(test.asm)汇编成bin文件
安装个nasm编译器先
sudo apt-get install nasm
开始汇编
sudo nasm test.asm -o test.bin
test.bin文件成功被创建
(base) user@ubuntu:/home/cooiboi/bochs/bin$ sudo nasm test.asm -o test.bin
(base) user@ubuntu:/home/cooiboi/bochs/bin$ ls
... test.asm test.bin
步骤4:将bin文件(test.bin)写入硬盘(hd60M.img)中
dd if=test.bin of=hd60M.img bs=512 count=1 conv=notrunc
(base) user@ubuntu:/home/cooiboi/bochs/bin$ sudo dd if=test.bin of=hd60M.img bs=512 count=1 conv=notrunc
1+0 records in
1+0 records out
512 bytes copied, 0.000155012 s, 3.3 MB/s
步骤5:启动bochs
sudo ./bochs -f bochsrc.disk
执行该文件
(base) user@ubuntu:/home/cooiboi/bochs/bin$ sudo ./bochs -f ./bochsrc.disk
依次输入6
和c
.
Hello , OS world!
总结
- 创建硬盘
- 创建汇编文件(.asm)
- 编译asm文件成bin文件
- 将bin文件写入硬盘(.img)中
- 启动bochs
参考资料
- 《操作系统真象还原》
- 《操作系统真象还原》第一章 ---- 安装Vmware Station 安装Ubuntu 装载配置Bochs 安装Vmware tools 开始乘帆历险!
- Ubuntu下bochs详细安装步骤(超详细!)