4.1内核模块的简介
模块机制保持内核的精简。可以动态的加载;
modprobe比insmod强大。。。。。。。。。。。以modpobe -r filename方式卸载模块。。。。。。。。。。。
4.2linux内核模块的程序结构
linux内核加载函数一般以__init标示来声明。
卸载函数以__exit标示。。。
他们都是宏。。。
4.5模块参数
用module_param(参数名,参数类型,参数读写权限)定义一个模块。。。。。
参数类型有:byte,short,ushort,int,uint,long,ulong,charp,bool,invbool;
module_param_array(数组名,数组类型,数组长度,读写权限);
4.6导出符号
EXPORT_SYMBOL(符号名);
EXPORT_SYMBOL_GPL(符号名);
4.8模块的使用计数
一般驱动开发不需要管的。。。。。。。。
int try_module_get(struct module *module);
void module_put(struct module *module);
4.9模块的编译
ifneq ($(KERNELRELEASE),)
obj-m :=xxx.o
xxx-objs:=file1.o file2.o
else
KDIR:= /lib/modules/2.6.32-21-generic/build
all:
make -C $(KDIR) M=$(PWD) modules
clean:
rm -f *.ko *.o *.mod.o *.mod.c .symvers
endif
4.10启动时装载模块
修改启动过程的rc脚本,增加insmod /.../xxx.ko 这样的命令。。。。。。。。。。。
例子:
insmod /usr/lib/company.ko > /dev/null
阅读(686) | 评论(0) | 转发(0) |