主講人: jserv / 課程討論區: 2019 年系統軟體課程
:mega: 返回「Linux 核心設計」課程進度表
fibdrv
模組4.15
的版本,例如 4.15.0-45-generic
。若在你的開發環境中,核心版本低於 4.15
的話,需要更新 Linux 核心,請自行參照相關文件linux-headers
套件 (注意寫法裡頭有 s
),以 Ubuntu Linux 18.04 LTS 為例:
linux-headers
套件已正確安裝於開發環境
預期得到以下輸出:
jserv
(或者你安裝 Ubuntu Linux 指定的登入帳號名稱)。由於測試過程需要用到 sudo,請一併查驗:
預期輸出是 root
sudo
Passed [-]
字樣fibdrv.ko
核心模組
預期可得以下輸出:
fibdrv.c
裡頭的 MODULE_LICENSE
, MODULE_AUTHOR
, MODULE_DESCRIPTION
, MODULE_VERSION
等巨集做了什麼事,可以讓核心知曉呢? insmod
這命令背後,對應 Linux 核心內部有什麼操作呢?請舉出相關 Linux 核心原始碼並解讀insmod
去載入一個核心模組時,為何 module_init
所設定的函式得以執行呢?Linux 核心做了什麼事呢?$ readelf -a fibdrv.ko
, 觀察裡頭的資訊和原始程式碼及 modinfo
的關聯,搭配上述提問,解釋像 fibdrv.ko
這樣的 ELF 執行檔案是如何「植入」到 Linux 核心fibdrv
名稱取自 Fibonacci driver 的簡稱,儘管在這裡顯然是為了展示和教學用途而存在,但針對若干關鍵的應用場景,特別去撰寫 Linux 核心模組,仍有其意義,請找出 Linux 核心的案例並解讀。提示: 可參閱 Random numbers from CPU execution time jitterfibdrv
如何透過 Linux Virtual File System 介面,讓計算出來的 Fibonacci 數列得以讓 userspace (使用者層級) 程式 (本例就是 client.c
程式) 得以存取呢?解釋原理,並撰寫或找出相似的 Linux 核心模組範例fibdrv.c
存在著 DEFINE_MUTEX
, mutex_trylock
, mutex_init
, mutex_unlock
, mutex_destroy
等字樣,什麼場景中會需要呢?撰寫多執行緒的 userspace 程式來測試,觀察 Linux 核心模組若沒用到 mutex,到底會發生什麼問題fibdrv
計算 Fibinacci 數列的執行效率,過程中需要量化執行時間,可在 Linux 核心模組和使用層級去測量
編輯 Homework2 作業區共筆,將你的觀察、上述要求的解說、應用場合探討,以及各式效能改善過程,善用 gnuplot 製圖,紀錄於新建立的共筆
Mar 19, 2019 (含) 中午之前
越早在 GitHub 上有動態、越早接受 code review,評分越高