linux之模組載入
阿新 • • 發佈:2022-04-17
Linux有許多功能是通過模組的方式,在需要時才載入kernel。如此可使kernel較為精簡,進而提高效率,以及保有較大的彈性。這類可載入的模組,通常是裝置驅動程式。
語法
insmod [-fkmpsvxX][-o <模組名稱>][模組檔案][符號名稱 = 符號值]
引數說明:
- -f 不檢查目前kernel版本與模組編譯時的kernel版本是否一致,強制將模組載入。
- -k 將模組設定為自動卸除。
- -m 輸出模組的載入資訊。
- -o<模組名稱> 指定模組的名稱,可使用模組檔案的檔名。
- -p 測試模組是否能正確地載入kernel。
- -s 將所有資訊記錄在系統記錄檔案中。
- -v 執行時顯示詳細的資訊。
- -x 不要匯出模組的外部符號。
- -X 匯出模組所有的外部符號,此為預設定。
例如:
# insmod usb.o
rmmod usb.o
insmod是一個modutils模組實用程式,執行init_module函式
這個程式完成下面一系列工作:
1.計算存放模組程式碼、模組名和module物件所需要的記憶體大小。
2.在使用者空間中分配一個記憶體區,把module物件、模組名以及為正在執行的核心所重定位的模組程式碼拷貝到這個記憶體裡。其中,module物件中的init域指向這個模組的入口函式重新分配到的地址;exit域指向出口函式所重新分配的地址。
3.呼叫init_module(),向它傳遞上面所建立的使用者態的記憶體區的地址,
4. 接著宣告核心引用該模組;
5. 呼叫該模組的初始化涵數
6.釋放使用者態記憶體, 整個過程結束。