当前位置:网站首页 > R语言数据分析 > 正文

broadcom linux驱动(linux hub驱动)



linux 下usb 鼠标的驱动基本上属于USB 协议中HID 设备的中断通信的应用。代码vendormstarkernellinarodrivershid칂d캘use.c,下面一起学习usb 鼠标驱动,usb 键盘vendormstarkernellinarodrivershid칂d칋d.c 后续在学习。

 
  
 
  

通过宏module_usb_driver将usb 鼠标设备usb_mouse_driver注册下去

 
  

就这样,usb mouse 驱动就被注册到usb 总线上去了。

 
  

上一步完成了驱动的配置,传入了id_table,此处也即usb_mouse_id_table,里面记载了支持的设备列表,USB_INTERFACE_INFO 来定义一类USB鼠标设备。通过这个信息就可以完成驱动和设备的匹配,成功之后就会调用usb_mouse_driver 里面的probe。

驱动和设备匹配成功之后就会调用driver 的探测函数,主要任务有:

  1. 获取接口; // 判断端点是否为中断模式
  2. 申请一个input 设备并填充;
  3. 创建管道,设置大小,再申请缓存区;
  4. 申请一个urb 用于与usb 设备通信;
  5. 注册input 设备;
  6. 设置接口数据;
 
  
 
  
 
  
 
  

在usb mouse 产生事件时,usb_mouse_irq回调会被触发

 
  

usb 键盘/鼠标协议说明
https://blog.csdn.net/peakguy/article/details/
https://www.cnblogs.com/vonly/p/7403823.html
https://blog.csdn.net/jiujiujiuqiuqiuqiu/article/details/


鼠标发送给PC的数据每次4个字节
BYTE1 BYTE2 BYTE3 BYTE4
定义分别是:
BYTE1 –
|–bit7: 1 表示 Y 坐标的变化量超出-256 ~ 255的范围,0表示没有溢出
|–bit6: 1 表示 X 坐标的变化量超出-256 ~ 255的范围,0表示没有溢出
|–bit5: Y 坐标变化的符号位,1表示负数,即鼠标向下移动
|–bit4: X 坐标变化的符号位,1表示负数,即鼠标向左移动
|–bit3: 恒为1
|–bit2: 1表示中键按下
|–bit1: 1表示右键按下
|–bit0: 1表示左键按下
BYTE2 – X坐标变化量,与byte的bit4组成9位符号数,负数表示向左移,正数表右移。用补码表示变化量
BYTE3 – Y坐标变化量,与byte的bit5组成9位符号数,负数表示向下移,正数表上移。用补码表示变化量
BYTE4 – 滚轮变化。
由于手上没有USB鼠标,对BYTE1的4-7位没有测试,对于BYTE2 BYTE3做个测试,BYTE1的4-7全为0的时候,BYTE2 BYTE3的正负表示鼠标移动方向














键盘发送给PC的数据每次8个字节
BYTE1 BYTE2 BYTE3 BYTE4 BYTE5 BYTE6 BYTE7 BYTE8
定义分别是:
BYTE1 –
|–bit0: Left Control是否按下,按下为1
|–bit1: Left Shift 是否按下,按下为1
|–bit2: Left Alt 是否按下,按下为1
|–bit3: Left GUI 是否按下,按下为1
|–bit4: Right Control是否按下,按下为1
|–bit5: Right Shift 是否按下,按下为1
|–bit6: Right Alt 是否按下,按下为1
|–bit7: Right GUI 是否按下,按下为1
BYTE2 – 暂不清楚,有的地方说是保留位
BYTE3–BYTE8 – 这六个为普通按键
键盘经过测试。
例如:键盘发送一帧数据 02 00 0x04 0x05 00 00 00 00
表示同时按下了Left Shift + ‘a’+‘b’三个键















回调里面解析完 usb mouse 事件之后,通过input_report_key丢给linux 的input 系统来处理。至此usb mouse 完成了事件的获取没解析和转发。另外input子系统还有以下input event 转发接口,在其它输入设备中可以用到,例如usb keyboard。

 到此这篇broadcom linux驱动(linux hub驱动)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就! 
  

                            

版权声明


相关文章:

  • nswered怎么读(swering怎么读)2025-08-11 12:18:09
  • docker版本(docker版本分为什么与什么)2025-08-11 12:18:09
  • chronyc sources -v详解ns(chronyc sources -v显示参数)2025-08-11 12:18:09
  • store和shop的区别(Store和shop的区别)2025-08-11 12:18:09
  • bookstore怎么读(bookstore怎么读的谐音)2025-08-11 12:18:09
  • jfr是什么意思(jfla是什么意思)2025-08-11 12:18:09
  • redhat最新版下载(redhat 最新版)2025-08-11 12:18:09
  • ifstream读取文件遇到空格被截断(ifstream获取文件长度)2025-08-11 12:18:09
  • pdfviewer下载(pdf-viewer怎么用)2025-08-11 12:18:09
  • entrepot(entrepot trade的含义)2025-08-11 12:18:09
  • 全屏图片