ZYNQ在Petalinux系统下双网口同网段的实现

文章讲述了在基于ZYNQXC7Z100的Petalinux系统中,如何配置两个共享MDIO接口的网口PHY,解决eth1无法linkup的问题,涉及到内核源码定制、设备树添加以及MDIO驱动补丁的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ZYNQ在Petalinux系统下双网口同网段的实现

1.开发环境

  • 采用了赛灵思zynq xc7z100芯片,外部挂载了两个网口phy芯片(marvell 88e1510),且两个网口phy芯片公用MDIO管脚,bd配置如下:
    在这里插入图片描述
  • 软件环境采用petalinux进行配置和编译。
  • 我的内核源码采用自己下载的源码linux-xlnx-xilinx-v2018.3,在petalinux-config 中需要配置为本地内核源码。

2.问题说明

  • 系统起来后eth0可以正常的link up,可以ping通,eth1无法link up,显示no phy found或者是cannot found device。

3.问题原因

  • 两片phy公用mdio和mdc,在初始化阶段会通过寄存器reg<0/1>来区分两片,并分别进行配置。

4.解决办法

  • 在system-user.dtsi中增加设备树mdio的描述,我的设备如下:
/include/ "system-conf.dtsi"
/ {
	mdio{
		#address-cells = <1>;
		#size-cells = <0>;
		compatible = "cdns,macb-mdio";
		reg = <0xe000b000 0x1000>;
		clocks = <&clkc 30>,<&clkc 30>,<&clkc 13>;
		clock-names = "pclk","hclk","tx_clk";
		ethernet_phy0:ethernet-phy@0{
			compatible="marvell,88E1510";
			/*device_type = "ethernet-phy";*/			
			reg = <0>;
		};
		ethernet_phy1:ethernet-phy@1{
			compatible = "marvell,88E1510";
			/*device_type = "ethernet-phy";*/
			reg = <1>;
		};
	};
};

&gem0{
	status = "okay";
	phy-mode = "rgmii-id";
	local-mac-address = [00 0a 35 00 1e 53];
	phy-handle = <&ethernet_phy0>;
};
&gem1{
	status = "okay";
	phy-mode = "rgmii-id";
	local-mac-address = [00 0a 35 00 1e 54]; 
	phy-handle = <&ethernet_phy1>;
};
  • 由于petalinux系统中,对mido的默认驱动支持不好需要打一个mido的补丁,在源码根目录下执行:patch -p1 <./0001-net-macb-Add-MDIO-driver-for-accessing-multiple-PHY-.patch
  • 补丁的连接Xilinx官方补丁包,注意补丁的版本和自己linux源码匹配,例如linux-xlnx-xilinx-v2018.3,则需要下载Xilinx_Answer_69132_Files_v2018_3_AR69132_Patch.zip这个补丁包。
  • 完成上面几步后重新编译,祝你编译愉快。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值