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

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这个补丁包。
  • 完成上面几步后重新编译,祝你编译愉快。
  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: Zynq双核指的是Zynq系统中的两个处理器核心,一个是Arm Cortex-A9处理器核,另一个是可编程逻辑(FPGA)。Petalinux是一个基于Linux的操作系统,可用于Zynq系统的开发。裸机指的是没有操作系统的程序,只在硬件上运行。 在Zynq双核系统中,Petalinux和裸机可以通过多种方式通信: 1. 通过寄存器:Petalinux可以读取和写入FPGA寄存器,从而与裸机进行通信。 2. 通过内存映射:Petalinux和裸机可以共享相同的物理内存区域,从而进行通信。 3. 通过中断:Petalinux可以通过发送中断请求给裸机,从而与裸机进行通信。 4. 通过串口:Petalinux和裸机可以通过串口进行通信,Petalinux可以发送数据给裸机,裸机可以通过串口返回数据给Petalinux。 总的来说,Petalinux和裸机的通信方式取决于具体的应用场景和系统架构。 ### 回答2: Zynq是一款集成了ARM处理器和可编程逻辑的片上系统,使用Petalinux实现对该芯片的Linux操作系统进行定制和开发。在Zynq双核系统中,可以使用Petalinux和裸机方式进行通信。 要在Petalinux和裸机之间进行通信,有多种方法可以选择。以下是一种常用的方法: 1. 通过共享内存(Shared Memory)进行通信:在Petalinux中,可以使用mmap函数将一块物理内存映射到用户空间,然后将这块内存的地址传递给裸机程序。裸机程序可以通过访问该地址来读写共享内存。这种方式可以实现高速的数据传输,但需要保证共享内存的同步和互斥机制,以避免数据冲突和竞争条件。 2. 通过中断(Interrupt)进行通信:Petalinux可以通过中断控制器向裸机程序发送中断请求。裸机程序需要编写中断服务程序来处理中断,并进行相应的数据处理或响应。通过中断方式可以实现异步的通信,但需要在裸机和Petalinux中进行中断控制和数据传输的协议设计。 3. 通过设备驱动程序进行通信:在Petalinux中编写设备驱动程序,将裸机中需要访问的硬件资源封装成设备节点,然后通过设备文件进行读写操作。裸机程序可以通过访问设备文件来与Petalinux进行通信。这种方式需要在Petalinux中编写设备驱动程序,并实现对硬件资源的访问和控制。 无论使用哪种通信方式,都需要在Petalinux和裸机程序中进行相应的配置和编程。同时,还需要考虑通信的同步、互斥和错误处理等方面,以保证通信的可靠性和稳定性。 ### 回答3: Zynq是一款由Xilinx开发的可编程SoC(系统级芯片),它集成了双核处理器和可编程逻辑电路,并支持多种外设接口和通信协议。Petalinux是一种基于Linux系统的嵌入式开发平台,可以在Zynq芯片上运行。 要实现Zynq双核与裸机之间的通信,可以通过以下几种方式: 1. 共享内存:在Petalinux系统中,可以通过在内存中定义一块共享区域,使双核处理器和裸机都能够访问此共享内存。双核处理器可以通过操作系统提供的共享内存接口进行读写,而裸机则需要通过硬件访问控制器来操作共享内存。 2. 中断:通过设置中断控制器,在Petalinux中,双核处理器和裸机都可以注册相应的中断处理函数。当需要通信的一方发生事件时,通过触发中断来通知另一方。中断处理函数中可以进行数据的读写操作。 3. 外设寄存器:Zynq芯片上的可编程逻辑部分可以通过外设寄存器与双核处理器和裸机进行通信。Petalinux系统中,双核处理器可以通过内核驱动来访问外设寄存器,而裸机则可以直接通过寄存器操作指令来读写外设寄存器。 需要注意的是,双核处理器和裸机之间的通信需要进行同步和互斥操作,以避免数据冲突和竞争条件的发生。在设计通信协议时,需要考虑数据格式、通信速率、错误处理等方面的问题,并进行相应的数据校验和纠错处理。 总的来说,Zynq双核与裸机之间的通信可以通过共享内存、中断和外设寄存器等方式实现。具体的实现方式要根据具体的应用场景和需求来选择和设计。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值