1. 程式人生 > >5.2.2.最簡單的模塊源碼分析1

5.2.2.最簡單的模塊源碼分析1

eric drive ner 命令 安裝 分析 ima magic 源碼樹

本節主要講解模塊安裝和過程,及其和module_init宏的關聯,並且重點講解了模塊安裝時的安全性兼容性校驗問題。

5.2.2.1、常用的模塊操作命令
* lsmod(list module):打印當前內核中已經安裝的模塊

aston@ubuntu:~$ lsmodModule Size Used byvmhgfs 48609 1snd_ens1371 24547 2snd_ac97_codec 105709 1 snd_ens1371
* modinfo(module info):打印出內核模塊的自帶信息。modinfo xxx.ko

modinfo module_test.komodinfo module_test.kofilename: /root/winshare/driver/5.2.1/module_test.ko 帶全路徑的模塊名字license: GPLsrcversion: 9607C92CC3B26CACAF59BA3 不用管depends: vermagic: 3.13.0-32-generic SMP mod_unload modversions 686 (uboot)vermagic: 2.6.35.7 preempt mod_unload ARMv7 版本魔數(版本信息)校驗與內核是否相同模塊有版本信息,內核的zImage也有版本信息,兩者必須相同才能安裝
* insmod(install module):insmod xxx.ko

insmod module_test.koinsmod: ERROR: could not insert module module_test.ko: Invalid module format解決:Makefile打開#ubuntu的內核源碼樹,如果要編譯在ubuntu中安裝的模塊就打開這2個KERN_VER = $(shell uname -r)KERN_DIR = /lib/modules/$(KERN_VER)/build 重新編譯安裝後打印:lsmodModule Size Used bymodule_test 12394 0 (最前面)vmhgfs 48609 1>>dmesg[11804.303931] chrdev_init
* rmmod(remove module):卸載模塊(最好不要.ko)。rmmod xxx

rmmod module_test.ko>>dmesg[11804.303931] chrdev_init[12165.167548] chrdev_exit代碼中:module_init(chrdev_init);代碼insmod所做的事情:
* 調用module_init宏聲明的函數

module_init(chrdev_init); //聲明驅動(函數)入口,用module_init把chrdev_init這個函數與insmod綁定起來。module_exit(chrdev_exit); //聲明驅動(函數)出口,用module_init把chrdev_init這個函數與rmsmod綁定起來。

5.2.2.最簡單的模塊源碼分析1