Linux的USB驱动如何发送厂商请求?

王鹤翔 2014-11-04 08:40:24
各位高手好!

我现在手里有一个USB的手持设备,有windows下的驱动,无驱动代码。

这个设备在windows下有一个配套的工具软件,该软件主要的功能就两个,一个是密码功能,只能输入密码才能对设备进行配置工作,另个是对设备启动USB的功能,也就是将设备转成了MASS STORAGE设备。

我现在想在Linux下做一个该设备的驱动,所以我的Linux驱动也不用实现太复杂的功能,只需完成这两工作就可以。

但是软件和设备的通信协议我不清楚,所以我的思路是,通过抓包工具抓取PC往设备上发送的命令,在linux驱动中增加对应IOCTL接口。

下面是我抓到的密码传送包。



我输入的密码是778899。

这里看到urb 的类型是厂商请求,header中的Funtion是0x17,查到usb.h中对应的命令是URB_FUNCTION_VENDOR_DEVICE。

所以我的问题是,之后如何在Linux中发送对应的命令呢?发的命令类型是什么呢?怎么把这48个字节的密码发过去呢?

没弄过usb驱动,问题可能比较菜,谢谢大家了。

...全文
198 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
曹大夯 2014-11-05
  • 打赏
  • 举报
回复
引用 楼主 whx891214 的回复:
所以我的问题是,之后如何在Linux中发送对应的命令呢?发的命令类型是什么呢?怎么把这48个字节的密码发过去呢?
在你的Linux/USB驱动程序里定义一个自定义的IOCTL,通过该IOCTL,应用程序可以接收密码设置到你的驱动程序里面。你的驱动程序再把收到的密码信息,包装成对应的URB,发送给USB设备。
王鹤翔 2014-11-05
  • 打赏
  • 举报
回复
已搞定, request是USB_REQ_CLEAR_FEATURE requesttype是USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE
王鹤翔 2014-11-05
  • 打赏
  • 举报
回复
引用 1 楼 Huntercao 的回复:
[quote=引用 楼主 whx891214 的回复:] 所以我的问题是,之后如何在Linux中发送对应的命令呢?发的命令类型是什么呢?怎么把这48个字节的密码发过去呢?
在你的Linux/USB驱动程序里定义一个自定义的IOCTL,通过该IOCTL,应用程序可以接收密码设置到你的驱动程序里面。你的驱动程序再把收到的密码信息,包装成对应的URB,发送给USB设备。[/quote] 感谢版主。基本思路我明白,我也是按照您说的这么做的,我不明白的是,Linux下的的request和requestType应该填什么才能对应上“厂商请求”? 反复尝试填入了不同数据,均无果。

21,600

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 驱动开发/核心开发
社区管理员
  • 驱动开发/核心开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧