实现一个操作系统系列1-《操作系统真象还原》环境搭建

  • 第1章 环境部署
    • 安装 Bochs
    • 配置 bochs

相信很多读者都是在校大学生或者一名应用层开发工程师,那么你可能就会问,我又不从事底层开发,以后也很大概率接触不到操作系统内核的知识,有必要深入学习操作系统吗?

答案当然是肯定的,操作系统是所有软件的基础,所有的上层软件都要依赖于操作系统提供各种运行机制。如果仔细观察身边的技术大牛,他们的基本功都是非常扎实,这对他们的技术成长是非常有帮助的。

此外,如果你的简历上说你自己手写了一个操作系统,这必定能给面试官留下很大的加分印象。

第1章 环境部署

首先需要准备一个虚拟机软件(VMWare 或者 VirtualBox),然后就是 linux 操作系统,具体的安装教程可以自行网上搜索。

我这里选择的开发环境是 VMWare + Ubuntu 18.4 + bochs-2.6.2

安装 Bochs

  • 下载 bochs-2.6.2.tar.gz

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

  • 解压 (我把 bochs-2.6.2.tar.gz 放在 /home/book/bochsken 目录下)

下载完解压之后,cd 到 bochs-2.6.2

  • 通过 configure,make,make install 进行安装。

首先是 configure

下面第二行更改成自己的目录,注意 \ 前面有一个空格,\后面不能有空格

./configure \
--prefix=/home/book/bochsken \
--enable-debugger \
--enable-disasm \
--enable-iodebug \
--enable-x86-debugger \
--with-x \
--with-x11

configure 之后执行 make

在编译过程中可能会报错,大家根据自己遇到的错误利用搜索工具解决,我这里列出我遇到的问题以及解决方案

报错 1

cd gui && \
make  libgui.a
make[1]: Entering directory '/home/book/bochsken/bochs-2.6.2/gui'
g++ -c  -I.. -I./.. -I../iodev -I./../iodev -I../instrument/stubs -I./../instrument/stubs -g -O2 -D_FILE_OFFSET_BITS=64 -D_LARGE_FILES     gtk_enh_dbg_osdep.cc -o gtk_enh_dbg_osdep.o
gtk_enh_dbg_osdep.cc:20:10: fatal error: gtk/gtk.h: No such file or directory
 #include 
          ^~~~~~~~~~~
compilation terminated.
Makefile:104: recipe for target 'gtk_enh_dbg_osdep.o' failed
make[1]: *** [gtk_enh_dbg_osdep.o] Error 1
make[1]: Leaving directory '/home/book/bochsken/bochs-2.6.2/gui'
Makefile:323: recipe for target 'gui/libgui.a' failed
make: *** [gui/libgui.a] Error 2

解决方法

sudo apt-get install xorg-dev

# 这里如果出现:E: Unmet dependencies. Try 'apt --fix-broken install' with no packages (or specify a solution).

报错 2

根据问题提示信息,是由于所依赖的包 linux-image-4.10.0-35-generic 并没有被正确安装导致。linux-image-x.x.x 是内核文件,从提示信息上看,应该是升级过程中断导致的问题。查看内核当前版本信息发现当前运行的版本为 4.18.0-15-generic。确实与提示的内核信息不一致,确认了问题所在。

book@100ask:~/bochsken$ uname -r
4.18.0-15-generic

解决方案

根据提示信息,运行 apt-get -f install 来修复问题

接下来我们执行修复命令,并重新执行更新和升级,确保完整修复问题。

sudo apt-get install libgtk2.0-dev
sudo apt --fix-broken install
sudo apt-get update
sudo apt-get upgrade


sudo make dist-clean   一定要清除干净

报错 3

通过上面一系列修复后执行 make 又有新的问题,解决方案可 参考

/usr/bin/ld: gui/libgui.a(gtk_enh_dbg_osdep.o): undefined reference to symbol 'pthread_create@@GLIBC_2.2.5'
/usr/bin/ld: /lib/x86_64-linux-gnu/libpthread.so.0: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
make: *** [Makefile:179: bochs] Error 1

打开 Makefile,在92行左右找到 LIBS = 。。。一行,在这一行最后面添加 -lpthread

 LIBS =  -lm 。。。-lpthread

#修改完后如下:
92 LIBS =  -lm -lgtk-x11-2.0 -lgdk-x11-2.0 -lpangocairo-1.0 -latk-1.0 -lcairo -lgdk_pixbuf-2.0 -lgio-2.0 -lpangoft2-1.0 -lpango-1.0 -lgobject-2.0 -lglib-2.0     -lfontconfig -lfreetype -lpthread
  • 重新 make

  • make 结束且未报错后,执行 sudo make install

如果把库都补齐了,这步基本顺利通过

安装成功的标志:生成了 bin 文件夹 (在自己定义的安装目录下 /home/book/bochsken)

配置 bochs

  • 进入 bochs 目录, 新建 boot.disk 文件,并将下面配置复制粘贴进去,注意将相应目录改成自己设置的目录

注意书上的这部分代码是有误的。

# 设置 Bochs 在运行过程中能够使用的内存,本例为 32MB
megs: 32

# 设置对应真实机器的 BIOS 和 VGA BIOS
romimage: file=/home/book/bochsken/share/bochs/BIOS-bochs-latest
vgaromimage: file=/home/book/bochsken/share/bochs/VGABIOS-lgpl-latest

# 设置 Bochs 使用的磁盘
# floppya: 1_44=a.img, status=inserted

# 选择启动盘符
# boot: flopy # 默认从软盘启动
boot: disk # 从硬盘启动,我们的任何代码都将直接写在硬盘上,所以不会再有读写软盘的操作。

# 设置日志文件输出
log: bochs.out

# 关闭鼠标,打开键盘,按照书上写会报错
mouse: enabled=0
#keyboard: enabled=1,
keyboard: keymap=/home/book/bochsken/share/bochs/keymaps/x11-pc-us.map


# 硬盘设置
ata0: enabled=1, ioaddr1=0x1f0, ioaddr2=0x3f0, irq=14

# 增加 Bochs 对 GDB 的支持,GDB 远程连接到此机器的 1234 端口便可调试
# gdbstub: enabled=1, port=1234, test_base=0, data_base=0, bss_base=0
  • 接下来就可以运行 bochs 了
book@100ask:~/bochsken$ ./bin/bochs -f  boot.disk

注意本文使用的配置文件名是 boot.disk,下图是之前学习时截图的,所以看到是 bochsrc.disk

实现一个操作系统系列1-《操作系统真象还原》环境搭建_第1张图片

  • 看到数字 [6] 就直接回车,再输入 c 回车

实现一个操作系统系列1-《操作系统真象还原》环境搭建_第2张图片

到目前为止环境已经基本搭建完成了,接下来可以感受操作系统的乐趣啦!!!建议自己亲自手动操作一遍, 这样可以锻炼自己的解决问题能力。

参考《操作系统真象还原》


更多读书笔记WX搜索: 零K同学

你可能感兴趣的:(linux,程序人生,c语言,tcp/ip)