任务动机:在自制RK3399开发板上实现基于openEuler的usbnet
任务描述:在两个RK3399板子上分别烧录openEuler系统,编译内核实现usbnet的通信。通过比较不同开发板的电路设计原理图,内核源码,定位故障原因;通过修改硬件电路和内核,解决故障。
1. 自制开发板的踩坑与解决
这次准备测试两个RK3399之间使用usbnet进行直接通信,如果测试成功,那么将来开发机器人系统的话就可以省下网卡和网络接口了!正好同隔壁组那边有一个基于RK3399定制的板子,这次借过来进行一下开发板间通过usbnet通信的测试。
1.1 出师不利
由于之前做过了开发板和电脑之间使用usbnet进行通信的测试,这次轻车熟路,直接开始安装usbnet的驱动,之前的链接:https://blog.csdn.net/zhzwang/article/details/109304765。本来认为可以很快进入到测试阶段的,没想到usbnet模块成功加载后,由于type-c口插入device不供电,导致usbnet失败。
如上图虚拟网卡usb0设备启动,使用type-c转usb线连接Windows电脑,Windows下没有应有的RNDIS设备,如下图。
测试type-c口连接U盘,U盘无供电反应,该不会usb OTG根本没有启动吧…
1.2 定位问题原因
如果是软件的问题的话,usb0应该是无法枚举上的,想着会不会是电路不支持呢?拿着板子去隔壁组问了一下,得到了板子肯定可以支持OTG的回复。分析可能性有以下两种情况:
- 操作系统问题,原板载内核源码不支持
- 硬件电路问题,电源或设备检测线没有连接
1.3 问题排查
首先对比该板子和Firefly RK3399(支持usbnet)内核代码。哈!发现有部分被注解删除掉了!被删除部分的代码和usb OTG相关联。
......省略.......
&usbdrd3_0 {
extcon = <&fusb0>;//加进去
status = "okay";
};
......省略.......
&i2c4 {
status = "okay";
i2c-scl-rising-time-ns = <475>;
i2c-scl-falling-time-ns = <26>;
fusb0: fusb30x@22 {
compatible = "fairchild,fusb302";
reg &