DTS(设备树)调试心得
少于1分钟
调试外部设备的dts的思路是这样的:
1. 逻辑节点
- 有一个逻辑节点,表示开发者可以控制的那个逻辑设备(例如usb)的全部(一般逻辑节点也在被写在板级或产品级的dtsi里面);
2. 控制器节点
- 逻辑节点里会有一个控制器节点(如何判断一个节点是不是控制器几点,可以参考如何从代码中判断出控制器controller节点是哪一个
3. phy节点
- 控制器节点里会有phy节点,而如果是usb3.0的话,会有两个phy,一个提供usb2.0,一个提供usb3.0的模式支持。
- 这是因为usb协议是向前兼容的(即usb3.0接口能够支持usb2.0设备接入),因此,usb3.0就要提供2.0的phy来支持才能做到“向前兼容”
4. 产品级dtsi里全部打开
- 要把相应的逻辑节点/控制器节点/phy节点全部打开,而且配置到正确的模式
备注
- 以上这是基于soc vendor给的dts上操作的办法,而且硬件上并没有做出太大的改动。
- 参考硬件数据流pipeline,这里面谈到了常用的硬件的数据流模型,对于调试dts非常有帮助,能让自己知道现在工作在哪一个component。
- 重要的两类节点-usb dts
- 有些是只能做host的,一般dts叫做usbhost30
- 有些是可以做host/device的,也就是otg,一般在dts里,叫做usbdrd30
How-to如何从代码中判断出控制器(controller)节点是哪一个?
- 有中断,它可以通知cpu(interrupts)
- 拥有PHY(phys, phy-names)
- 与驱动程序绑定(有compatible)
- 拥有大量的寄存器空间(reg = <0x0 0xfcc00000 0x0 0x400000>)
- 拥有复杂的时钟和复位逻辑()
- 拥有高层的模式配置(例如dr_mode=“otg”)