MIT6.828/6.S081 - 2019:MacOS下搭建xv6和risc-v環境

本文介紹搭建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

原文鏈接:https://zhayujie.com/mit6828-env.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章