linux usb子系统.调试方法

关键词:linux , 驱动, 调试


linux kernel usb调试方法:

  •   sysfs/debugfs
  •   usbmon
  •  Dynamic debug interface
  •  Tracepoints

调试信息文件路径:

ls  /sys/bus/usb/devices/

cat  /sys/kernel/debug/usb/devices   

cat  /proc/bus/input/devices  # 查找系统的usb输入设备

一个u盘的设备信息:
T:  Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#=  2 Spd=480  MxCh= 0    
D:  Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1              
P:  Vendor=1221 ProdID=3234 Rev= 0.00         
S:  Manufacturer=Udisk
S:  Product=Udisk 2.0
S:  SerialNumber=0001CFCFCFC5DA65
C:* #Ifs= 1 Cfg#= 1 Atr=80 MxPwr=100mA
I:* If#= 0 Alt= 0 #EPs= 2 Cls=08(stor.) Sub=06 Prot=50 Driver=usb-storage
E:  Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
E:  Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms


工具抓包分析:

usbmon源码路径 Kernel\drivers\usb\mon

usbmon in lowercase refers to a facility inkernel which is used to collect traces of I/O on the USB bus.

usbmon的相关命令行:
$ sudo mount -t debugfs none_debugs /sys/kernel/debug
$ sudo modprobe usbmon
#Verify that bus sockets are present. 我的电脑有3个usb插口。可以看到每个插口有usbmon
$ sudo ls  /sys/kernel/debug/usb/usbmon         
0s  0u	1s  1t	1u  2s	2t  2u

$ls /dev | grep usb
usbmon0  usbmon1  usbmon2
$sudo tcpdump -i usbmon1 -w usbmon11.pcap  #  usb抓包  

抓包U盘插入usb接口过程数据包,Wireshark的分析结果。





 

Protocol  Analyzer软件(USB  tethering和vusb-analyzer)

ubuntu vusb-analyzer安装

$sudoapt-get install vusb-analyzer

 

vusb-analyzer运行

$sudo cat /sys/kernel/debug/usb/usbmon/1u >usbmon12.mon
$vusb-analyzer  usbmon12.mon 

dmesg是用于检测和控制内核环缓冲,它可以用来帮助用户了解系统的信息。

列出日志

# dmesg | less

查看usb相关的信息

# dmesg | grep -i usb

输出最新20行日志

# dmesg | tail -20

清空dmesg缓存日志

# dmesg -c

查看实时日志

# watch "dmesg | tail -20"

 

参考

使用Wireshark捕捉USB通信数据  bobao.360.cn/learning/detail/2738.html

Bootstrap Yourself with Linux-USB Stack



  • 0
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Linux USB gadget驱动编写有如下几个步骤: 1. 确定USB gadget功能:首先需要确定所需实现的USB gadget功能,例如以USB设备的形式提供存储、网络、音频等服务。这样可以决定需要实现的USB gadget驱动类型和功能。 2. 编写USB驱动框架:基于Linux内核框架,编写USB gadget驱动的基本框架。这包括注册USB gadget驱动和常用的函数接口等。 3. 实现USB gadget子系统:根据所需的功能,实现USB gadget子系统的模块,如存储、网络或音频子系统等。这些子系统需要封装底层的USB通信协议和数据传输,供应用程序调用。 4. 配置USB gadget驱动:根据具体需求,在系统配置文件中进行必要的配置,以启用和配置USB gadget驱动。这包括配置端点、描述符和功能等。 5. 移植和编译:将驱动程序编译成内核模块,然后将其移植到目标设备上。对于嵌入式设备,可能需要修改硬件相关的代码,以适应硬件平台。 6. 测试和调试:编写测试用例,对USB gadget驱动进行测试和调试,确保其正常工作。这包括对设备和主机之间的数据传输进行验证,以及处理异常情况和错误处理。 总之,编写Linux USB gadget驱动需要明确所需实现的功能、基于内核框架编写驱动框架、实现USB gadget子系统、配置以及移植和编译。最后进行测试和调试,确保驱动程序的正常运行。通过以上步骤,可以实现各种USB设备功能的驱动。 ### 回答2: Linux USB gadget驱动是用于实现USB设备的功能的驱动程序。它使得Linux设备可以作为一个USB设备与其他主机进行通信。在编写Linux USB gadget驱动时,需要完成以下几个步骤。 首先,需要确定设备的功能和属性。USB设备可以有多种功能,如储存设备、键盘、鼠标等。根据设备的类型和规格,确定设备的操作和数据传输方式。 其次,在驱动程序中定义设备的USB描述符。USB描述符包括设备描述符、接口描述符和端点描述符等,它们是USB协议的一部分,用于描述设备的属性和功能。 然后,在驱动程序中实现设备的相关功能。根据设备的类型和规格,编写相应的功能代码。例如,如果设备是一个键盘,就需要实现按键事件的处理逻辑;如果设备是一个储存设备,就需要实现读写数据的逻辑。 最后,编译和加载驱动程序。使用Linux内核提供的工具链,将驱动程序编译为可执行文件,并将其加载到Linux内核中运行。加载驱动程序后,系统即可识别设备,并根据驱动程序中定义的功能和属性来处理设备的操作和数据传输。 总之,编写Linux USB gadget驱动需要确定设备的功能和属性、定义USB描述符、实现设备的相关功能,最后编译和加载驱动程序。通过这些步骤,我们可以在Linux系统中实现USB设备的功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值