轉載聲明:希望大家能夠從這里收獲知識之外,也能夠體會到博主撰寫博客的辛苦。個人博客勢單力薄,對於強轉甚至轉載博客訪問量高於原文的例子不在少數。
希望能夠得到大家關注的同時,也能夠稍微體諒一下博主的不易。
既然奔着seL4來的,那么對於宏內核與微內核的區別應該是很清楚的了,在此就簡單地介紹兩者的區別,本文主要用來完成seL4環境配置工作。
對於小白來說,自己獨自完成對seL4微內核的閱讀和理解真的很困難,目前跟着老師助教一起進行對seL4微內核的分析和理解。所以准備長期更新seL4學習的博客,希望大家多多支持,錯誤之處還請各位幫忙指出改正。
對於兩者的區別也就簡單提一下,相關的資料十分充足可以自行查找滿足自己的需求。
微內核:所有的服務器都相對獨立並且運行在各自的地址空間。通過進程間通信機制(IPC)實現進程之間的通訊,互換“服務”。服務器的獨立運行避免了一個服務器崩潰或及其他的服務器。
宏內核:也稱為單內核,將內核從整體上作為一個大過程實現,並且同時運行在一個單獨的地址空間。這也意味所有的內核服務之間可以直接調用函數,簡單高效。
下圖為宏內核與微內核架構圖:
seL4 官網:http://sel4.systems/
seL4 wiki:https://wiki.sel4.systems/
seL4 項目主頁:http://ts.data61.csiro.au/projects/seL4/
在安裝和運行seL4系統之前,需要在機器上安裝必要的安裝包。這里假設大家都安裝在Linux系統之上,並且下面的示例均為Ubuntu14.04版本(64-bit)或者可以安裝在Ubuntu16.04版本(64-bit),當然也可以嘗試其他的Unix系統(包括Mac OS)等。
下圖為進行第一個實驗的要求:
下面進行第一個seL4實驗:
下面為獲取代碼以及第一個實驗執行hello1的指令
首先先將需要的seL4程序從git上面clone下來,指令如下所示:
>git clone https://github.com/zpfbuaa/seL4.git
其中后面的程序地址可以是其他的只要是源碼就行了,上面是指提供一個方便大家的鏈接。
為了避免鏈接失敗,下面再多給些地址:
https://github.com/xcgxg/sel4-tutorials-manifest.git(和上述指令相同)
http://pan.baidu.com/s/1jIsdVTG (直接下載到Linux機器上就可以了)
http://pan.baidu.com/s/1kV2RkVH(直接下載就可以了)
該步目的在於完成對源碼的clone工作,為后期的源碼閱讀做准備。
假設大家都已經准備好了上述源碼的工作。
對於文件怎樣
下面需要對源碼進行一系列的配置操作。
https://github.com/SEL4PROJ/sel4-tutorials/blob/master/Prerequisites.md
可以參照上述的鏈接。不過出現的問題就是安裝的東西有點多,甚至有些不必要安裝,看到上述的指令不要想就知道很麻煩。
下圖為代碼下載解壓之后的文件,其中rebuild.sh文件可能不存在,只是自己寫的一個指令腳本,用來對代碼進行clean等操作。
下面為rebuild.sh文件的內容
下圖解釋每個指令的作用:
上述rebuild.sh文件的執行指令為:
> sh rebuild.sh
通過上述指令,可以重新build項目。
之后執行下述指令
產生錯誤信息如下所示:
原因是src/main.o以及src/util.o文件缺少,其中main.o以及util.o文件都是通過相對應的.c文件經過編譯得到的,也就是意味着main.c以及util.c文件出現了錯誤。所以下一步需要對src/main.c以及src/util.o文件經行必要的修改,來完成我們的第一個實驗hello1。
具體的文件路徑如下圖所示:
下面我們查看main.c文件,可以使用指令gedit main.c同樣也可以使用vim main.c
通過上述的提示,告訴我們需要添加一個main函數用來打印一條消息,因為我們的第一個實驗就是hello1嘛,所以就直接讓程序打印HelloWorld未嘗不可。
這樣經過上述的操作,我們就可以開心地運行我們的helloworld程序了。
首先還是先運行sh rebuild.sh,重建項目。
下圖為需要進行的實驗hello-1的運行指令:
運行該指令文件結果如下所示:
其中會在下面這個地方稍微等待一下:
接着程序進行編譯,編譯結果如下:
這樣我們就可以運行我們的hello1程序了,運行指令如下:
> qemu-system-i386 -nographic -m 512 -kernel images/kernel-ia32-pc99 -initrd images/hello-1-image-ia32-pc99
注意這里可能報錯,如果之前工作沒有錯誤的話,這里報的錯誤應該就是缺少程序包。由於已經安裝時錯誤截圖沒有保留,所以沒法給大家看具體的錯誤截圖了。
如果沒記錯的話,缺少的安裝包應該就是這個qemu-system-x86,如果不是這個的話,大家按照提示缺少的安裝包進行安裝即可。
> sudo apt-get install qemu-system-x86
修復上述問題之后,運行結果如下所示:
經過上述的操作,對於seL4的基本配置已經告一段落。
接下來就開始對seL4源碼的閱讀分析。