本文介紹搭建Mit6.828/6.S081 fall2019實驗環境的詳細過程,包括riscv工具鏈、qemu和xv6,以MacOS下的實踐爲例,Linux系統同樣可以參考。
介紹
只有瞭解底層原理才能寫好上層應用,曾經幾度想要系統地學習OS課程,嘗試去看了《計算機操作系統》、《Operating Systems: Three Easy Pieces》、《UNIX環境高級編程》,均以半途而廢告終。被大量的抽象概念所淹沒,對操作系統如何工作,用戶程序如何運行,與CPU等硬件如何交互等問題完全沒有清晰的認識。所以這次選擇了以動手實踐爲主的課程,直接對內核源碼進行學習和擴展,一步步揭開OS的神祕面紗。
MIT6.828: Operating System Engineering 在2019版本更名爲6.S081,針對本科生教學,難度也有所下降,適合0基礎學習,所需的計算機知識和C語言語法也十分基礎。MIT用於教學的系統是xv6,一個簡化的類unix系統,CPU平臺使用的是RISC-V,是一種精指令集架構(RISC)。
課程的學習直接跟着官網的schedule走就行,先看Lecture下提供的講義和手冊,然後完成相應的Lab,Lab共計10個,主要內容是在xv6基礎上進行內核開發和擴展。
環境搭建
MacOS下需要事先準備好xcode和homebrew,我的系統版本是10.13.4,xcode版本是9.4。實驗環境主要包括三個部分:
- RISC-V工具鏈: 包括一系列交叉編譯的工具,用於把源碼編譯成機器碼,如gcc,binutils,glibc等
- QEMU模擬器: 用於在我們機器上(X86)模擬RISC-V架構的CPU
- xv6源碼: xv6操作系統源碼
一、RISC-V toolchain
risc-v工具鏈安裝是坑最多的一步,如果按照官網教程來安裝,大概率會因爲下載過慢而失敗,即使我把命令行翻了牆效果也並不好。教程中的安裝命令是brew install riscv-tools,但我發現riscv-tools由幾個部分組成,我們其實只需要riscv-gnu-toolchain,源碼下載方式如下:
git clone --recursive https://github.com/riscv/riscv-gnu-toolchain
riscv-gnu-toolchain源碼有3個G大小,直接clone耗時太久。所以我將源碼上傳到了baidu網盤,提取碼ui4j),供大家直接下載。
下載後在源碼根目錄進行編譯,具體參考官方文檔。編譯大約需要30min:
./configure --prefix=/usr/local/opt/riscv-gnu-toolchain #配置產物路徑
make #編譯
安裝完成後需配置環境變量,與上一步設置的安裝路徑一致。我這裏的環境配置文件是~/.bash_profile
,在最後一行添加:
export PATH="$PATH:/usr/local/opt/riscv-gnu-toolchain/bin"
此時在命令行輸入riscv64-unknown-elf-gcc -v
,如果能顯示版本信息則代表安裝成功。
二、QEMU
下載qemu模擬處理器,我們編譯生成的risc-v平臺的機器碼,需要通過模擬cpu執行。
1.一種方式是通過包管理工具直接安裝,mac下使用的是homebrew,如果速度較慢可切換tsinghua源。
brew install qemu
我的OS X版本(high sierra)對應的qemu版本是3.1.0,在啓動riscv-gdb遠程調試qemu時會報錯:Remote 'g' packet reply is too long (expected 264 bytes, got 520 bytes)
,而4.1.0版本的qemu則正常。不過暫時來看,該bug不會影響實驗的進行。
2.另一種方式是手動下載指定版本的源碼並編譯:
wget https://download.qemu.org/qemu-4.1.0.tar.xz #下載後解壓並進入目錄
./configure #默認安裝所有目標平臺,產物路徑爲/usr/local/bin
make && make install #編譯並安裝
如果wget從官網下載較慢可以選擇使用網盤(鏈接,提取碼 h7ud)。
三、xv6
從github下載xv6源碼
git clone git://github.com/mit-pdos/xv6-riscv-fall19.git
在項目目錄下編譯,如果能進入xv6的shell則表示實驗環境已搭建成功,進入後可輸入命令(如 ls)進行測試。輸入CTRL A + X
可以退出xv6 shell。
make
make qemu