本文例子中涉及兩個模塊hello.ko和world.ko,其中hello導出符號供world使用;shell
該命令將模塊的代碼和數據裝入內核,而後使用內核的符號表繼續模塊中任何未解析的符號。insmod不會修改模塊的磁盤文件,而僅僅修改內存中的副本。insmod能夠接受一些命令行選項,而且能夠再模塊連接到內核以前給模塊中的整數和字符串變量賦值。ui
按照順序加載,經過;spa
1 [root@localhost export]# insmod hello.ko 2 [root@localhost export]# insmod world.ko
先加載world.ko,不經過,由於world找不到從a中引用的符號;命令行
1 [root@localhost export]# insmod world.ko 2 insmod: ERROR: could not insert module world.ko: Unknown symbol in module
與insmod類型,modprobe也用來將模塊裝入內核,區別在於,modprobe會考慮要加載的模塊是否引用了一些當前內核中不存在的符號,若是有這類引用,modprobe會在當前模塊搜索路徑中查找定義了這些符號的其餘模塊,若是找到了這些依賴模塊,它會同時將這些模塊也裝載到內核。這種狀況下使用insmod會失敗,並在系統日誌文件中記錄」unresolved symbols」消息;日誌
在使用modprobe時,在配置文件中加入 modules_install行和clean行;code
1 ifneq ($(KERNELRELEASE),) 2 obj-m :=hello.o world.o 3 # module-objs := file1.o file2.o 4 else 5 KERNELDIR ?=/lib/modules/$(shell uname -r)/build 6 PWD :=$(shell pwd) 7 default: 8 $(MAKE) -C $(KERNELDIR) M=$(PWD) modules 9 $(MAKE) -C $(KERNELDIR) M=$(PWD) modules_install 10 clean: 11 rm -rf *.o *.mod.c *.ko *.symvers *.order *.makers 12 $(MAKE) -C $(KERNELDIR) M=$(PWD) clean 13 endif
加載模塊world,成功;blog
1 [root@localhost export]# modprobe world
lsmod查看,可見依賴的模塊hello也被加載進內核;內存
1 [root@localhost export]# lsmod 2 Module Size Used by 3 world 16384 0 4 hello 16384 1 world
rmmod用於從內核中移除模塊;若是內核模塊仍然在使用狀態,或者內核被配置爲禁止移除模塊,則沒法移除該模塊;配置內核並支持在模塊忙的時候仍能移除模塊是可能的;可是,從新引導系統是更合適的辦法;字符串
先移除world.ko,再移除hello.ko,成功;class
[root@localhost export]# rmmod world.ko [root@localhost export]# rmmod hello.ko
先移除模塊hello.ko,產生錯誤,由於hello在被world使用;
1 [root@localhost export]# rmmod hello.ko 2 rmmod: ERROR: Module hello is in use by: world
lsmod用於列出當前裝載到內核中的全部模塊,包括一些其餘信息,其經過讀取/proc/modules來獲取這些信息;
1 [root@localhost export]# lsmod 2 Module Size Used by 3 world 16384 0 4 hello 16384 1 world