我现在手里有一个USB的手持设备,有windows下的驱动,无驱动代码。
这个设备在windows下有一个配套的工具软件,该软件主要的功能就两个,一个是密码功能,只能输入密码才能对设备进行配置工作,另个是对设备启动USB的功能,也就是将设备转成了MASS STORAGE设备。
我现在想在Linux下做一个该设备的驱动,所以我的Linux驱动也不用实现太复杂的功能,只需完成这两工作就可以。
但是软件和设备的通信协议我不清楚,所以我的思路是,通过抓包工具抓取PC往设备上发送的命令,在linux驱动中增加对应IOCTL接口。
这里看到urb 的类型是厂商请求,header中的Funtion是0x17,查到usb.h中对应的命令是URB_FUNCTION_VENDOR_DEVICE。
所以我的问题是,之后如何在Linux中发送对应的命令呢?发的命令类型是什么呢?怎么把这48个字节的密码发过去呢?
在你的Linux/USB驱动程序里定义一个自定义的IOCTL,通过该IOCTL,应用程序可以接收密码设置到你的驱动程序里面。你的驱动程序再把收到的密码信息,包装成对应的URB,发送给USB设备。
已搞定,
request是USB_REQ_CLEAR_FEATURE
requesttype是USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE