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.builtinroot@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]
留言
張貼留言