萨博橱柜:Linux USB驱动框架分析-Linux -华夏名网资讯中心 虚拟主机,域名注册,双线虚拟主机,服务器租赁,为7万用户提供服务

来源:百度文库 编辑:九乡新闻网 时间:2024/05/01 06:51:20
MODULE_DEVICE_TABLE (usb, skel_table);
    MODULE_DEVICE_TABLE的第一个参数是设备的类型,如果是USB设备,那自然是usb(如果是PCI设备,那将是pci,这两个子系统用同一个宏来注册所支持的设备。这涉及PCI设备的驱动了,在此先不深究)。后面一个参数是设备表,这个设备表的最后一个元素是空的,用于标识结束。代码定义了USB_SKEL_VENDOR_ID是0xfff0,USB_SKEL_PRODUCT_ID是0xfff0,也就是说,当有一个设备接到集线器时,usb子系统就会检查这个设备的vendor ID和product ID,如果他们的值是0xfff0时,那么子系统就会调用这个skeleton模块作为设备的驱动。

这些宏定义在

MODULE_AUTHOR(name)

定义驱动的编程者,name为string

MODULE_LICENSE(license)

定义驱动的license,一般为GPL,或相关公司的license

MODULE_DESCRIPTION(desc)

对驱动程序的描述,string

MODULE_SUPPORTED_DEVICE(name)

驱动程序所支持的设备,string

MODULE_PARM(var,type)

提供在运行时通过控制台将参数传递给模块 (在insmod时)
如果我们想用这个宏来传递命令行参数,那么在我们的模块中定义一个全局变量.在insmod模块时,便可以用参数的形式,将具体的实参传递给模块中的那个全局变量.
MODULE_PARM(name,type)有两个参数,一个是这个全局变量的名称,另一个是这个全局变量的类型.
而他的类型有一下几种:
b:比特型
h:短整型
i:整型
l:长整型
s:字符串型
在传递字符串型的参数时,这个全局变量需要在模块中用Char *来声明!insmod会自动为其分配内存空间.
例如:
int a = 3;
char *st;
MODULE_PARM(a,”i”);
MODULE_PARM(st,”s”);
在insmod是我们加这样的参数:
insmode a.o “a = 3″, “st = hello world”
这里最重要的是,MODULE_PARM()也支持我们最常用的数组类型.用短线’-'把两个数字分开,分别表示数组参数中的最小位数和最大位数.例如:
int array[8];
MODULE_PARM(array,”1-8i”);
在命令行我们使用加这样的参数:
insmod a.o “array = 38745,123,4000″

在那和模块编程时,我们往往给这些全局变量以默认值,如果我们才insmod时没有传入参数时,模块会使用这些默认值,而如果我们传入参数时,这些默认值便被覆盖掉.

MODULE_PARM_DESC(var,desc)

对变量的描述

GPL_HEADER()

THIS_MODULE

指向全局变量 __this_module (struct module)的指针

系统对每个模块维护一个usage counter,以便决定何时可以安全的卸载模块

下面的宏用来对该usage counter操作,usage counter可以通过/proc/modules

文件查看

MOD_INC_USE_COUNT

MOD_DEC_USE_COUNT

MOD_IN_USE

MODULE_DEVICE_TABLE

EXPORT_SYMTAB

预处理宏,当在程序中用EXPORT_SYMBOL等宏时需要定义该宏。例如,可以在Makefile中定义:-DEXPORT_SYMTAB

__EXPORT_SYMBOL(sym,str)

EXPORT_SYMBOL(var)

EXPORT_SYMBOL_NOVERS(var)

导出一个符合到内核符号表,导出后,该符合可以供其他模块使用。这个宏有助于编写驱动程序时清楚的划分出层次。可以通过/proc/ksyms文件或ksyms命令查看内核符号表。EXPORT_SYMBOL_NOVERS(var),导出是不带版本信息。在使用该宏时,需定义

EXPORT_SYMBOL_GPL(var)

EXPORT_NO_SYMBOLS

显示指出,该模块不向内核符合表导出符号

SET_MODULE_OWNER为了您的安全,请只打开来源可靠的网址

打开网站    取消


Linux USB驱动框架分析-Linux -华夏名网资讯中心 虚拟主机,域名注册,双线虚拟主机,服务器租赁,为7万用户提供服务 C++箴言:为类型信息使用特征类-C/C++-华夏名网资讯中心 虚拟主机,域名注册,双线虚... 黑客常用的远程控制命令-网络安全 -华夏名网资讯中心 虚拟主机,域名注册,双线虚拟主机,服... UNIX下ORACLE数据库的创建-PHP编程-华夏名网资讯中心 虚拟主机,域名注册,双线... 从信息技术的演变看业务和技术融合-行业资讯-华夏名网资讯中心 虚拟主机,域名注册,双线虚拟... Linux环境进程间通信(五): 共享内存(上)-Linux -华夏名网资讯中心 虚拟主机... 网络存储:SAN和NAS一起构建数字档案馆-存储备份-华夏名网资讯中心 虚拟主机,域名注册... Word文档转为PPT演示文档的两种方法-冲浪宝典-华夏名网资讯中心 虚拟主机,域名注册,... 为自己的asp网站系统构建一套标记语言_asp技巧-ASP编程-华夏名网资讯中心 虚拟主机... Ubuntu Linux Apache虚拟主机的安装配置 windows下使用xmanager登录linux远程桌面-Linux -华夏名网资讯中心... 中国十大域名注册商排行榜 中国域名注册商排名 中国十大域名注册虚拟主机服务商排行榜 ... Linux USB gadget设备驱动解析(3)-- 驱动结构分析—嵌入式学院(华清远见旗下品牌) linux驱动current关键词 Linux内核驱动模块 Linux驱动开发方法论 美国虚拟主机现状观察:用户口碑是最大筹码 linux 用户管理 Linux做代理上网服务器 (linux) 关于设备模型、设备与驱动关联的过程分析 - linux设备/驱动1 Linux的I2C驱动架构 Linux驱动开发学习笔记 Linux服务器启动过程详解 LINUX下Web服务器配置