linux : kernel modules 簡介

Linux modules

基本上linux modules在編譯時候可以分為builtin modules與external modules.

builtin module:

在make mennuconfig把要builtin的module設置為y.
編譯的時候就會在對應目錄產生built-in.o的檔案.
這些檔案便會被包入在image裡面.

external module:

在make mennuconfig把要builtin的module設置為m.
編譯的時候就會在對應目錄產生kernel/time/test_udelay.ko的檔案.
這些檔案便會被放置在/lib/modules/$(uname -r)

Modules 操作指令

顯示已安裝模組列表

root@yijyun-server:~# lsmod  | head
Module                  Size  Used by
usbhid                 49152  0
usb_storage            69632  0
crct10dif_pclmul       16384  0
ppdev                  20480  0

單一模組安裝&移除

藉由insmod與rmmod去針對單一模組進行安裝與移除
insmod [filename] [module options...]
insmod /lib/modules/4.4.0-64-generic/kernel/drivers/hid/usbhid/usbhid.ko
rmmod [modulename]
rmmod usbhid

相依性的模組安裝&移除

藉由modprode去針對此模組進行安裝與移除. 安裝與刪除中會去移除相依性的模組
modprobe [modulename] [module parameters...]
root@yijyun-server:~# modprobe  cfg80211
modprobe -r [modulename...] 
root@yijyun-server:~# modprobe  -r cfg80211

modules相關資訊

module是否為builtin

透過module.builtin可以判斷builtin module有哪些. 即表示包在image裡面的module. cat /lib/modules/$(uname -r)/modules.builtin
root@yijyun-server:~# cat /lib/modules/$(uname -r)/modules.builtin | head
kernel/arch/x86/crypto/crc32c-intel.ko
kernel/arch/x86/platform/intel/iosf_mbi.ko
kernel/mm/zpool.ko
kernel/mm/zbud.ko
...

檢查module的symbol(API name)

/proc/kallsyms存在module的symbole(API name),
藉此判斷所安裝的module是否有提供以及安裝到正確的module
root@yijyun-server:~# cat /proc/kallsyms  | grep usb | grep stor
ffffffff81614ac0 t usb_dev_restore
ffffffff81626060 T usb_store_new_id
ffffffffc04a8000 t host_info [usb_storage]
ffffffffc04a8020 t write_info [usb_storage]
ffffffffc04a8af0 t queuecommand [usb_storage]

留言

這個網誌中的熱門文章

yocto recipe : (1) 撰寫 recipe

yocto recipe : (2) 撰寫 bbappend

yocto recipe : (3) 使用 External Source 來編譯軟體