MIT 6.828是操作系統中最經典的一門課程。完成所有的lab就相當於完成了一個迷你的操作系統。我跟的是2018年的課程,課程首頁在 "6.828課程官網" 。當然所有資料都是英文的,所以難度也不低,這裡推薦幾本非常有用的參考書:《x86彙編語言 從實模式到保護模式》,《程式員的自我修養 鏈接、裝 ...
MIT 6.828是操作系統中最經典的一門課程。完成所有的lab就相當於完成了一個迷你的操作系統。我跟的是2018年的課程,課程首頁在6.828課程官網。當然所有資料都是英文的,所以難度也不低,這裡推薦幾本非常有用的參考書:《x86彙編語言-從實模式到保護模式》,《程式員的自我修養-鏈接、裝載與庫》,《深入理解電腦系統》,很多知識在這些書中都有提到,參考著看會有奇效。
一段話概括
本文主要講解實驗前的環境搭建,主要分為兩個部分,一個是x86模擬器QEMU的安裝,另一個是編譯工具鏈。參考資料:官方文檔
實驗環境
我的機子裝的win10的系統,現在win10支持WSL,在windows上也能享受到原生linux一樣的體驗。我一般用Xshell登陸本地WSL,體驗很不錯。
前期準備
首先從官網clone實驗的框架代碼到本地:git clone https://pdos.csail.mit.edu/6.828/2018/jos.git lab
編譯工具鏈
編譯工具鏈是一個工具集包括c編譯器,彙編編譯器,連接器。在命令行下執行gcc -m32 -print-libgcc-file-name
,如果輸出/usr/lib/gcc/i486-linux-gnu/version/libgcc.a 或 /usr/lib/gcc/x86_64-linux-gnu/version/32/libgcc.a
就說明沒有問題了。否則執行sudo apt-get install -y build-essential gdb
進行安裝(Ubuntu系統下)。在64位的機器上還需要安裝32位支持庫sudo apt-get install gcc-multilib
否則後面make的時候可能會出現"__udivdi3 not found"的情況。
QEMU模擬器安裝
QEMU是一款模擬器,按照官方文檔的提示我們需要從源碼安裝針對課程定製過的QEMU。步驟如下:
- clone源碼:git clone https://github.com/mit-pdos/6.828-qemu.git qemu (或git clone http://web.mit.edu/ccutler/www/qemu.git -b 6.828-2.3.0)
- 執行
./configure --disable-kvm --target-list="i386-softmmu x86_64-softmmu"
。這一步可能會報錯:- 問題1:
- 出現:
ERROR: Python not found. Use --python=/path/to/python
- 解決:添加
--python=python3
,還是不行提示Note that Python 3 or later is not yet supported
。安裝python2.7,然後使用--python2.7
選項
- 出現:
- 問題2:
- 出現:
ERROR: pkg-config binary 'pkg-config' not found
- 解決:執行
apt-get install -y pkg-config
- 出現:
- 問題3:
- 出現:
ERROR: zlib check failed. Make sure to have the zlib libs and headers installed.
- 解決:執行
sudo apt-get install zlib1g-dev
- 出現:
- 問題4:
- 出現:
ERROR: glib-2.12 gthread-2.0 is required to compile QEMU
- 解決:
sudo apt-get install libglib2.0-dev
- 出現:
- 問題5:
- 出現:
ERROR: pixman >= 0.21.8 not present.
- 解決:
sudo apt-get install libpixman-1-dev
- 出現:
- 問題6:
- 出現:
vl.c: In function ‘main’: vl.c:2778:5: error: ‘g_mem_set_vtable’ is deprecated [-Werror=deprecated-declarations] g_mem_set_vtable(&mem_trace); ^ In file included from /usr/include/glib-2.0/glib/glist.h:32:0, from /usr/include/glib-2.0/glib/ghash.h:33, from /usr/include/glib-2.0/glib.h:50, from vl.c:59: /usr/include/glib-2.0/glib/gmem.h:357:7: note: declared here void g_mem_set_vtable (GMemVTable *vtable); ^ cc1: all warnings being treated as errors rules.mak:57: recipe for target 'vl.o' failed make: *** [vl.o] Error 1
- 解決:QEMU源碼根目錄下的Makefile文件最後加上一行 QEMU_CFLAGS+=-w
- 出現:
- 問題1:
- 執行
make && make install
。至此QEMU安裝完畢。
編譯執行
在lab源碼根目錄下執行make,如果看到
就說明編譯成功了。然後執行make qume,看到如下信息就說明環境搭建好了。