主芯片:Hi3519AV100
SDK版本:Hi3519AV100R001C02SPC010
开发系统:Ubuntu 16.04
Flash :SPI nor Flash
Hi3519AV100默认采用的是RGMII的千兆网络,客户采用的是GMII,所以需要修改配置
大体分三步:
1、修改配置表
2、修改uboot下头文件
3、修改kernel下DTS(设备树源码)
打开《Hi3519AV100_PINOUT_CN.xlsx》文件
切换到《3.管脚控制寄存器》表,
打开配置表 切换到pinout ,将IOCFG_REG110的写入值由0x71改为0x72
注意:修改头文件后需要单独编译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
注意:修改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
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