Linux驱动学习笔记4:带参数的模块

Linux的模块在装载到内核时还可以带有参数,按照《Linux设备驱动程序》一书上的说明,在运行的自行编译的Linux内核上进行了操作,把上一次编写的hello模块进行了简单的修改。

Linux内核:2.6.32.35

Linux发行版:CentOS 6.4

gedit hello.c

makefile文件和上一篇文章中的一样即可,不需要改动,然后编译模块

make

装载模块时带上参数

Insmod howmany=10 whom=”Welcome to www.ydea.net

咦,怎么提示:insmod: error inserting ‘hello.ko’: -1 Unknown symbol in module

改变参数whom的字符串值,重新装载模块

Insmod howmany=10 whom=”Welcome_to_ www.ydea.net

怎么这次顺利装载,没有报错呢?原来whom这个变量的值里面不能由空格。

查看模块输出结果

dmesg

结果如下:

此外,还可以用modprobe加载模块,但是在当前目录下直接使用时,会提示找不到文件:modprobe XXX not found

modprobe 和 depmod 的使用

modprobe和insmod类似,是用来动态加载模块的

但区别在于,使用insmod必须再模块所在文件下加载模块,而modprobe则会根据/lib/modules/(shell   uname -r ) 下的modules.dep.bb文件,来加载用户指定的模块文件。

modules.dep.bb这个文件很重要,它是用depmod来产生的,modprobe必须解析这个modules.dep.bb中建立的各模块之间的依赖关系,比如有a b c 三个模块文件,b和c依赖于a,如果此时用户要加载b模块,那么modprobe会根据modules.dep.bb之中a b c之间的相互依赖的关系,在加载b之前,先完成a的加载。

所以需要先把当前目录下的hello.ko复制到/lib/modules/(shell   uname -r )/kernel目录下

cp ./hello.ko  /lib/modules/’uname -r’/kernel

然后执行depmod命令

depmod /lib/modules/’uname -r’/kernel/hello.ko

此时才能执行modprobe命令

modprobe hello howmany=9 whom=”m m”

查看输出结果

dmesg

结果如下

QQ截图20150329164355

发现此时,whom变量是可以带空格的。

Leave a Reply

*