ZYNQ+linux网口调试笔记(1)PS-GEM0
转载原文:https://www.jianshu.com/p/a4e25e8b2f5e

  1. 开发环境
    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和输出接口,因此二者不能同时使用。


(2) 我们所使用的网口硬件资源
我们使用的PS-GEM0网口由如下几部分组成:PS侧MAC + PS侧 GMII to RGMII转换器 + PS侧外接PHY芯片(Micrel KSZ9031RN)。因此我们的Linux驱动也需要从这三方面来着手。
4. Linux设备驱动
(1) MAC驱动
PS侧MAC驱动对应的内核驱动:
名称:CONFIG_MACB
路径:

驱动源码:
drivers/net/ethernet/cadence/macb.c
相关链接:
https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18841740/Macb+Driver
https://github.com/Xilinx/linux-xlnx/blob/master/Documentation/devicetree/bindings/net/ethernet.txt
https://lore.kernel.org/patchwork/patch/690605/
(2) GMII to RGMII转换器的驱动
PS侧 GMII to RGMII转换器驱动对应的内核驱动:
名称:CONFIG_XILINX_GMII2RGMII
路径:

驱动源码:
drivers/net/phy/xilinx_gmii2rgmii.c
相关链接:
https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18841740/Macb+Driver#MacbDriver-XilinxconverterandPHYDT
https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18842246/Xilinx+GMII2RGMII+convertor
https://github.com/Xilinx/linux-xlnx/blob/master/Documentation/devicetree/bindings/net/xilinx_gmii2rgmii.txt
https://forums.xilinx.com/t5/Embedded-Linux/Petalinux-2017-2-dts-node-for-GMII-to-RGMII-ip/td-p/807905

(3) 外部PHY芯片的驱动
PS侧外接PHY芯片(Micrel KSZ9031RN)的内核驱动:
名称:CONFIG_MICREL_PHY
路径:

驱动源码:
drivers/net/phy/micrel.c
分析此源码,找到关键字PHY_ID_KSZ9031:

可以看到头文件micre_phy.h里定义了PHY_ID为0x00221620。
相关链接:
https://github.com/Xilinx/linux-xlnx/blob/master/Documentation/devicetree/bindings/net/phy.txt
https://github.com/Xilinx/linux-xlnx/blob/master/Documentation/devicetree/bindings/net/micrel.txt
https://github.com/Xilinx/linux-xlnx/blob/master/Documentation/devicetree/bindings/net/micrel-ksz90x1.txt
https://blog.csdn.net/qq_15270979/article/details/78016173
(4) 驱动适配
我们更改设备树,增加对GMII2RGMII和外部PHY芯片的描述信息:


编译BOOT.bin下载到板子上运行,启动过程中报出“macb xxxx: Could not attach to phy”。启动后发现找不到网口eth0。
失败。
与硬件工程师沟通,得知外部PHY的地址为4而不是7。据此更改设备树如下:


编译烧写后,发现可以找到PHY设备了,网口也eth0出现了。插拔网线能够正常识别,但在网口up的时候会报出“macb e000b000.ethernet eth0: unable to generate target frequency: 125000000 Hz”,不知为何以及影响如何。
另外的一个问题是无法ping通。
上网查阅资料发现如下信息:
(1)《米联《ZYNQ SOC修炼秘籍》网手版20170510(已更1183页未完).pdf》P830:

(2)https://lore.kernel.org/patchwork/patch/690605/

以上两点线索都指向同一个问题:我们需要更改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寄存器进行配置。我们对该寄存器的内容进行打印,发现在插拔网线时该寄存器已经被正确配置了。

转载:ZYNQ+linux网口调试笔记(1)PS-GEM0相关推荐

  1. zynq linux ip配置,ZYNQ+linux网口调试笔记(2)PS-GEM1

    1. 开发环境 Windows SDK 2017.4 Ubuntu Petalinux 2017.4 硬件平台:米联客ZYNQ开发板MIZ7035 2. 开发目标 在ZYNQ上使用gigE Visio ...

  2. zynq linux如何使用pl ip,ZYNQ+linux网口调试笔记(3)PL-ETH

    1. 开发环境 Windows SDK 2017.4 Ubuntu Petalinux 2017.4 硬件平台:米联客ZYNQ开发板MIZ7035 2. 开发目标 在ZYNQ上使用gigE Visio ...

  3. linux内核 can总线,Linux Canbus调试笔记

    http://blog.csdn.net/flydream0/article/details/8161418 CAN总线在嵌入式Linux下驱动程序的实现 http://www.21ic.com/ap ...

  4. 【转载】Linux中断处理学习笔记

    1.Linux中断的注册与释放: 在<linux/interrupt.h>, , 实现中断注册接口: int request_irq(unsigned int irq, irqreturn ...

  5. zynq linux网口不通,已解决: ZYNQ 7035以太网口无法连通 - Community Forums

    网口使用emio连接mii phy芯片,lwIP Echo Server测试例子可以运行,u-boot,linux无法连ping通,能识别到芯片: 我该如何配置u-boot与内核? 关键打印信息: U ...

  6. TI AM5728 CPSW网口调试笔记

    1.调试过程遇到千兆网口起不来的问题,后来发现是phy地址不对应导致: 2.百兆网口起不来,而且整个主板有4个网口,一直显示只有两个网口硬件.目前还在排查原因. 对于设备数的语法网上已经有很多了,但是 ...

  7. zynq linux找不到flash,Zynq—Linux移植学习笔记(十八):Zynq下NOR_FLASH挂载文件系统...

    1. 背景介绍 板子上的zynq通过emc外接一块nor flash,地址分配如下: Nor flash的起始地址为0x80000000.当zynq上运行Linux后可以通过对该地址起始的区域进行擦除 ...

  8. zc706开发板的linux移植,Zynq—Linux移植学习笔记(十)

    在zynq开发板zc706上,网络通路由下面三个设备组成: 其中zynq负责对phy进行配置,当zynq上的网络控制器以及phy完成正确配置时,能够看到RJ45上面的黄灯亮,此时表明链路已经通了.如果 ...

  9. rc522 linux 驱动程序,RC 522模块在LINUX平台调试笔记

    硬件平台: 1主控:SMDK Exynos4412 POP S5M8767A 2 RFID模块:君盾集团提供的RC522模块 3通信接口:SPI 软件平台:Android ICS & kern ...

最新文章

  1. java file_Java IO: File
  2. java商城管理系统ssm_基于SSM+MYSQL的一个小型商城网站后台管理系统
  3. Oracle ——概述 Oracle 5 步调优方法论
  4. OpenCV学习笔记(十四):重映射:remap( )
  5. arraylist线程安全吗_Java的线程安全、单例模式、JVM内存结构等知识梳理
  6. Coremail邮件系统存在配置信息泄露漏洞(CNVD-2019-16798)
  7. 软件测试适合女生学吗?
  8. leetcode python3 简单题112. Path Sum
  9. 《Java深入解析》阅读笔记二(运算符与表达式)
  10. 安装ECShop报 Non-static method cls_image::gd_version() should not be called statically 解决方案
  11. 数据之路 - Python爬虫 - 正则表达式
  12. yum安装时出现:Cannot retrieve metalink for repository: epel. Please verify its path and try again
  13. C语言经典游戏开发,零基础也能打造微信飞机大战
  14. Zabbix运维监控工具
  15. ansys 命令流基础—— 点线面体基本操作
  16. AI:人工智能的本质与未来
  17. 01 ,线性代数 :二阶行列式,三阶行列式,排列,阶乘,逆序,逆序数,奇排列,偶排列,对换 :
  18. CCF CSP 公共钥匙盒
  19. 物联网发展方向(复制来的)
  20. 京东抢购工具 监控工具 秒杀工具

热门文章

  1. mysql 递归查找部门下面的所有被这个部门管理的部门(mysql 递归查找节点的所有子节点)
  2. 阿古斯机器人_炉石传说:圣盾巨龙后期无敌?三种快速转型打法助你稳抓圣盾流...
  3. 如何能读取串口硬盘序列号(出厂唯一的序列号)
  4. CD20靶向药物|适应症|市场销售-上市药品前景分析
  5. 对讲机在未来会有更好的发展吗?
  6. 理科男生学金融好还是计算机,理科男生:选择这7大类专业靠谱,毕业找工作很容易...
  7. 基于springboot的智慧学习(在线学习考试)系统
  8. r5 5600g用什么主板 r5 5600g配什么显卡
  9. 机器学习算法的透明度是一把双刃剑,该如何应对?
  10. 如何在AI 中制作立体字母