1.1 引言
什么是操作系统呢?
有些读者可能会像曾经的笔者一样,认为操作系统是"一种图形界面";在学习了Linux操作系统后,认为操作系统也可以是"一种命令行"。而不同种类,不同版本的操作系统,则是"不同的图形界面",或是"不同的命令行语法"。
那么,以Linux操作系统为例,读者是否想过这些问题呢?
- 为什么输入
ls
命令,屏幕上就显示了文件列表? - 什么是"文件"?
- 为什么在键盘上按一下
l
键,屏幕上就会显示一个字母l
,而不是别的字母,或者没反应?s
键也是一样 - 计算机怎么知道键盘被按下了?又怎么知道按的是什么键?
- 怎么在屏幕上显示一个字符?
这一系列越来越底层的问题乍一看都问的莫名其妙,尤其是最后一个:学过C语言的读者都知道,用C语言的printf
函数,不就行了吗?
那么,printf
函数又是怎么实现的呢?
看来,事情并没有这么简单。这些看似莫名其妙的问题,都指向了一个词:操作系统。
上述所有问题的答案,都可以用一句比较笼统的话来回答:由操作系统对这些功能提供支持。而其中原理,正是本系列要向读者讲述的。
欢迎来到操作系统的实现之旅!
1.2 准备工作
想要实现一个操作系统,需要进行一些准备工作。
首先是一台安装有Linux操作系统的物理机或虚拟机,且带有GCC编译器。
然后,需要下载并安装汇编编译器nasm,其官网为https://nasm.us/
。使用./configure --prefix=... && make -jN && make install
命令即可完成安装。
然后,需要安装bochs虚拟机,其官网为https://bochs.sourceforge.io/
。bochs拥有强大的硬件模拟及调试功能,其用于运行我们的操作系统。
bochs的安装比较复杂,首先,需要使用普通的./configure --prefix=... && make -jN && make install
命令将其编译一次,此时得到的bochs程序是用于运行的版本,此外,还会得到一个名为bximage
的程序,其用于创建虚拟硬盘。然后,需要使用./configure --prefix=xxx --enable-debugger --enable-debugger-gui && make -jN && make install
再编译一次(注意两次编译的--prefix
应不同,否则就覆盖了),这一次,得到的是bochs的调试器版本,当操作系统出现问题时,就依靠它了。由于这两个版本的bochs名字一样,所以,读者应将第二个bochs更名,笔者使用的名称是bochsdbg
。
然后,需要构建虚拟硬盘。运行bximage
命令,然后输入1
,回车;接下来一直回车,直至命令结束。此时,当前目录下出现了名为c.img
的文件,其大小接近10M,这个文件就是创建好的虚拟硬盘了。
接下来,需要为两个版本的bochs分别构造一个配置文件。第一个配置文件需要放在~/.bochsrc
处,其内容为:
romimage: file=$BXSHARE/BIOS-bochs-latest, options=fastboot
vgaromimage: file=$BXSHARE/VGABIOS-lgpl-latest
boot: disk
ata0-master: type=disk, path="c.img", mode=flat
megs: 32
此配置文件中,第4行设定的是虚拟硬盘信息;第5行设定的是内存容量,单位是M;其他配置无需关注。
第二个配置文件需要放在~/.bochsdbgrc
处,其内容较上一个文件多了最后一行:
romimage: file=$BXSHARE/BIOS-bochs-latest, options=fastboot
vgaromimage: file=$BXSHARE/VGABIOS-lgpl-latest
boot: disk
ata0-master: type=disk, path="c.img", mode=flat
megs: 32
display_library: x, options="gui_debug"
第6行用于启动bochs调试器的GUI。
最后,需要在~/.bashrc
中将两个版本的bochs与其配置文件分别对应起来:
alias bochs="bochs -q"
alias bochsdbg="bochsdbg -q -f ~/.bochsdbgrc"
至此,所有的准备工作就都完成了。
如果现在运行bochs
命令,bochs会显示:"No bootable device"(没有可引导的设备),这是正常的,因为现在什么都还没有实现。在下一章中,我们将正式开始实现操作系统。
本系列源码可从https://github.com/yingyulou/Published-Articles/tree/master/code/os获得。
标签:&&,操作系统,配置文件,实现,make,--,bochs,设计 From: https://www.cnblogs.com/yingyulou/p/17825509.html