linux如何发现和加载对应的USB设备驱动

linux如何发现和加载对应的USB对应的设备驱动
1.整体流程
加载USB设备驱动-->注册USB设备(注册的USB设备结构体包含了USB设备的vender ID和product ID)
USB设备插入后,匹配到vendor ID和product ID,即调用改USB注册结构里的probe函数,开始和USB设备进行通信。
2.USB设备结构体
static struct usb_driver test_usb_driver={
.OWNER = THIS_MODULE,
.name = "test USB device",
.id_table = test_usb_table_id,
.probe = test_usb_probe,
.disconnect = test_usb_disconnect
};
3.USB设备table ID
static struct usb_device_id test_usb_table_id={
{USB_DEVICE(TEST_USB_VENDOR_ID,TEST_USB_PRODUCT_ID)};
{}
};

扩展:
usb设备table ID对应usb_device_id
i2c设备table ID对应i2c_device_id

usb设备的table id保存在USB设备内,在作为device从设备,插入host(主设备)后,host通过端口0从usb设备中读出来。
i2c设备则是定义在device tree里,kernel启动后,遍历device tree,加载对应的i2c设备驱动。

原文地址:https://blog.51cto.com/wangyw/2461007

时间: 2024-10-12 14:57:37

linux如何发现和加载对应的USB设备驱动的相关文章

Linux驱动模块生成和加载分析

Linux驱动模块生成和加载分析 0x00 Hello World 先奉上本文需要分析的例子,这里以Hello World程序作为例子来分析吧: hello.c #include <linux/init.h> #include <linux/kernel.h> int __init hello_init(void) { printk(KERN_INFO "Hello world!\n"); return 0; } void __exit hello_exit(v

Linux usb子系统(二):USB设备驱动usb-skeleton.c

usb驱动分为通过usbfs操作设备的用户空间驱动,内核空间的内核驱动.两者不能同时进行,否则容易引发对共享资源访问的问题,死锁!使用了内核驱动,就不能在usbfs里驱动该设备. 下面转载的一篇分析usb-skeleton.c文章. 初次接触与OS相关的设备驱动编写,感觉还挺有意思的,为了不至于忘掉看过的东西,笔记跟总结当然不可缺,更何况我决定为嵌入式卖命了.好,言归正传,我说一说这段时间的收获,跟大家分享一下Linux的驱动开发.但这次只先针对Linux的USB子系统作分析,因为周五研讨老板催

linux下USB设备驱动

本文以USB鼠标讲解USB设备驱动. 驱动程序中调用usb_register(struct usb_driver *)函数时,先判断USB总线驱动程序是否支持usb_driver里定义的id_table,若支持,调用usb_driver的probe函数. 所以首先要定义并初始化usb_driver结构体: static struct usb_driver usbmouse_as_key_driver = { .name = "usbmouse_as_key", .probe = usb

Linux下 USB设备驱动分析(原创)

之前做过STM32的usb HID复合设备,闲来看看linux下USB设备驱动是怎么一回事, 参考资料基于韦东山JZ2440开发板,以下,有错误欢迎指出. 1.准备知识 1.1USB相关概念: USB枚举过程:https://blog.csdn.net/go_str/article/details/80802452 USB其它概念: (1)usb是主从结构,usb的传输都是主机发起: (2)usb右四种传输类型:控制.批量.中断.实时传输. (3)usb数据是通过端点进行通讯的,0端点既能输入也

USB设备驱动开发之远程访问USB设备(一)

By Fanxiushu 2016 05-15  转载或引用本文,请注明原始作者. 使用过vmware的人都应该知道,vmware虚拟机有这样的一个功能, 当在宿主机上插入一个USB设备的时候,通过设置,可以在vmware的虚拟机系统里边能访问到这个USB设备, 而且访问这个USB设备,就跟真的把这个USB设备插入到这个虚拟系统中一样,跟真实的几乎没任何区别. 再看一种情况,假设有两台机器C和S,C 机器是你正在使用的机器, S机器在远端,你只能通过远程控制S. S机器的配置和功能都很强大,大部

USB设备驱动架构

1  USB设备驱动架构 这里说的USB设备驱动指的是从主机角度来看,怎样访问被插入的USB设备,而不是指USB设备内部本身运行的固件程序.Linux内核中实现了几类通用的USB设备驱动,主要包括下面几类: (1)音频设备类  (2)通信设备类  (3)HID(人机接口)设备类  (4)显示设备类  (5)海量存储设备类  (6)电源设备类  (7)打印设备类 一般的通用Linux设备(如U盘.USB鼠标.USB键盘等)都不需要工程师再编写驱动,而工程师需要编写的是特定厂商.特定芯片的驱动,而且

USB设备驱动概述

USB设备驱动 ·  17.1 USB总线协议 ·  17.1.1 USB设备简介 ·  17.1.2 USB连接拓扑结构 ·  17.1.3 USB通信的流程 ·  17.1.4 USB四种传输模式 ·  17.2.1 观察USB设备的工具 ·  17.2.2 USB设备请求 ·  17.2.3 设备描述符 ·  17.2.4 配置描述符 ·  17.2.5 接口描述符 ·  17.2.6 端点描述符 ·  17.3.1 功能驱动与物理总线驱动 ·  17.3.2 构造USB请求包 ·  17

USB设备驱动之设备初始化(设备枚举)

USB设备从接入HUB到正常工作之前,都属于设备枚举阶段.所谓设备枚举,就是让host控制器认识USB设备,并为其准备资源,建立好主机与设备间的数据传递机制. 该阶段的工作,是USB通信协议规定的,所以属于ISO标准流程.设备枚举阶段也对应了USB设备的五种状态. 设备枚举阶段分为如下8个步骤: 获取设备描述符 复位 设置地址 再次获取设备描述符 获取配置描述符 获取接口,端点描述符 获取字符串描述符 选择设置配置 其中,步骤1与4都是获取设备描述符,两者有什么区别? 步骤1中只取得设备描述符的

以菱形链接(diamond link)为例,探讨Linux下连接器和加载器对Shared libarary兼容性的处理

1. 什么是菱形链接(diamond link) 菱形链接(diamond link)(参考文献 1)能十分清楚的描述出我们要讨论的问题. 如上图所示,我们的程序将要使用某厂家的共享库libvendor1.so,同时也要使用另外一个厂家的共享库libvendor2.so. libvendor1.so和libvendor2.so都将使用某知名开源共享库libopensource.so.xxx(xxx表示版本). 但是这两个厂家提供给我们的都是自己编译维护的libopensource.so.xxx.