Hi3519AV100 调试系列 ——网络RGMII改为RMII

主芯片:Hi3519AV100

SDK版本:Hi3519AV100R001C02SPC010

开发系统:Ubuntu 16.04

Flash :SPI nor Flash

Hi3519AV100默认采用的是RGMII的千兆网络,客户采用的是GMII,所以需要修改配置

大体分三步:

1、修改配置表

2、修改uboot下头文件

3、修改kernel下DTS(设备树源码)

 

配置表修改

打开《Hi3519AV100_PINOUT_CN.xlsx》文件

切换到《3.管脚控制寄存器》表,

Hi3519AV100 调试系列 ——网络RGMII改为RMII_第1张图片

打开配置表 切换到pinout ,将IOCFG_REG110的写入值由0x71改为0x72

Hi3519AV100 调试系列 ——网络RGMII改为RMII_第2张图片

 

 

UBoot部分

注意:修改头文件后需要单独编译uboot,如果采用osdrv文件下Makefile文件会把修改的头文件删除重新解压获取

位置:

/Hi3519AV100_SDK_V2.0.1.0/osdrv/opensource/uboot/u-boot-2016.11/include/configs/hi3519av100.h

 

76 /*Network configuration*/
 77 #define CONFIG_PHY_GIGE
 78 #ifdef CONFIG_NET_HIGMACV300
 79         #define CONFIG_GMAC_NUMS        1
 80         #define CONFIG_HIGMAC_PHY0_ADDR     1
 81         #define CONFIG_HIGMAC_PHY0_INTERFACE_MODE       2 /* rgmii 2, rmii 1*/
 82         #define CONFIG_HIGMAC_DESC_4_WORD
 83         #define CONFIG_SYS_FAULT_ECHO_LINK_DOWN 1
 84 #endif

 

 

kernel

注意:修改dts文件后需要单独编译 kernel

位置:

Hi3519AV100_SDK_V2.0.1.0/osdrv/opensource/kernel/linux-4.9.y-smp/arch/arm/boot/dts

hi3519av100-smp.dts

167 &mdio {
168         ethphy: ethernet-phy@1 {
169                 reg = <1>;
170         };
171 };
172
173 &higmac {
174         phy-handle = <ðphy>;
175         phy-mode = "rgmii";
176 };

 

hi3519av100-smp-flash.dts

 

158 &mdio {
159         ethphy: ethernet-phy@1 {
160                 reg = <1>;
161         };
162 };
163
164 &higmac {
165         phy-handle = <ðphy>;
166         phy-mode = "rgmii";
167 };
168

 

烧录后进入系统 配置变量(根据实际局域网信息进行调整)

ifconfig eth0 192.168.0.176

route add default gw 192.168.0.1

ping 192.168.0.223 -c3

 

 

Hi3519AV100 调试系列 ——网络RGMII改为RMII_第3张图片

 

devtmpfs: mounted
Freeing unused kernel memory: 1024K (c0800000 - c0900000)

            _ _ _ _ _ _ _ _ _ _ _ _
            \  _  _   _  _ _ ___
            / /__/ \ |_/
           / __   /  -  _ ___
          / /  / /  / /
  _ _ _ _/ /  /  \_/  \_ ______
___________\___\__________________

[RCS]: /etc/init.d/S00devs
mknod: /dev/console: File exists
mknod: /dev/ttyAMA0: File exists
mknod: /dev/null: File exists
[RCS]: /etc/init.d/S01udev
udev[83]: starting version 167
[RCS]: /etc/init.d/S80network
Auto login as root ...
login[118]: root login on 'ttyS000'
Welcome to HiLinux.
None of nfsroot found in cmdline.
~ # ifconfig eth0 192.168.0.176
IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready
~ # hi_gmac_v200 40e0000.ethernet eth0: Link is Up - 100Mbps/Full - flow control rx/tx
IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready

~ # route add default gw 192.168.0.1
~ # ping 192.168.0.223 -c3
PING 192.168.0.223 (192.168.0.223): 56 data bytes
64 bytes from 192.168.0.223: seq=0 ttl=128 time=1.727 ms
64 bytes from 192.168.0.223: seq=1 ttl=128 time=0.867 ms
64 bytes from 192.168.0.223: seq=2 ttl=128 time=0.869 ms

--- 192.168.0.223 ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 0.867/1.154/1.727 ms

 

 

 

扩展知识点:

1、DTS

设备树(Device Tree)是描述计算机的特定硬件设备信息的数据结构,以便于操作系统的内核可以管理和使用这些硬件,包括CPU或CPU,内存,总线和其他一些外设。通过设备树对硬件信息的抽象,驱动代码只要负责处理逻辑,而关于设备的具体信息存放到设备树文件中,这样,如果只是硬件接口信息的变化而没有驱动逻辑的变化,开发者只需要修改设备树文件信息,不需要改写驱动代码。硬件的相应信息都会写在.dts为后缀的文件中,每一款硬件可以单独写一份xxxx.dts,一般在Linux源码中存在大量的dts文件,对于arm架构可以在arch/arm/boot/dts找到相应的dts。

关于DTS更多信息:Linux设备驱动开发详解4.0内核
petazzoni-device-tree-dummies
Kernel_Source_Documentation

 

 

 

 

你可能感兴趣的:(海思开发)