《海思3521D —— 调试PHY芯片:ifconfig:SIOCGIFFLAGS:No such device》
相关命令使用:
ifconfig -a 检查所有的网卡参数
ifconfig eth0 up 启动eth0
setenv PHY_addr 2 在uboot模式下设置phy地址
setenv mdio_intf rmii 在uboot模式下设置phy得接口
问题:
根据SDK里面的默认配置,编译出来的uImage中。
# ifconfig -a
只看到lo,并没有看到eth0
# ifconfig eth0 up
ifconfig:SIOCGIFFLAGS:No such device
硬件相关:
现在核心板PHY芯片用的是:smsc 8710A81745-A2(使用的是mii)
但是海思SDK默认的PHY芯片是:RTL8211EG
海思网卡相关:
海思网络部分物理上看一般是MAC连接PHY(就是8710)再连接网络变压器再到RJ45 从数据通路上看, MAC是海思芯片内部的模块,通过MDIO来设置PHY(读写PHY的寄存器), 通过MII/RMII/RGMII接口(3531都支持)来和PHY交换网络数据 通常情况下, 海思的linux网络驱动基本都是好的,要修改的一般就是PHY地址和使用MII/RMII/RGMII接口中的哪一种,这个在linux config时应该都可以选 另外, 要注意一下管脚复用, 一般uboot配网络时应该都把复用关系改好了,只要后面不要再改变就好了 3531有两个MAC, 两套PHY接口, 一套MDIO接口(有点像I2C, 可以读写多个PHY)。
可以查看海思的官方手册外围设备驱动指南。里面有相关的一些网卡配置。
修改步骤:
Hi3516A 的GMAC 模块支持PHY 接口模式有rgmii、rmii 和mii,发布包中默认配置为rgmii,若需配置成rmii 或mii,需要在boot 和kernel 下修改配置
1. U-boot 下通过环境变量设置
setenv mdio_intf mii 或者 setenv mdio_intf rmii
setenv PHY_addr 2
或者直接修改源码:
U-boot下可通过更改U-boot配置文件中宏定义HISFV_PHY_U的值来配置不同的PHY地址。Hi3516CV500的U-boot包含以下配置文件。 include/configs/hi3516cv500.h(根据不同板卡不同头文件)
2.Kernel 下通过menuconfig 配置
Device Drivers
[*] Network device support --->
[*] Ethernet driver support --->
<*> hieth gmac family network device support --->
(6) hieth-gmac phy0 interface mode
其中,1 代表mii,5 代表rmii,6 代表rgmii,若管脚复用有变化,请重新配置管脚复用关系。管脚复用也需要注意,这里没有出现管脚复用问题也就是rx和tx的管脚是否配置正确
以上是查阅相关资料得到的信息。
根据这些信息,我进入menuconfig中尝试修改,但是我的menuconfig中并没有hieth-gmac phy0 interface mode和修改地址的选项。
因此cd arch/arm/boot/dts/hi3521d-demb.dts。
将phy-mode =“rgmill”这边并没有修改,因为我手中得PHY本身就是支持千兆。
&mdio{
ethphy: ethernet-phy@1{
reg = <1>;
};
};
修改成
&mdio{
ethphy: ethernet-phy@2{ //这个具体目前不知道修改什么,反正看到1,感觉就要改成2
reg = <2>; //修改phy的地址
};
};
之后编译,启动内核。ifconfig -a就可以看到eth0
ifconfig eth0 up
ifconfig eth0 192.168.100.70
ping 192.168.100.6
就可以ping得通本地。