全部学习汇总: GreyZhang/g_unix: some basic learning about unix operating system. (github.com)
最近尝试看一下MIT的操作系统教程,找到了一个6.828的课程。看了一下网络上的介绍,看起来这个大家的认可度还是很高的。开动之前,先尝试一下搭建一下开发环境。我找到了一个可以参考的链接:6.828 / Fall 2018 (mit.edu)
接下来整理一下我自己的尝试过程。
objdump -i
gcc -m32 -print-libgcc-file-name
可以通过上面的命令做一下当前工具链的测试。至于后面的依赖库文件,我之前机器上就有安装,因此没有再次安装。
这里的库文件按照上面安装之后还是不完整的,可能与OS的版本有关。我用的是Ubuntu 20.04.5,测试的时候还少了一个libfdt-dev。
按照上面的说明,进行编译遇到了这样的报错。网络上搜了一下,这是一个比较普遍的问题。搜了一下,看到很多人遇到了这样的问题,解决方式是修改代码:
修改qga目录下的commands-posix.c文件,增加如下一行:
编译成功之后,sudo make install进行安装,这样qemu就编译安装成功了。
关于冲突的一点想法:从我看课程相关的网页,我看到了两部分信息。第一,从教程说明来看,其实MIT课程推荐安装的是一个32bit的Linux系统。如果是使用64bit的机器,那么需要安装一个支持的库。我自己安装成功之后,其实运行qemu环境的系统还是失败的,在加载启动的时候没有成功。感觉有可能是32bit与64bit的某些地方不兼容导致的。
我看了原始的网页,在ubuntu的16.04环境下至少是测试过的。而我查看发现这个版本的ubuntu的确是有32bit的,因此我直接安装了一个新的虚拟机。上面的环境搭建步骤相似,但是依然少了一个库的说明。如果在这样的环境下搭建,直接安装如下库:
sudo apt-get install libsdl1.2-dev libtool-bin libglib2.0-dev libz-dev libpixman-1-dev libfdt-dev
有一个值得去分析一下的是,编译qemu的时候我发现32bit系统下所消耗的时间要多很多,其实是因为多编译了很多文件。根本原因暂时可以先放放,毕竟这次我们的目标还是要分析一下OS的大概机制,至于其他的细节后续再说。
从可执行文件的数目来看,这个系统上编译的数目都要多很多。而编译的过程中,也没有进行文件修改的必要。
之后,修改makefile里面的这一样,之后可以进行编译lab例程进行测试。这里我采用lab1的例程进行测试。
这个是编译成功的效果。
执行make qemu可以通过qemu启动编译出来的JOS。
这是按照提示输入命令的效果。如果想在非GUI的模式下运行,那么执行make qemu-nox即可。
这样,这个课程的试验环境搭建以及测试就成功了。消耗的时间倒是比我预想中的多了一些,主要的原因还是中间的系统冲突没解决直接尝试了新的OS安装以及环境搭建。然而,也算是顺利,毕竟没有直接进行技术相关的分析,基本上都是网络搜索别人经验就可以轻松过关。