当前位置:网站首页>USB驱动-debug
USB驱动-debug
2022-06-26 02:51:00 【对我好两点】
1. debugfs
如果系统没有自动挂载debugfs ,需要使用如下命令手动挂载:
mount -t debugfs none /sys/kernel/debug/ ## 默认挂载
mount -t debugfs kernel_debug /data/ ## 自定义挂载
在系统启动过程中,初始化usb 模块:
// \linux-5.10\drivers\usb\core\usb.c
static int __init usb_init(void)
{
usb_debugfs_init(); //debugfs 初始化,即/sys/kernel/debug/(mount -t debugfs none /sys/kernel/debug/)
retval = bus_register(&usb_bus_type); //注册usb 总线
retval = usb_register(&usbfs_driver); //注册usb_driver: usbfs
retval = usb_devio_init(); //usbfs 初始化,即/sys/kernel/debug/usb/
retval = usb_hub_init(); //初始化usb_driver: hub
retval = usb_register_device_driver(&usb_generic_driver, THIS_MODULE); //generic 驱动
}
usb_register(&usbfs_driver)、usb_devio_init()都是 usbfs 相关的初始化。
usbfs 为咱们提供了在用户空间直接访问 usb 硬件设备的接口,但它需要内核的大力支持,usbfs_driver(\drivers\usb\core\devio.c) 就是用来完成这个光荣任务的。
1.1 trace
Linux系统自带的一种 trace,位于/sys/kernel/tracing/ 或 /sys/kernel/debug/tracing/,打印:
trace_dwc3_gadget_ep_cmd(dep, cmd, params, cmd_status);
(1)dwc3 trace
echo 1 > /sys/kernel/tracing/instances/usb/events/dwc3/enable #打开dwc3的tracing
cat /sys/kernel/tracing/instances/usb/trace > /data/out.txt #保存trace
Note: To reduce the number of log events we can disable logging for dwc3_readl/writel.
echo 0 > /sys/kernel/debug/tracing/instances/usb/events/dwc3/dwc3_readl/enable
echo 0 > /sys/kernel/debug/tracing/instances/usb/events/dwc3/dwc3_writel/enable
(2)xhci trace
echo 1 > /sys/kernel/tracing/instances/usb/events/xhci-hcd/enable
cat /sys/kernel/tracing/instances/usb/trace_pipe > /data/trace_pipe.txt &
(3)trace 总开关:
echo 1 > /sys/kernel/tracing/tracing_on #打开所有trace
cat /sys/kernel/tracing/trace_pipe
1.2 ipc_logging
Qualcomm 自己添加的一种log,用于跟踪 mdwc3 的行为。
cat /d/ipc_logging/4e00000.dwc3/log
或
cat /sys/kernel/debug/ipc_logging/4e00000.dwc3/log
1.3 strace
strace ./yavta -f YUYV -s 1280x720 -t 1/60 -c100 /dev/video0 > logcat.log
1.4 切换usb 模式
echo none > /sys/bus/platform/devices/6a00000.ssusb/mode #断开USB
echo peripheral > /sys/bus/platform/devices/6a00000.ssusb/mode #device mode
echo host > /sys/bus/platform/devices/6a00000.ssusb/mode #host mode
2. procfs
(1)查看IO 内存分配
cat /proc/iomem #查看IO内存分配
sm6150:/ # cat /proc/iomem
00100000-002effff : cc_base
007c4000-007c4fff : hc_mem
007c8000-007cffff : /soc/[email protected]
00884000-00887fff : /soc/[email protected] #i2c
0088c000-0088ffff : /soc/[email protected]
008c0000-008c5fff : /soc/qcom,[email protected]
00a84000-00a87fff : /soc/[email protected]
00ac0000-00ac5fff : /soc/qcom,[email protected]
01d90000-01d97fff : /soc/[email protected]
01fcb244-01fcb247 : vls_clamp_reg
01fed000-01fed027 : /soc/[email protected]
03000000-03dc1fff : pinctrl
...
08804000-08804fff : hc_mem
088e0000-088e1fff : eud_base
088e2000-088e217f : qusb_phy_base #usb phy
088e3000-088e317f : qusb_phy_base
090cc000-090cc2ff : lagg-base
0a60c100-0a60ccff : /soc/[email protected]/[email protected] #usb0
0a800000-0a807fff : /soc/[email protected]/[email protected] #usb1
...
(2)查看系统注册的设备和主设备号:
sm6150:/ # cat /proc/devices | grep usb
180 usb
189 usb_device
494 ccid_usb
495 msm_usb_bridge
506 gsi_usb
3. host
(1)查看USB插入设备信息,打印所有总线下的设备信息(包含描述符信息)。
cat /sys/kernel/debug/usb/devices
(2)查看usb 总线下的device:
ls /sys/bus/usb/devices/
1-0:1.0 2-0:1.0 3-0:1.0 usb1 usb2 usb3
解析:
1-0:1.0 1-0(集线器1-集线器端口号0):1(第一个配置).0(第一个接口)
usb1 dummy root hub、USB主机控制器、USB总线1;
usb2 2.0 root hub、USB主机2.0控制器、USB总线2;
usb3 3.0 root hub、USB主机3.0控制器、USB总线3;
插入U盘(多出了一个设备接口:2-1:1.0)
1-0:1.0 2-0:1.0 2-1 2-1:1.0 3-0:1.0 usb1 usb2 usb3
解析;
2-1 u盘设备
2-1:1.0 2-1(集线器2-集线器端口号1):1(第一个配置).0(第一个接口)
(3)查看设备树节点架构:
ls /sys/devices/platform/soc/4e00000.ssusb/4e00000.dwc3/xhci-hcd.2.auto/usb2/2-1/2-1:1.0
解析:
soc #设备树根节点的子节点,作为platform device被系统解析
4e00000.ssusb #因soc具有compatible的bus属性,其子节点作为platform设备注册,高通定义的mdwc
4e00000.dwc3 #dwc3 usb core子系统,被mdwc 注册
xhci-hcd.2.auto #主机控制器xhci
usb2 #usb2.0控制器,usb总线2
2-1 #usb设备(如U盘)
2-1:1.0 #usb接口设备
边栏推荐
- js array数组json去重
- 力扣(LeetCode)175. 组合两个表(2022.06.24)
- 力扣(LeetCode)176. 第二高的薪水(2022.06.25)
- Analysis on the diversification of maker space mechanism construction
- 2022年挖财证券开户安全嘛?
- UE5全局光照系统Lumen解析与优化
- [solution] cmake was unable to find a build program corresponding to "UNIX makefiles"
- 【解决】CMake was unable to find a build program corresponding to “Unix Makefiles“.
- ArrayList#subList这四个坑,一不小心就中招
- Little p weekly Vol.10
猜你喜欢

Drawing structure diagram with idea

浅谈虚拟内存与项目开发中的OOM问题

拖放

数字孪生智慧水务,突破海绵城市发展困境

Camtasia 2022 nouvelle vidéo d'ordinateur d'enregistrement ultra - clair

Good news | congratulations on the addition of 5 new committers in Apache linkage (incubating) community

Business process diagram design

Authorization of database

Oracle connectivity issues and Solutions
![[flask introduction series] flask processing request and response](/img/4b/bb5d915e83341183270d492b98f7d3.png)
[flask introduction series] flask processing request and response
随机推荐
Drawing structure diagram with idea
Wealth freedom skills: commercialize yourself
【解决】联想拯救者vmware启动虚拟机蓝屏重启问题
Lumen Analysis and Optimization of ue5 global Lighting System
PCA and automatic encoder for dimension reduction of R language
【QT】自定义控件-空气质量仪表盘
ArrayList # sublist these four holes, you get caught accidentally
在哪里开基金帐户安全?
虫子 拷贝构造 运算符重载
Using meta analysis to drive the development of educational robot
Learn Tai Chi Maker - mqtt (IV) server connection operation
【解决】CMake was unable to find a build program corresponding to “Unix Makefiles“.
QT compilation error: unknown module (s) in qt: script
On virtual memory and oom in project development
渐变
MySQL增删查改(进阶)
Google recommends using kotlin flow in MVVM architecture
Business process diagram design
R language survival analysis
MySQL开发环境