程序锅

  • 首页
  • 分类
  • 标签
  • 归档
  • 关于

  • 搜索
基础知识 Etcd LeetCode 计算机体系结构 Kubernetes Containerd Docker 容器 云原生 Serverless 项目开发维护 ELF 深入理解程序 Tmux Vim Linux Kernel Linux numpy matplotlib 机器学习 MQTT 网络基础 Thrift RPC OS 操作系统 Clang 研途 数据结构和算法 Java 编程语言 Golang Python 个人网站搭建 Nginx 计算机通用技术 Git

MIT 6.828 课程 | 0-环境的搭建

发表于 2019-11-25 | 分类于 MIT6.828 | 0 | 阅读次数 3956

在整个课程开始之前,我们首先需要搭建相应的环境,比如安装所需要的编译工具链、qemu软件等。

0. 前言

此次搭建是在Ubuntu 16.04 x64上进行的。

$ uname -a
Linux share-virtual-machine 4.15.0-54-generic #58~16.04.1-Ubuntu SMP Mon Jun 24 13:21:41 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux

1. 安装编译器工具链

执行以下命令,安装编译器工具链所需要的东西

$ sudo apt-get install build-essential gdb gcc-multilib

执行这条命令之前,最好先执行一下sudo apt-get update。

另外上述有些包你已经安装,但还是建议执行上述的安装命令,上述命令是把接下去所需要的包都给安装了。

安装完之后,执行objdump -i,会在第二行看到elf32-i386

执行gcc -m32 -print-libgcc-file-name,将会看到 /usr/lib/gcc/x86_64-linux-gnu/version/32/libgcc.a或者 /usr/lib/gcc/i486-linux-gnu/version/libgcc.a

2. 安装qemu

MIT 6.828课程采用软件模拟的方式来调试运行整个内核,也就是说让JOS内核或者xv6内核运行在一个用软件仿真出来的x86计算机上。这个软件叫做qemu,然而对于原生的qemu的debug功能来说存在一些不存之处,同时在后面的几个Lab中会比较依赖于debug功能,所以需要使用MIT修改版的(加强了debug功能),执行以下命令clone相应的git repository,到qemu目录

git clone https://github.com/mit-pdos/6.828-qemu.git qemu

也可以使用下面这个git repository,是某位大牛fork之后的

git clone https://github.com/gou4shi1/qemu

qemu下载完成之后对于Linux系统来说,还需要安装几个libraries

sudo apt-get install libsdl1.2-dev libtool-bin libglib2.0-dev libz-dev libpixman-1-dev

上述步骤都完成之后配置相应的源代码、编译源代码、安装等,如下

$ cd qemu
$ ./configure --disable-kvm --target-list="i386-softmmu x86_64-softmmu"
$ make
$ sudo make install

3. 进行测试

环境搭建好了之后,就可以用它来运行我们的内核了,我们clone相应的内核代码进行测试,这边我们使用后面Lab系列中将会用到的JOS 内核源码。

git clone https://pdos.csail.mit.edu/6.828/2018/jos.git

clone完成之后,进入jos目录,该目录下存放的就是内核相关的代码了,下面使用make命令编译内核源码,生成相应的内核映像文件。make编译的过程如下所示

root@dawn:~/MIT6.828/lab# 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
ld: warning: section `.bss' type changed to PROGBITS
+ as boot/boot.S
+ cc -Os boot/main.c
+ ld boot/boot
boot block is 390 bytes (max 510)
+ mk obj/kern/kernel.img

通过最后的输出信息+ mk obj/kern/kernel.img,我们可以看到编译生成了kernel.img,这个就是内核映像文件。另外obj目录也是make生成的。编译完成之后,在当前目录下输入make qemu或者make qemu-nox,即可让qemu加载我们的操作系统内核映像文件了。如下图所示,如果输出以下信息,则代表运行成功了。

root@dawn:~/MIT6.828/lab# make qemu-nox
***
*** Use Ctrl-a x to exit qemu
***
qemu-system-i386 -nographic -drive file=obj/kern/kernel.img,index=0,media=disk,format=raw -serial mon:stdio -gdb tcp::25000 -D qemu.log
6828 decimal is XXX octal!
entering test_backtrace 5
entering test_backtrace 4
entering test_backtrace 3
entering test_backtrace 2
entering test_backtrace 1
entering test_backtrace 0
leaving test_backtrace 0
leaving test_backtrace 1
leaving test_backtrace 2
leaving test_backtrace 3
leaving test_backtrace 4
leaving test_backtrace 5
Welcome to the JOS kernel monitor!
Type 'help' for a list of commands.
K>

make qemu-nox跟make qemu相比,前者不会有图形界面,而后者会有,运行make qemu的效果如下所示

本文参考及推荐

  1. 官方提供的安装文档
  2. MIT 6.828 JOS学习笔记1. Lab 1 Part 1: PC Bootstrap
  3. 强撸MIT之6.828
卷死我
dawnguo 微信支付

微信支付

dawnguo 支付宝

支付宝

  • 本文作者: dawnguo
  • 本文链接: /archives/66
  • 版权声明: 本博客所有文章除特别声明外,均采用CC BY-NC-SA 3.0 许可协议。转载请注明出处!
# 操作系统 # OS
RPC | RPC 概念及 Thrift 简介
深入理解程序 | 静态链接的过程
  • 文章目录
  • 站点概览
dawnguo

dawnguo

215 日志
24 分类
37 标签
RSS
Creative Commons
© 2018 — 2025 程序锅
0%