手写操作系统(六)-Bochs配置

代码、内容参考来自于包括《操作系统真象还原》、《一个64位操作系统的设计与实现》以及《ORANGE’S:一个操作系统的实现》。

1.虚拟机配置

为了后面更好操作,我们在ubuntu中操作

使用你习惯的虚拟机安装即可

下载GCC

sudo apt update

安装 GCC 和必要的构建工具

sudo apt install build-essential

验证 GCC 安装是否成功

gcc --version

 

2.Bochs配置

Bochs 主要用于模拟 x86 架构的计算机系统,这是我们的操作系统最终的宿主机。

下载地址:https://sourceforge.net/projects/bochs/files/bochs/2.8/bochs-2.8.tar.gz/download

然后上传到ubuntu上

跳转到下载目录

解压

tar -zxvf  bochs-2.8.tar.gz

运行configure脚本,其中–prefix是要安装的目录

sudo ./configure --enable-debugger --enable-disasm --prefix=/bochs --enable-iodebug --enable-x86-debugger --with-x --with-x11

编译

make

编译安装

make install

 

然后切换到/bochs目录

在bin目录下执行bximage

sudo ./bximage

第一个选择 1,即创建新的硬盘或者软盘

第二个选择 hd,即创建硬盘

第三个选择 flat,即创建flat格式的硬盘,还有一些诸如sparse, growing, vpc or vmware4格式的硬盘。

第四个选择 512,即一个扇区有512字节

第五个选择 60,即硬盘的大小为60MB

第六个选择dreams.img,这个是硬盘的名字

当前目录下就会生成dreams.img文件

 

同样在bin目录下新建一个启动文件 bochsrc.disk

# 设置内存为32MB
megs: 32

# 设置对应机器的BIOS
romimage: file=/bochs/share/bochs/BIOS-bochs-latest
# 设置对应机器的VGA BIOS
vgaromimage: file=/bochs/share/bochs/VGABIOS-lgpl-latest

# 选择启动盘符,默认为从软盘启动,但是这里设置为硬盘,软盘太古老了
boot: disk

# 设置日志文件的输出
log: bochs_out.log

# 关闭鼠标功能,打开键盘功能,并且设置键盘的映射
mouse: enabled=0
keyboard: keymap=/bochs/share/bochs/keymaps/x11-pc-us.map

# 硬盘设置
ata0: enabled=1, ioaddr1=0x1f0, ioaddr2=0x3f0, irq=14 
ata0-master: type=disk, path="/bochs/bin/dreams.img", mode=flat

 

其中的大部分设置都做了详细的注释,这里我们对硬盘部分做出一些更详细的解释

  • enabled=1:表示 ATA0 控制器被启用。这意味着 Bochs 将会模拟一个 ATA0 控制器,并允许虚拟机使用这个控制器来访问硬盘或光驱设备。
  • ioaddr1=0x1f0:表示 ATA0 控制器的 I/O 端口地址。在计算机体系结构中,I/O 端口用于与外部设备进行数据交换。这里指定了 ATA0 控制器的主要 I/O 端口地址为 0x1f0。
  • ioaddr2=0x3f0:表示 ATA0 控制器的备用(secondary)I/O 端口地址。有些设备可能需要额外的 I/O 端口进行通信,这里指定了 ATA0 控制器的备用 I/O 端口地址为 0x3f0。
  • irq=14:表示 ATA0 控制器的中断请求线(IRQ)。中断请求线用于处理硬件设备发出的中断信号,这里指定了 ATA0 控制器的中断请求线为 14。

同样在bin目录下执行,注意这里不能使用远程连接工具执行

./bochs -f bochsrc.disk

在bochs的命令行中先输入 6,即开始仿真

在输入 c,即开始执行

系统提示没有可引导的启动设备,也就是我们设置的硬盘是一个空的硬盘,里面并没有程序可以执行,所以直接报错退出了。

 

3.nasm

我们之前的nasm在linux可以直接使用apt下载

sudo apt-get install nasm

 

4.代码迁移

接下来就是把我们之前的代码复制到ubuntu里

编译mbr和Loader

nasm -I common/ -o bin/mbr.bin asm/mbr.asm 
nasm -I common/ -o bin/Loader.bin asm/Loader.asm

复制mbr二进制程序到硬盘:

bs=512 表示每次读写的字节数是 512 字节。 count=1 表示只写入一个扇区的内容。 conv=notrunc 表示不截断 dreams.img 文件,即保留文件的现有内容并在其上写入新的内容。

sudo dd if=bin/mbr.bin of=/bochs/bin/dreams.img bs=512 count=1 conv=notrunc
sudo dd if=bin/Loader.bin of=/bochs/bin/dreams.img bs=512 count=1 seek=2 conv=notrunc

执行

sudo /bochs/bin/bochs -f /bochs/bin/bochsrc.disk

 

5.参考

郑钢著操作系统真象还原

田宇著一个64位操作系统的设计与实现

丁渊著ORANGE’S:一个操作系统的实现

暂无评论

发送评论 编辑评论

|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇