《操作系统真象还原》第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章!
参考博客:
- 《操作系统真象还原》第一章 ---- 安装Vmware Station 安装Ubuntu 装载配置Bochs 安装Vmware tools 开始乘帆历险!_Love 6的博客-CSDN博客_操作系统真相还原环境安装vmware
- 操作系统真象还原第一章_swings_ss的博客-CSDN博客_操作系统真相还原
感谢以上两位大佬的博客帮助我完成了第一章的实验!!!
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· C++代码改造为UTF-8编码问题的总结
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库