2009年1月13日 星期二

核心模組與相依性

既然要處理核心模組,自然就得要瞭解瞭解我們核心提供的模組之間的相關性啦! 基本上,核心的放置處是在 /lib/modules/`uname -r`/kernel 當中,裡面主要還分成幾個目錄:
arch :與硬體平台有關的項目,例如 CPU 的等級等等;
crypto :核心所支援的加密的技術,例如 md5 或者是 des 等等;
drivers :一些硬體的驅動程式,例如顯示卡、網路卡、PCI 相關硬體等等;
fs :核心所支援的 filesystems ,例如 vfat, reiserfs, nfs 等等;
lib :一些函式庫;
net :與網路有關的各項協定資料,還有防火牆模組 (net/ipv4/netfilter/*) 等等;
sound :與音效有關的各項模組;
如果要我們一個一個的去檢查這些模組的主要資訊,然後定義出他們的相依性, 我們可能會瘋掉吧!所以說,我們的 Linux 當然會提供一些模組相依性的解決方案囉~ 對啦!那就是檢查 /lib/modules/`uname -r`/modules.dep 這個檔案啦!他記錄了在核心支援的模組的各項相依性。

那麼這個檔案如何建立呢?挺簡單!利用 depmod 這個指令就可以達到建立該檔案的需求了!
[root@linux ~]# depmod [-Ane]
參數:
-A :不加任何參數時, depmod 會主動的去分析目前核心的模組,並且重新寫入
/lib/modules/`uname -r`/modules.dep 當中。若加入 -A 參數時,則 depmod
會去搜尋比 modules.dep 還要新的模組,如果真找到新模組,才會更新。
-n :不寫入 modules.dep ,而是將結果輸出到螢幕上(standard out);
-e :顯示出目前已載入的不可執行的模組名稱
範例:


範例一:若我已經做好一個網路卡驅動程式,假設檔名為 a.ko,該如何更新核心相依性?
[root@linux ~]# cp /full/path/a.ko /lib/modules/`uname -r`/kernel/drivers/net
[root@linux ~]# depmod
難就難在將那個新的驅動程式模組編譯出來,如果編譯出來之後, 依據核心模組放置的目錄去放置好,然後輸入 depmod 後,去更新好 modules.dep , 如此一來,核心就能夠認識該模組囉!夠簡單吧! ^_^ (關於核心模組的編譯,請參考 核心編譯 一文!)