• USB驱动-debug


    1. debugfs

    如果系统没有自动挂载debugfs ,需要使用如下命令手动挂载:

    mount -t debugfs none /sys/kernel/debug/		## 默认挂载
    mount -t debugfs kernel_debug /data/			## 自定义挂载
    
    • 1
    • 2

    在系统启动过程中,初始化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 驱动
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    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

    (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
    
    • 1
    • 2

    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
    
    • 1
    • 2

    (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 &
    
    • 1
    • 2

    (3)trace 总开关:

    echo 1 > /sys/kernel/tracing/tracing_on		#打开所有trace
    cat /sys/kernel/tracing/trace_pipe
    
    • 1
    • 2

    1.2 ipc_logging

    Qualcomm 自己添加的一种log,用于跟踪 mdwc3 的行为。

    cat /d/ipc_logging/4e00000.dwc3/log
    
    • 1

    cat /sys/kernel/debug/ipc_logging/4e00000.dwc3/log
    
    • 1

    1.3 strace

    strace ./yavta -f YUYV -s 1280x720 -t 1/60 -c100 /dev/video0 > logcat.log
    
    • 1

    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
    
    • 1
    • 2
    • 3

    2. procfs

    (1)查看IO 内存分配

    cat /proc/iomem		#查看IO内存分配
    sm6150:/ # cat /proc/iomem
    00100000-002effff : cc_base
    007c4000-007c4fff : hc_mem
    007c8000-007cffff : /soc/sdcc1ice@7C8000
    00884000-00887fff : /soc/i2c@884000						#i2c
    0088c000-0088ffff : /soc/i2c@88c000
    008c0000-008c5fff : /soc/qcom,qupv3_0_geni_se@8c0000
    00a84000-00a87fff : /soc/i2c@a84000
    00ac0000-00ac5fff : /soc/qcom,qupv3_1_geni_se@ac0000
    01d90000-01d97fff : /soc/ufsice@1d90000
    01fcb244-01fcb247 : vls_clamp_reg
    01fed000-01fed027 : /soc/cx_ipeak@01fed000
    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/ssusb@a600000/dwc3@a600000		#usb0
    0a800000-0a807fff : /soc/hsusb@a800000/dwc3@a800000		#usb1
    ...
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    (2)查看系统注册的设备和主设备号:

    sm6150:/ # cat /proc/devices | grep usb
    180 usb
    189 usb_device
    494 ccid_usb
    495 msm_usb_bridge
    506 gsi_usb
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    3. host

    (1)查看USB插入设备信息,打印所有总线下的设备信息(包含描述符信息)。

    cat /sys/kernel/debug/usb/devices
    
    • 1

    (2)查看usb 总线下的device:

    ls /sys/bus/usb/devices/
    1-0:1.0 2-0:1.0 3-0:1.0 usb1 usb2 usb3
    
    • 1
    • 2

    解析:

    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
    • 1
    • 2
    • 3
    • 4

    插入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
    
    • 1

    解析;

    2-1			u盘设备
    2-1:1.0		2-1(集线器2-集线器端口号1):1(第一个配置).0(第一个接口)
    
    • 1
    • 2

    (3)查看设备树节点架构:

    ls /sys/devices/platform/soc/4e00000.ssusb/4e00000.dwc3/xhci-hcd.2.auto/usb2/2-1/2-1:1.0
    
    • 1

    解析:

    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接口设备
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
  • 相关阅读:
    JS——初始DOM的相关操作练习
    「Python循环结构」使用for循环实现高斯求和、阶乘、斐波那契数列
    Jetson Nano 系列之:C通过内存映射操作GPIO
    私域流量时代来临,电商企业如何布局?
    【C】指针进阶(下)
    this用法,systemVerilog语法
    VoLTE基础自学系列 | VoLTE终端哪些场景会触发CSFB?
    数据资产“入表”对哪些企业影响比较大?
    机械原理-试题及答案
    【KVM-6】KVM/QEMU软件栈
  • 原文地址:https://blog.csdn.net/weixin_42129680/article/details/125440726