《操作系统真象还原》第1章

这是本人第一次尝试写一个操作系统,参考书籍为《操作系统真象还原》。欲作博客,以享自我。

前期基础(非必要):

  • 基本的linux命令
  • 哈工大OS课程+lab
  • xv6源码分析+lab(参考书籍:《操作系统原型》(罗秋明))
  • 《汇编语言》(王爽)
  • 《x86汇编语言:从实模式到保护模式》
  • 《程序员的自我修养——链接、装载与库》

因为第1章所记录实验内容已于昨日提前完成,全部内容凭记忆写出,若有错误,可参考文末给出的两篇博客。

此后实验内容,将力求理清每一步的来龙去脉并随时记录,以便自己加深印象和随时复习之用。

因实验环境和时间所限,希望能成功完成此OS。


步骤:

1.安装WSL2+Ubuntu20.04+GUI(VcXsrv)

2.下载Bochs

3.配置Bochs

4.运行Bochs


 1.安装WSL2+Ubuntu20.04+GUI(VcXsrv)


 因为之前在OS课上阅读并分析xv6源码时已经安装好了,所以不再演示。

可参考链接:

Window10开发环境搭建(1) | 详细演示WSL2的安装_哔哩哔哩_bilibili

WSL2中使用VcXsrv实现xfce4图形界面+声音传输 - 知乎 (zhihu.com)

WSL的cmd界面如下:

 开启图形界面后如下:


2.下载Bochs

 在linux的firefox浏览器中打开以下网站下载,Bochs版本为2.6.8

Download bochs-2.6.8.tar.gz (Bochs x86 PC emulator) (sourceforge.net)

下载完成后,打开终端,输入:

tar -zxvf bochs-2.6.8.tar.gz

解压成功。


接下来开始编译Bochs

  • configure

终端输入“cd bochs-2.6.8”进入bochs中,再输入代码:

复制代码
./configure \
--prefix=/home/zbb/bochs \
--enable-debugger \
--enable-disasm \
--enable-iodebug \
--enable-x86-debugger \
--with-x \
--with-x11
复制代码

注意:上述 “--prefix=..."后的路径要输入自己的安装路径。

各参数含义可查看书本。

此时可能会出现错误,可对照文末给出的两篇博客进行操作。

有个错误,在这两篇博客中都没有出现:

给出可能可以解决的博客链接:

如果很不幸,在多次百度并尝试后,你还是不能解决这个问题,甚至由此引出了更多的问题(如递归一般),那你可能需要像我一样——重装系统吧。。。很神奇,重装系统再次尝试后就可以了(虽然花了一个晚上的时间),可能是因为之前分析xv6时安装了qemu的原因吧。

  • make

终端输入

make
  • make install

再输入

make install

本人完成这两步时都很顺利,成功后的截图:

前往文件夹中查看,应该是可以看到生成了bochs文件(其中含有bin和share文件)。若当前路径下没有,则看看其它路径下有没有该文件,再将bochs移过来。


3.配置Bochs


cd到bochs下,配置文件 bochsrc.disk,即输入:

vim bochsrc.disk

在bochsrc.disk中输入下述代码。注意此处与书中不同:

第19行将"keyboard_mapping"修改为"keyboard";

注释(或删除)第26行,按书中理解应该是与前面configure中的"--enable-debugger \"这个参数发生了冲突(一个支持gdb远程调试,一个不支持)。

复制代码
 1 # 设置 Bochs 在运行过程中能够使用的内存,本例为 32MB
 2 megs: 32
 3 
 4 # 设置对应真实机器的 BIOS 和 VGA BIOS
 5 romimage: file=/home/swings/bochs/share/bochs/BIOS-bochs-latest
 6 vgaromimage: file=/home/swings/bochs/share/bochs/VGABIOS-lgpl-latest
 7 
 8 # 设置 Bochs 使用的磁盘
 9 # floppya: 1_44=a.img, status=inserted
10 
11 # 选择启动盘符
12 boot: disk # 从硬盘启动
13 
14 # 设置日志文件输出
15 log: bochs.out
16 
17 # 关闭鼠标,打开键盘
18 mouse: enabled=0
19 keyboard: enabled=1,
20 map=/home/zbb/bochs/share/bochs/keymaps/x11-pc-us.map
21 
22 # 硬盘设置
23 ata0: enabled=1, ioaddr1=0x1f0, ioaddr2=0x3f0, irq=14
24 
25 # 增加 Bochs 对 GDB 的支持,GDB 远程连接到此机器的 1234 端口便可调试
26 #gdbstub: enabled=1, port=1234, text_base=0, data_base=0, bss_base=0
复制代码

再次提示:注意要把第20行的路径换成自己的文件路径。


4.运行bochs


保存文件后输入"bin/bochs",若干步直接回车后会显示让你输入“bochsrc.disk”以选取配置文件,为简便可以直接输入:

bin/bochs -f bochsrc.disk

然后发现只有黑框:

原因是 bochs 默认是调试模式,需要键入c才能继续运行。

键入c后显示如下:

果然如书中所说,提示我们缺少启动盘——那就创建启动盘。


bochs提供了创建虚拟硬盘的工具,建议不要输入指令一次性完成,否则可能会出现错误,一步一步完成如下:

创建启动盘后的提示在最后一行,将这些信息加入到配置文件bochsrc.disk的最后一行:

ata0-master: type=disk,path="hd60M.img",mode=flat,cylinders=121,heads=16,spt=63

再次运行bochs,截图如下:

注意到此时的错误提示与之前的不同了,至于原因是什么,请见第2章!


参考博客:

感谢以上两位大佬的博客帮助我完成了第一章的实验!!!

 

posted @   Hell0er  阅读(773)  评论(0编辑  收藏  举报
编辑推荐:
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· C++代码改造为UTF-8编码问题的总结
阅读排行:
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
点击右上角即可分享
微信分享提示