Linux module(Linux 模組)

JUAN425發表於2014-08-15

Linux作業系統的核心(kernel)是完全由C語言編寫而成。,符合POSIX標準,以GNU通用公共許可證釋出。

我們可以說Linux的kernel就是Linux, 可見kernel對於作業系統的重要性。


Linux module是什麼?

Linux module 就是能夠在執行的時候加入到Linux kernel, 並且可以從Linux kernel中去除的程式。 即 Binary code that is inserted and unloaded out of the static kernel image at run time。


Linux module 的好處(benefit)是什麼呢?

首先, 我們知道Linux kernel 本身是一個monolithic kernel(單核心)。 當我們的電腦is  booted(被引導), 這個static binary(靜態二進位制的)的 就開始執行。  Linux kernel具有很多的functionality, 但是為了使得我們的Linux作業系統更加的靈活(flexible), 動態(dynamic), 

當我們想要動態的向kernel中新增更多的functionalities, so that you donot have to recompile the entire kernel from scrach

and reboot。  所以Linux 作業系統引入了模組機制。  這樣, 當我們plug in a new device 的時候, you donnot have to rewrite the entire operating system from scrach。 Just add the new functionality to recognize your device。 我們所做的就是寫一個module, 當我們使用這個device的時候 , 我們只需要將我們寫的識別module插入到kernel中。 當我們不使用這個device的時候, uninstall the module from the kernel。



Linux module 是如何工作的?

當我們想要計算機加入一個新的device, 我們希望我們的kernel具有一個新的functionality 去和這個device 交流。 此時我們需要寫一個module, 從而處理這個加入的device。

kernel是唯一能夠和硬體交流的東西, 所以我們編譯(compile)我們的module, 然後將其加入到kernel中去。 加入module到kernel用到的指令是:

insmod.


使用指令insmod, 在module內部呼叫了函式init_modules, 於是將這個module插入到kernel中了(上圖未畫出新的的device(硬體))(上述kernel中的register——capability 表示module的完成的功能, 對該如何處理新的device的相關資訊)。

於是我們就可以通過kernel(利用編寫的module)想加入的新的device實現讀寫操作了。

當我們結束的時候, 我們可以使用指令rmmode 指令將這個module從kernel中刪除:







相關文章