前情提要
因Linux Operating System課的project需要,人生第一次編Kernel就獻給他惹,所以怕忘就順手筆記一下。
環境
使用Ubuntu 16.04 LTS i386 Desktop 要編的Kernel是3.10版
過程
一開始當然要先裝好Linux環境(我是裝Ubuntu) 然後決定你要編的Kernel,並載下來解壓縮 (Kernel source可以到https://www.kernel.org 下載) 我這邊解壓縮出來後是linux-3.10.104/
|
|
進去之後,要新增一個system call 創一個資料夾用來放我們system call的code
|
|
新增一個檔案helloworld.c,就是我們system call的程式
|
|
|
|
再來新增Makefile,用來確保我們的程式會被編譯進Kernel
|
|
再來回上一層目錄,修改Makefile
|
|
這是為了告訴它,我們新的system call的source files在mycall資料夾裡
再來我們要新增我們的system call到system call table裡
|
|
再來修改system call header
|
|
接著編譯kernel前要裝一些套件
|
|
還有設定檔
|
|
最後就開始漫長的compile了!
|
|
編完之後,就安裝到我們系統上
|
|
裝好之後沒問題,就重開機,用我們新的kernel開機
但是grub選單,預設好像是關的
所以我們要先把它打開,再重開機
重開時記得選我們編的kernel
|
|
最後寫個小程式來檢驗是否成功新增system call
|
|
然後執行之後,用以下這指令看kernel有沒有輸出我們想要的訊息
|
|
如果有看到"kaibro ininder",就代表成功惹~
後記
其實一開始我是裝Fedora 但不知為何總是一直失敗 一開始是虛擬機空間開太小 後來好不容易重灌好,也編完,卻莫名無法開機 想說是編太新版的Kernel炸掉,結果重編個相同版本的Kernel還是一樣 (前前後後大概編了6次吧….) 之後就果斷改用Ubuntu…