家具东莞网站建设/沈阳seo建站

   日期:2024-12-26    作者:qq812707 移动:http://ljhr2012.riyuangf.com/mobile/quote/24412.html

1. 开发环境

家具东莞网站建设/沈阳seo建站

Windows SDK 2017.4

Ubuntu Petalinux 2017.4

硬件平台:米联客ZYNQ开发板MIZ7035

2. 开发目标

在ZYNQ上使用网络接口。调通PS侧网口GEM0(本文阐述)。

3. 预备知识

(1) 熟悉ZYNQ网口硬件资源

阅读《xapp1082 - PS and PL Ethernet Performance and Jumbo Frame Support with PL Ethernet.pdf》,在Introduction一节可知,ZYNQ芯片支持三个网口

PS-GEM0:PS侧内置MAC,通过RGMII接口连接到外部PHY芯片。不支持Jumbo Frame。见下图紫线。

PS-GEM1:PS侧内置MAC,通过EMIO接口连接PL侧的PHY(1000BASE-X或SGMII)。不支持Jumbo Frame。见下图蓝线。

PL侧软核MAC,连接PL侧的PHY(1000BASE-X或SGMII)。支持Jumbo Frame。见下图红线。

其中PS-GEM0是独立的,而PS-GEM1与PL侧软MAC共用一个MAC和输出接口,因此二者不能同时使用。

image.png

(2) 我们所使用的网口硬件资源

我们使用的PS-GEM0网口由如下几部分组成:PS侧MAC + PS侧 GMII to RGMII转换器 + PS侧外接PHY芯片(Micrel KSZ9031RN)。因此我们的Linux驱动也需要从这三方面来着手。

4. Linux设备驱动

(1) MAC驱动

PS侧MAC驱动对应的内核驱动

名称:CONFIG_MACB

路径

image.png

驱动源码

drivers/net/ethernet/cadence/macb.c

相关链接

(2) GMII to RGMII转换器的驱动

PS侧 GMII to RGMII转换器驱动对应的内核驱动

名称:CONFIG_XILINX_GMII2RGMII

路径

image.png

驱动源码

drivers/net/phy/xilinx_gmii2rgmii.c

相关链接

image.png

(3) 外部PHY芯片的驱动

PS侧外接PHY芯片(Micrel KSZ9031RN)的内核驱动

名称:CONFIG_MICREL_PHY

路径

image.png

驱动源码

drivers/net/phy/micrel.c

分析此源码,找到关键字PHY_ID_KSZ9031:

image.png

可以看到头文件micre_phy.h里定义了PHY_ID为0x00221620。

相关链接

(4) 驱动适配

我们更改设备树,增加对GMII2RGMII和外部PHY芯片的描述信息

image.png

image.png

编译BOOT.bin下载到板子上运行,启动过程中报出“macb xxxx: Could not attach to phy”。启动后发现找不到网口eth0。

失败。

与硬件工程师沟通,得知外部PHY的地址为4而不是7。据此更改设备树如下

image.png

编译烧写后,发现可以找到PHY设备了,网口也eth0出现了。插拔网线能够正常识别,但在网口up的时候会报出“macb e000b000.ethernet eth0: unable to generate target frequency: 125000000 Hz”,不知为何以及影响如何。

另外的一个问题是无法ping通。

上网查阅资料发现如下信息

(1)《米联《ZYNQ SOC修炼秘籍》网手版20170510(已更1183页未完).pdf》P830

image.png

image.png

以上两点线索都指向同一个问题:我们需要更改Linux网卡驱动源码,根据当前外部PHY协商得到的速率来配置PL GMII2RGMII IP的寄存器0x10,以便GMII2RGMII可以正常工作。

在网上找到了两份补丁,第一份(https://www.xilinx.com/support/answers/67923.html)似乎用于更老的内核版本和petalinux 2016.2,无法对应到我们的内核源码里去,第二份来自上述(2)的网址,似乎是用于较新的内核版本,经小心比对后可以打patch到我们的内核里去。

将第二份补丁打入我们的内核,然后编译烧写,启动发现:无法找到网卡eth0了……shit。

继续排查,追到内核GMII2RGMII驱动(drivers/net/phy/xilinx_gmii2rgmii.c),发现这里其实已经实现了上文提到的补丁,即对GMII2RGMII IP的0x10寄存器进行配置。我们对该寄存器的内容进行打印,发现在插拔网线时该寄存器已经被正确配置了。


特别提示:本信息由相关用户自行提供,真实性未证实,仅供参考。请谨慎采用,风险自负。


举报收藏 0评论 0
0相关评论
相关最新动态
推荐最新动态
点击排行
{
网站首页  |  关于我们  |  联系方式  |  使用协议  |  隐私政策  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报  |  鄂ICP备2020018471号