您的位置:首页 > 运维架构 > Linux

驱动学习日记1--linux内核模块的简单笔记

2014-08-31 11:59 239 查看
lsmod 命令可以获得系统中加载了的所有模块以及模块间的依赖关系。

Linux内核模块主要由以下几个部分组成:

(1)模块加载函数(一般需要)

insmod 或 modprobe(这个命令更强大,会同时加载该模块所依赖的其他模块)

(2)模块卸载函数(一般需要)

rmmod 或 modprobe -r filename 这两个命令与上面对应相反。

(3)模块许可声明(必须)

GPL,Linux2.6内核模块最常见的以 MODULE_LICENSE("Dual BSD/GPL")
语句声明模块采用BSD/GPL双LICENSE。

(4)模块作者等其他声明(可选)

其他暂时忽略。。。

内核加载模块:

加载函数一般以__init标识声明,eg. static int __init initialization_function(void){.......}

module_init(initialization_function);将这个函数注册为加载函数。

内核卸载模块:

卸载函数一般以__exit标识声明,eg. stati void __exit cleanup_function(void){.......}

module_exit(cleanup_function);将这个函数注册为加载函数。

模块的编译 Makefile :

KVERS = $(shell uname -r)

#Kernel modules

obj-m +=hello.o

#Specify flag for the module complication.

#EXTRA_CFLAGS=-g -O0

build: kernel_modules

kernel_modules:

[Tab] make -C /lib/modules/$(KVERS)/build M=$(CURDIR) modules

[Tab] make -C /lib/modules/$(KVERS)/build M=$(CURDIR) clean

Makefile文件与源代码hello.o位于同一目录,开启其中的 EXTRA_CFLAGS=-g -O0 可以得到包括调试信息的hello.ko模块。运行make命令得到的模块可直接在PC机上运行。

如果包括多个.c文件,则修改:

obj-m :=modulename.o

modulename-objs : file1.o file2.o

得到我们编译的内核模块.ko文件放置在目标文件系统的相关目录中。可用insmod 加载 ,如果要修改加载的模块,只需要rmmod并insmod即可!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: