Linux USB子系统之阅读笔记

本文介绍了Linux USB子系统,包括USB Device Driver Framework的注册过程、数据结构和主要入口点。USB驱动通过注册probe和disconnect函数与系统交互,当设备连接或断开时,这些函数会被调用。此外,还讨论了USB设备驱动的数据结构,如模块名、文件操作指针和minor number等。
摘要由CSDN通过智能技术生成

Linux USB Subsystem

 

Linux 包括了一个 USB Core 的子系统。其包含了一组特定的API函数来支持USB设备和主机控制器。

USB Core 中包含了通用于所有 USB 设备和主机控制器驱动程序的函数。这些函数可以划分成上层和底层API。

从下图可以看出,一类API是为USB设备驱动程序服务,另一类为主机控制器驱动程序服务。

 

 

 

\includegraphics [width=\linewidth]{usbcore}

USB Device Driver Framework

USB设备驱动通过USB子系统框架进行注册/注销。每个USB设备驱动应该注册两个入口点和入口名字,并且注册一组文件操作指针和一个minor number。

所有USB设备的 major number 都是 180。

 

Framework Data Structures

所有USB相关函数或数据结构都遵从相同的命名规则,且以usb_ 为前缀。

 

下图列出了注册usb驱动到USB子系统的数据结构。

\begin{figure}\centering\index{struct usb\_driver}\begin{verbatim}struct usb...... void *buf);const struct usb_device_id *id_table;};\end{verbatim}\end{figure}
  • name: 模块名
  • probe: 侦测函数入口
  • disconnect: 断开函数入口
  • driver_list: 子系统内部使用
  • fops:  驱动程序通用文件操作列表
  • minor:  被分配给该驱动的 minor number 基值(该值应该是16的倍数)。
  • serialize:  串行化
  • ioctl:  I/O接口控制
  • id_table:

 

Framewor Entry Point

USB驱动框架针对常规设备驱动增加了两个入口函数。

  • void *probe(struct usb_device *dev, unsigned int interface, const struct usb_device_id *id_table);

        当新设备被连接上总线时,该入口函数被调用。驱动将为新设备创建其内部数据结构的实例。

        dev 参数指定了设备上下文, 包含了所有 USB 描述符的指针。

        interface 参数指定了接口值。 如果usb驱动希望去绑定一个特定的设备和接口,它将返回一个指针;该指针指向了驱动程序的上下文数据结构。

        probe 函数通常检查 usb 供应商和产品信息,或者usb class 和 subclass 定义。如果和驱动支持的接口数值进行比较后其相等,将继续解析更多的 USB 描述符。

 

       一个简单的 probe 函数示例如下:

\begin{figure}\centering\index{probe function}\begin{verbatim}void *probe(s......tance context */return context;}return NULL;}\end{verbatim}\end{figure}

 

  • void disconnect(struct usb_device *dev, void *drv_context);

         当USB驱动服务的设备被拔出时,  disconnect() 函数被调用。

         dev 参数指定了设备上下文。

         drv_context 参数返回一个指向先前由 probe() 函数注册的 drv_context 指针。

         一旦 disconnect() 函数返回, USB 框架将释放所有关联该设备的数据结构。 usb_driver 数据结构不能再被驱动使用。

        一个简单的 disconnect() 函数示例如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值