MIT 6.828 在网上一直有很高的地位,但是由于上手难度太难,而且是MIT研究生的课程,让大家都望而却步. 但是如果想要深入透彻的了解计算机系统的架构和设计,这门课又是有很大帮助. 作为一个计算机学生,一个热爱学习,热爱技术的学生,我还是决定要去试试水.
后面将会慢慢讲解我遇到的所有问题和解决办法。如果有任何错误或者建议都可以和我交流。这里贴下我的邮箱 [email protected] (90后哦 haha)
本机环境
虚拟机VMware Fusion Ubuntu 16.04.4
参考资料
MIT 6.282 lab1
本人GItHub地址
课程描述
MIT 6.828 fall2017
本篇博客主要讲解本人在环境配置遇到的问题的解决的方法.(初学MIT 6.828课程,如果有错误欢迎指出)
首先 Software Setup
You must use an x86 Athena machine; that is, uname -a should mention i386 GNU/Linux or i686 GNU/Linux or x86_64 GNU/Linux. You can log into a public Athena host with ssh -X athena.dialup.mit.edu.
首先使用的系统要符合要求,基本上Linux发行版本就好了,在虚拟机下运行不会有太大问题,不放心的话可以使用命令uname - a查看是否符合要求.
之后输入以下命令是讲JOS系统的源码clone到本地
athena% mkdir ~/6.828
athena% cd ~/6.828
athena% add git
athena% git clone https://pdos.csail.mit.edu/6.828/2017/jos.git lab
Cloning into lab...
athena% cd lab
athena%
这个 athena是一个公共服务器,如果我们有自己的虚拟机就可以不用理会这个,直接在自己本地运行就好了.(羡慕MIT学生可以直接用自己学生ID登录)
同时对Git不是很了解的同学,本课程还贴心的给出了Git指导
这里就不讲评分系统了,因为学习这个课程也只是想了解计算机系统。也许以后如果在MIT考研的话,我会讨论的. 不过感兴趣的同学可以自己在网页上看一下.
Part 1: PC Bootstrap
接下来就是第一步,如何把这个系统在自己的机子上启动起来。当然这里我们还需要用到一个软件叫做QEMU,具体官方的网址在这里.这是一个模拟x86的软件,可以让JOS运行在此模拟器中。
在这之前我们先把之前clone下来的JOS系统源码make一下。
athena% cd lab
athena% make
正常是要输出如下内容
+ as kern/entry.S
+ cc kern/entrypgdir.c
+ cc kern/init.c
+ cc kern/console.c
+ cc kern/monitor.c
+ cc kern/printf.c
+ cc kern/kdebug.c
+ cc lib/printfmt.c
+ cc lib/readline.c
+ cc lib/string.c
+ ld obj/kern/kernel
+ as boot/boot.S
+ cc -Os boot/main.c
+ ld boot/boot
boot block is 380 bytes (max 510)
+ mk obj/kern/kernel.img
如果提示undefined reference to `__udivdi3’ 就说明你没有32位的GCC multilib 下载一个对应GCC版本的multilib就可以解决的。记住要对应版本的。
之后就该安装QEMU模拟x86机器了,这里要注意MIT为了本次课程专门设计了自己的patch版本的QEMU,所以我们要源码安装MIT推荐的版本。所以才会有后面的各种坑。(为什么凌晨3点房间灯还是亮着…都是泪)
根据这个图我们可以看到在安装前需要的一些包,全部安装之后就可以开始继续后面步骤.
git clone http://web.mit.edu/ccutler/www/qemu.git -b 6.828-2.3.0
./configure –disable-kvm [–prefix=PFX] [–target-list=”i386-softmmu x86_64-softmmu”]
根据官网提示我们运行以下命令,注意这里我是Linux版本,如果是mac os版本请查看官网的mac版本命令。
现在到了最重要(最多坑)的时刻了
sudo make & make install
这个问题我查了很多,最后在这里看到有人说,可能是因为GCC 7对于printf更加严格,因为本人能力有限所以就直接把GCC降级到6了(曲线救国 hahha).最后成功编译。
在后面到sudo make install 的时候,新的问题出现了
这个问题看起来很简单,但是我在Makefile中改了无数的参数结果只是出现更多的错误。
直到有天我忽然发现Makefile中我忽略了一句话。
#Put the all: rule here so that config-host.mak can contain dependencies.
看到这个我就立马找到这个config-host.mak文件。
第一行的prefix=PFX改为绝对路径
然后怀着忐忑的心情,又运行了一遍sudo make install.
看到屏幕代码一行行划过,完美没有错误,瞬间满足感真的太兴奋. 当时时间已经是凌晨1点了。(这应该是每个程序员最开心的时候,看着自己的成果完美的运行。)
这里也学到了一课,就是不好好看注释的代价!!! 以后一定要好好看注释,我足足花了一个礼拜都没成功。
还有一些学习6.828需要的一些技术Prerequisite。
一些相关的资源
这些学习资料全部都可以在MIT 6.828官网找到,希望大家可以仔细阅读。
后续的课程我也会继续学习,也会继续总结在本课程遇到的问题的心得。
另外大家如果有什么问题或者我哪里写的有问题也欢迎指出来。本人邮箱: [email protected] (聊天也可以哦 :) )