Chinaunix首页 | 论坛 | 博客
  • 博客访问: 316890
  • 博文数量: 101
  • 博客积分: 2428
  • 博客等级: 大尉
  • 技术积分: 1050
  • 用 户 组: 普通用户
  • 注册时间: 2010-10-24 13:16
文章分类

全部博文(101)

文章存档

2012年(3)

2011年(90)

2010年(8)

分类: LINUX

2011-04-25 21:39:04

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
 
阅读(680) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~