【FAQ】全志H616芯片 以太网模块初始化失败如何解决?
-
1.【问题现象】
执行
ifconfig -a/ifconfig eth0/ifconfig eth0 up
命令,找不到eth0设备,有如下类似打印:root@TinaLinux:/# ifconfig -a lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:6480 errors:0 dropped:0 overruns:0 frame:0 TX packets:6480 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1 RX bytes:505440 (493.5 KiB) TX bytes:505440 (493.5 KiB) root@TinaLinux:/# root@TinaLinux:/# ifconfig eth0 ifconfig: eth0: error fetching interface information: Device not found root@TinaLinux:/# root@TinaLinux:/# ifconfig eth0 up ifconfig: SIOCGIFFLAGS: No such device
2.【问题分析】
以太网模块配置未生效或存在GPIO冲突
3.【排查步骤】
-
步骤1:抓取内核启动log,搜索"gmac"关键字段,检查gmac驱动是否probe成功;
-
步骤2:若内核启动log显示probe失败,常见原因是GPIO资源冲突导致,有如下类似打印:
sun50iw10p1-pinctrl pio: pin PH0 already requested by twi0; cannot claim for gmac0 sun50iw10p1-pinctrl pio: pin-224 (gmac0) status -22 sun50iw10p1-pinctrl pio: could not request pin 224 (PH0) from group PH0 on device pio sunxi-gmac gmac0: Error applying setting, reverse things back sunxi-gmac: probe of gmac0 failed with error -22
- 步骤3:若内核启动log无gmac相关打印,则需要确认以太网配置是否生效。
4.【解决办法】
4.1 GPIO冲突
(1) 首先,结合内核启动log定位与哪个模块存在GPIO冲突,有如下类似打印:sun50iw10p1-pinctrl pio: pin PH0 already requested by twi0; cannot claim for gmac0
(2) 然后,确认该模块GPIO配置是否有误或者是否可以关闭该模块。
4.2 以太网配置未生效
(1) 首先,确认内核menuconfig以太网模块配置是否打开,路径及截图如下:menuconfig -> Device Drivers -> Network device support -> Ethernet driver support
(2) 然后,确认board.dts/sys_config.fex中GMAC模块是否打开,board.dts配置示例如下:
gmac0: eth@05020000{ phy-mode = "rgmii"; use_ephy25m = <1>; tx-delay = <7>; rx-delay = <0>; status = "okay"; };
注:
-
status = “okay"代表打开该模块,status = “disabled"代表关闭该模块;
-
确保PHY与GMAC之间物理接口与软件配置相匹配,对于RGMII接口phy-mode配置为"rgmii”,RMII接口phy-mode配置为"rmii”;
use_ephy25m=1代表PHY使用SOC内部EPHY_25M时钟,use_ephy25m=0或者不配置该参数,代表PHY不使用SOC内部EPHY_25M时钟,
需外挂25M晶振为PHY提供时钟;
-
-
你好,我用的100ask-T113-pro开发板, 按照的你的方法解决了IO口冲突,能够找到eth0设备了,但是执行ifconfig eth0 up时提示硬件初始化失败,会是什么原因?
-
一般是PHY没有输出时钟信号给CPU
-
@apollo5520 看了下linux5.4下的board.dts, phy_rst(PE13)脚跟原理图不一致,原理图是PE10,改成PE10后重新编译后运行又有新问题:
-
@chzfmx 看看dts 或引用的 dtsi 文件里面以太网相关配置里面是不是有 PE10了,有冲突
-
@apollo5520
board.dts
sun8iw20p1.dtsi
看了下dts,在sun8iw20p1.dtsi里面找到gmac0的配置里确实有PE10,那在board.dts里应该怎么改呢,我试了把sun8iw20p1.dtsi的PE10删掉,或者把gmac0的status改成disabled,也不行
-
我把phy-rst = <&pio PE 11 GPIO_ACTIVE_HIGH>屏蔽掉了
#ifconfig -a
#ifconfig eth0 up
居然起来了
#udhcp
获取到IP
PC端 ping 开发板通了
开发板ping PC端不通
-
@apollo5520 把PC系统防火墙关了之后,开发板ping PC端也通了
然后突然想起来,我把开发板上PE10和PHY_RSTN的跳帽拔掉了,
这样就是PHY_RSTN脚没有控制,一直拉高的 -
@chzfmx
board.dts 里面引用的是 gmac0_pins_a 和 gmac0_pins_b,应该就跟dtsi文件里的定义没什么关系了,可以把dtsi里面的gmac_pins_a 和 gmac_pins_b 和引用的地方直接删除,另外再找找有没有其他地方用PE10。
修改后最好清理一下编译过程文件,再重新编译 -
@apollo5520 开机的时候进入uboot 输入 fdt print 检查一下gpio复用
-
@chzfmx 大佬,你用网卡芯片是rtl8363nb的吗?我也在用,你用的是哪个板子,能参考一下吗
Copyright © 2024 深圳全志在线有限公司 粤ICP备2021084185号 粤公网安备44030502007680号