usb驱动之打印usb设备信息(一)
1. 定义usb支持的设备类型:
static const struct usb_device_id mouse_table[] = {
{ USB_INTERFACE_INFO(USB_INTERFACE_CLASS_HID, USB_INTERFACE_SUBCLASS_BOOT,
USB_INTERFACE_PROTOCOL_MOUSE) }, /* mouse */
{ }/* Terminating entry */
};
当插入的USB设备为该类型的USB时,内核就会调用probe函数。注意要把这个数组写进设备表里面:
MODULE_DEVICE_TABLE (usb, mouse_table);
2. probe函数
2.1 从接口获得设备,然后打印设备信息:
struct usb_device *udev = interface_to_usbdev(interface); //设备 printk("VID = 0x%x,PID = 0x%x",udev->descriptor.idVendor,udev->descriptor.idProduct);
2.2 在此之前定义结构体:
static struct usb_driver usb_driver = {
.name = "mouse",
.probe = mouse_probe,
.disconnect = mouse_disconnect,
.id_table = mouse_table,
};
3. 将结构体注册进内核:
3.1使用一句话:
module_usb_driver(usb_driver);
3.2 当然也可以使用万能模板module_init注册
static int usb_drv_init(void)
{
usb_register(&usb_driver);
return ;
} static void usb_drv_exit(void)
{
usb_deregister(&usb_driver);
} module_init(usb_drv_init);
module_exit(usb_drv_exit);
usb驱动之打印usb设备信息(一)的更多相关文章
- usb驱动之打印usb设备信息(二)
以下是打印鼠标左右键及其他输入的源代码,详细说明见https://www.cnblogs.com/zhu-g5may/p/9309381.html /*参考/drivers/hid/usbhid/us ...
- usb驱动开发13之设备生命线
上一节勉勉强强把struct urb这个中心给说完,接着看那三个基本点. 第一个基本点,usb_alloc_urb函数,创建urb的专用函数,为一个urb申请内存并做初始化,在drviers/usb/ ...
- usb驱动开发12之设备生命线
函数usb_control_msg完成一些初始化后调用了usb_internal_control_msg之后就free urb.剩下的活,全部留给usb_internal_control_msg去做了 ...
- usb驱动开发18之设备生命线
现在已经使用GET_DESCRIPTOR请求取到了包含一个配置里所有相关描述符内容的一堆数据,这些数据是raw的,即原始的,所有数据不管是配置描述符.接口描述符还是端点描述符都挤在一起,所以得想办法将 ...
- usb驱动开发14之设备生命线
直接看代码吧. /*-------------------------------------------------------------------*/ /** * usb_submit_urb ...
- usb驱动开发11之设备生命线
暂时先告别媒人,我们去分析各自的生命旅程,最后还会回到usb_device_match函数. 首先当你将usb设备连接在hub的某个端口上,hub检测到有设备连接了进来,它会为设备分配一个struct ...
- usb驱动开发16之设备生命线
回到struct usb_hcd,继续努力的往下看. kref,usb主机控制器的引用计数.struct usb_hcd也有自己专用的引用计数函数,看hcd.c文件. static void hcd_ ...
- usb驱动开发15之设备生命线
总算是进入了HCD的片儿区,既然来到一个片区,怎么都要去拜会一下山头几个大哥吧.,先回忆一些我们怎么到这里的?给你列举一个调用函数过程usb_control_msg->usb_internal_ ...
- Linux Platform驱动模型(一) _设备信息
我在Linux字符设备驱动框架一文中简单介绍了Linux字符设备编程模型,在那个模型中,只要应用程序open()了相应的设备文件,就可以使用ioctl通过驱动程序来控制我们的硬件,这种模型直观,但是从 ...
随机推荐
- net 4.0+EF6+Sqlite 使用,安装,打包
开发 1.因为EF不支持Codefirst,开始可以使用SQL来进行开发. 部署安装 2.然后可以找到SQL转Sqlite工具(http://www.cnblogs.com/walkingp/arch ...
- SQL创建视图
1.视图的理解 从用户角度来看,一个视图是从一个特定的角度来查看数据库中的数据 .从数据库系统内部来看,一个视图是由SELECT语句组成的查询定义的虚拟表 .从数据库系统内部来看,视图是由一张或多张表 ...
- 爬虫入门之scrapy模拟登陆(十四)
注意:模拟登陆时,必须保证settings.py里的COOKIES_ENABLED(Cookies中间件) 处于开启状态 COOKIES_ENABLED = True或# COOKIES_ENABLE ...
- Python学习---Python数据类型1206
1.1. 字符串格式化 字符格式化输出 占位符 %s s = string %d d = digit 整数 %f f = float 浮点数,约等于小数 #version: python3.2 ...
- vSan中见证组件witness详解
witness在vSan中作为见证组件其作用类似于WinServer中的仲裁磁盘,当Cluster中某一节点发生故障时,来判断该节点上的对象在哪一个新的节点上继续承载.此处需要强调的是,witness ...
- C# 表达式树 创建、生成、使用、lambda转成表达式树~表达式树的知识详解
笔者最近学了表达式树这一部分内容,为了加深理解,写文章巩固知识,如有错误,请评论指出~ 表达式树的概念 表达式树的创建有 Lambda法 和 组装法. 学习表达式树需要 委托.Lambda.Func& ...
- C#网络编程(二)应用篇
(一)TcpListen类.TcpClient类 TcpListener类和TcpClient类都是System.Net.Sockets命名空间下的类,利用TcpListener和TcpClient可 ...
- December 06th 2016 Week 50th Tuesday
Behind every beautiful thing, there is some kind of pain. 美丽背后,必有努力. No pains, no gains. But it seem ...
- Apache,php配置
很多朋友想要在window下配置apache+php+mysql运行环境,其实从这么长时间的经验来看,win2003下还是用iis,如果为了学习或对apache特别熟悉的朋友可以用apache 一 ...
- 一个简单的使用matplotlib作图的例子
#使用matplotlib作图 import numpy as np import matplotlib.pyplot as plt #x = np.linspace(start, stop, num ...