1.移植环境:
系统:Linux4.1.15 (其它版本也一样的)
板子:imx6q USB:在板子的usb-otg+rtl8152芯片+RG45
驱动:内核里自带r8152.c,如果出现其它问题,可换最新的驱动,目前可能是r8152-2.14.0,建议换,避免出现没MAC的情况。
RTL8152最新驱
2.内核的配置
RTL8152驱动的勾选
make menuconfig
在配置界面中搜索 ;
/8152
勾选相应的选项;
Symbol: USB_RTL8152 [=y]
│ -> Device Drivers
│ -> Network device support (NETDEVICES [=y]) │
│ -> USB Network Adapters (USB_NET_DRIVERS [=y])
USB2.0 或者3.0驱动的配置
这块参考范工的博文修改的
→ Device Drivers → USB support →<*> EHCI HCD (USB 2.0) support
可选 EHCI HCD (USB 2.0) support 或 EHCI HCD (USB 3.0) support3.0是向下兼容的;然后
DesignWare USB2 DRD Core Support
DWC2 Mode Selection ->host only mode
usb配置成host模式,不然后面肯定调试不通;
3.设备树的修改
手里得板子,8152接的usb-otg,开始得时候lsusb不显示usb设备;
我担心是硬件得问题(板子自己做的)为此,我去某宝,买了8152的usb转网卡测试,插到usb-hub接口可以用,接到usb-otg接口无法使用,这样就确定了驱动没问题,可能是usb-otg这块设备树文件没有配置好,或者压根就是硬件板子有问题。
imx6q设备树中的部分描述为:
&usbotg {
vbus-supply = <®_usb_otg_vbus>;
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_usbotg>; or pinctrl-0 = <&pinctrl_enet1>;
disable-over-current;
srp-disable;
hnp-disable;
adp-disable;
status = "okay";
};
.....
reg_usb_otg_vbus: regulator@0 {
compatible = "regulator-fixed";
reg = <0>;
regulator-name = "usb_otg_vbus";
regulator-min-microvolt = <5000000>;
regulator-max-microvolt = <5000000>;
gpio = <&gpio3 22 0>;
enable-active-high;
vin-supply = <&swbst_reg>;
};
.........
pinctrl_usbotg: usbotggrp {
fsl,pins = <
MX6QDL_PAD_GPIO_1__USB_OTG_ID 0x17059
>;
};
设备树的修改跟硬件图是相关的;
usbotg+8152驱动移植,设备这块只需要考虑usb_otg_vbus引脚和usb_otg_id引脚usb_otg_vbus 这个引脚看图纸怎么接的,如果我的板子就是给从设备供电;那正点原子的usb-otg供电部分就是直接外部电源5v提供;usb_otg_id:该引脚需要复用,该引脚控制usbotg的模式,是host模式的话,usb_otg_id需拉低
dmesg |grep usb
我记得会提示:usb_otg_vbus is disabing
我移植过程的问题:
lsusb 一直找不到8152的usb;原因在于MX6QDL_PAD_GPIO_1__USB_OTG_ID 0x17059其中 0x17059 的第14位 15位 描述的是100K上拉
问题就在这,把usb_otg_id引脚拉低 即设置为usb host模式即可
pinctrl_usbotg: usbotggrp {
fsl,pins = <
MX6QDL_PAD_GPIO_1__USB_OTG_ID 0x13059
>;
};
4.测试
然后lsusb 即出现相关设备
ifconfig 即出现eth1
ifconfig eth1 xxx.xxx.xxx.xx设置下IP,即可ping通。