ZYNQ+linux网口调试笔记(3)PL-ETH

网络接口摄像机在 ZYNQ 上使用 gigEVision 协议。
步骤1 :调整GEM0 PS侧网口(默认由XilinxBSP配置)。
第二步:调整GEM1 PS侧网口(参见上一篇文档:开发笔记(一))。
第三步:调整PL侧网口(本文介绍)。
步骤4 :验证PL侧网口JumboFrame特性,适配应用层gigEVision协议。
根据“xapp1 08 2 ”,PL侧的PHY支持两种配置:1 000Base-X和SGMII。
这两种配置对应两个不同的PHY引脚接口(连接到MAC)。
我们的 hdf 文件使用 1 000Base-X 配置。
关于网口Linux驱动,我们在官网找到了信息:XilinxWiki-ZynqPLEthernet。
信息很长,我们看一下与我们相关的章节“2 .4 .1 PLEthernetBSPinstallationfor1 000Base-X”。
首先导入FPGA设计伙伴提供的hdf文件:在弹出的图形界面中,输入SubsystemAUTO HardwareSettings——EthernetSettings——PrimaryEthernet,确认可以看到PL侧网络设备axi_ethernet_0,说明上面的hdf文件中包含了必要的网口硬件信息:选择的eth0图片将是上面设备中的网口。
这里我们默认选择ps7 _e。
thernet_0,即使用GEM0作为首选网口。
要启用XilinxAXIEthernet驱动,进入DeviceDrivers--Networkdevicesupport--选择XilinxAXIEthernet(还有XilinxEthernetGEM,这是PS侧网口的驱动),进入Networkingsupport--选择Randomethaddrifunset。
进入DeviceDrivers--Networkdevicesupport--PHYDevicesupportandinfrastruct--enable Drive rsforxilinxPHYs进入~~~~DeviceDrivers--DMAEngineSupport---disable~~~~XilinxAXIDMASEngine~~~(对应配置项名为~~CONFIG_XIlinx~LINX_)节点不正确(&axi_ethernet),导致编译错误。
应将其更改为 &axi_ethernet_0。
注:PL-ETH驱动所在路径:/build/tmp/work-shared/plnx_arm/kernel-source/drive。
ers/net/ethernet/xilinx/xilinx_axienet_main.c 和 xilinx_axienet_mdio.c。
对应的内核配置项是CONFIG_NET_VENDOR_XILINX和CONFIG_XILINX_AXI_EMAC。
thtool和tcpdump(调试用,非必须):然后将生成的BOOT.BIN和image.ub复制到SD卡根目录下,将SD卡插入板子,开机运行。
上电后使用ifconfigeth1 查看网口信息,注意MAC地址与设置一致,ifconfigeth1 1 9 2 .1 6 8 .1 .1 1 up也没有报错。
测试网络访问:pingPC ok。
这说明Linux下eth1 (即PL-ETH)的MAC地址是错误的。
问题描述:开机打印: 注意:MAC地址错误,在驱动中解析出GEM0 MAC地址。
即使er.dtsi中没有写入本地mac-address,GEM0的MAC仍然会被解析。
将system-user.dtsi中的local-mac-address重命名为pl-mac-address,并将驱动程序中解析的字符串相应更改为pl-mac-addr。
ess,可以正确解析: PassingMACaddresstokernelviaDeviceTreeBlobandU-Boot:http://zedboard.org/content/passing-mac-address-kernel-device-tree-blob 通过更改 u-boot 环境变量和设备树为每个板设置唯一的 MAC 地址:https://www.xilinx.com/3 support/environment ess。
U-Boot会覆盖设备树中的pl-eth local-mac-addr字段,会影响Linux启动后网卡的MAC地址;但U-Boot中的ipaddr环境变量不会影响Linux启动后的配置。
phy-mode怎么可能是sgmii官方提供的呢?在 BSP 中,它也是“sgmii”。
具体原因尚不清楚。
@TODO:树中中断号的顺序是什么设备影响功能吗?这是因为这里读取的中断号不是系统映射后的硬件IRQ号。
两者之间不存在线性关系。
:Linux上的eth0和eth1 网络端口的顺序似乎是按phy地址升序排列的。
Xilinxxapp1 08 2 -zynq-eth.pdf(v5 .0)2 01 8 年7 月1 6 日https://www.xilinx.com/support/documentation/application_notes/xapp1 08 2 -zynq-eth.pdfXilinxWiki-ZynqPLEthernet:https://xilinx-wiki.atlassian.net/8 3 3 /Zynq+PL+EthernetXilinxWiki-Linux驱动程序: https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/1 8 8 4 1 8 7 3 /Linux+Driverspaces/A/pages/1 8 8 4 1 7 4 0/Macb+ jumboframe 9 的驱动说明:在M0TU资源中设置,驱动代码的最大长度:在M0TU资源中设置 ping包只能设置为ping1 9 2 .1 6 8 .1 .1 0-s1 4 7 2 https://lore.kernel.org/patchwork/patch/9 3 9 5 3 5 /[完]

全志 t113-i 嵌入式linux 中网口不能协商到 1000m

全志T1 1 3 -i嵌入式Linux系统中网口无法协商到1 000MB的问题通常与内核驱动配置、设备树设置、驱动代码错误或硬件兼容性有关。
需要使用以下步骤进行检查: 检查内核驱动程序配置。
必须确认内核已启用 SMSCPHYs 支持。
通过makekernel_menuconfig进入配置界面。
路径为:设备驱动程序→网络设备支持→PHY设备支持和基础设施→SMSCPHY。
如果不启用该选项,内核无法正确识别PHY芯片的千兆能力,导致协商失败。
此配置是千兆位功能的基本要求。
修正设备树配置PHY模式设置:检查设备树中的PHY接口模式是否为rmii(不是rgmii)。
例如,LAN8 7 2 0芯片需要显式指定phy-mode=“rmii”,因为T1 1 3 -i GMAC控制器通常只支持RMII模式。
时钟配置:确认PHY芯片使用CPU提供的2 5 MHz时钟,并在设备树中添加use_ephy2 5 m=<1>参数。
如果时钟源不稳定或频率不正确(例如误用5 0MHz),PHY将无法正常工作。
管脚复用配置:验证 Pinctrl-0 节点是否正确映射 GMAC 相关管脚(如 eth_rmii),避免管脚冲突导致信号异常。
驱动代码修复:部分SDK版本(如早期Linux 4 .9 内核)的sunxi-gmac.c驱动存在bug:第9 4 7 行强制is_gigabit_capable设置为1 ,导致驱动误判PHY支持千兆。
需要注释掉这行代码并重新编译驱动,避免误读PHY寄存器。
这个问题在全志官方论坛上已经明确解决。
硬件和信号验证 PHY 芯片兼容性:确保 PHY 芯片型号(例如 LAN8 7 2 0A)支持千兆模式,且硬件设计符合规范(例如 RMII 模式需要 5 0Ω 阻抗匹配)。
时钟信号测试:使用示波器检测PHY芯片的时钟输入引脚(如XTAL1 /CLKIN),确保2 5 MHz时钟输出稳定无抖动。
检查连接状态:使用ethtooleth0命令检查当前协商速率和PHY状态。
如果显示“Autonegotiationfailed”或“Linkdown”,则需要进一步检查物理层连接。
总结:优先检查内核配置和设备树设置,确保千兆模式不需要强制开启。
如果问题仍然存在,则需要更正驱动程序代码并检查硬件兼容性。
如果硬件本身不支持千兆(例如使用1 00MPHY芯片时),则需要使用ethtool-seth0speed1 00duplexfulautonegoff命令降速,或者更换支持千兆的PHY芯片(例如RTL8 2 1 1 F)。

Linux 系统中更改 IP 地址的几种方法分享

Linux系统上更改IP地址的方法有很多种,适合不同的场景和用户需求。
以下是几种常用方法的详细说明: 1 . 使用ip 命令临时设置IP 地址。
ip 命令是大多数 Linux 发行版中常用的网络配置工具,适用于快速临时更改 IP 地址。
查看当前IP 地址和网络端口名称: ipa 输出将显示所有网络端口(例如eth0、enp0s3 )及其IP 地址。
您必须记录目标网络端口的名称。
添加新的 IP 地址: sudoipaddradd[ip_address]/[subnetmask]dev[interface] 示例:将 IP1 9 2 .1 6 8 .5 6 .2 1 /2 4 添加到 eth1 : sudoipaddradd1 9 2 .1 6 8 .5 6 .2 1 /2 4 deveth1 此时,网络端口将同时拥有新旧 IP 地址。
如果需要删除旧的IP地址,可以使用: sudoipaddrdel[old_ip]/[subnetmask]dev[interface] 注意:此方法更改的IP地址在系统重启后将失效,适合临时测试或调试。
2 .通过配置文件设置静态IP地址(旧版本的Ubuntu)。
对于低于 1 7 .1 0 的 Ubuntu 版本,您可以通过编辑 /etc/network/interfaces 文件来配置静态 IP 地址。
检查您当前的配置:cat /etc/network/interfaces。
如果文件内容为autoeth0ifaceeth0inetdhcp,则表示IP地址是由DHCP动态分配的。
更改静态IP地址:使用文本编辑器(如nano)更改文件:sudonano/etc/network/interfaces 将内容替换为以下示例(根据实际需要调整参数):autoenp0s3 ifaceenp0s3 inetstaticaddr ess1 9 2 .1 6 8 .5 6 .2 0netmask2 5 5 .2 5 5 .2 5 5 .0gateway1 9 2 .1 6 8 .4 0.3 1 保存并重新启动网络使配置生效的服务: sudosystemctlrestartnetworking.service 提示。
在基于 RedHat 的系统(例如 CentOS)上,您需要编辑 /etc/sysconfig/network-scripts/ifcfg-[interface] 文件。
选项相似,但语法略有不同。
3 、使用Netplan配置静态IP地址(Ubuntu1 7 .1 0及以上版本)。
Netplan是Ubuntu推出的YAML网络配置工具,支持持久静态IP设置。
编辑 Netplan 配置文件:sudonano/etc/netplan/config.yaml。
如果该文件不存在,您可以手动创建它。
动态IP配置通常包含dhcp4 :true。
静态 IP 地址的配置示例如下: network:version:2 renderer:networkdethernets:eth1 :addresses:-1 9 2 .1 6 8 .5 6 .6 6 /2 4 nameservers:addresses:-8 .8 .8 .8 routes:-to:defaultvia:1 0.0.2 .2 addresses:设置静态 IP 地址和子网掩码(例如 1 9 2 .1 6 8 .5 6 .6 6 /2 4 )。
名称服务器:配置 DNS 服务器(例如 Google 8 .8 .8 .8 )。
路由:设置默认网关(例如1 0.0.2 .2 )。
应用配置: 首先检查配置是否正确:sudonetplantry确认后永久生效:sudonetplanapply 优点:配置以YAML格式存储,易于维护,重启后生效。
4 . 通过 GUI(桌面用户)更改 IP 地址。
适合不熟悉命令行的桌面用户(例如Ubuntu GNOME环境)。
打开网络设置:转至 GNOME 控制面板中的设置 > 网络,找到您的目标网络连接(例如 Wi-Fi 或有线连接)。
手动设置 IPv4 :单击连接图标进入设置窗口,选择 IPv4 选项卡,将方法更改为手动,然后输入新的 IP 地址、子网掩码、网关和 DNS 服务器。
检查更改:重新启动网络连接后,通过ipa或GUI检查IP地址是否已更新。
总结临时改动:优先使用ip命令,简单快捷,但重启后不起作用。
永久静态IP地址:旧版本Ubuntu编辑/etc/network/interfaces,新版本使用Netplan; RedHat系统需要修改ifcfg-[interface]文件。
桌面用户:GUI 直观,适合非命令行环境。
根据您的系统版本和要求选择适当的方法,并确保配置设置(例如子网掩码、网关)适合您的网络环境。

linux做主备bond,切换网卡后,MAC地址回发生变化吗?

一般情况下,网口绑定后,在mode1 下,两个网口的MAC地址都变成1 ,并且切换到任意一个网口都不会改变。
这样主备切换后对网络拓扑的影响较小。
负载分担模式mode0下,两个网口各承担一半的负载,并且同时使用,因此它们的mac地址不同。
网口绑定方式一共有7 种。
您可以横向测试和比较。