ubuntu 网卡双网口 配置_ZCU102板卡下的基于lwip的双网口开发

2023-05-16

先查看zcu102的硬件板卡,发现zcu102开发板上只有一个rj45且与之连接的是gem3,对于zcu102的硬件板卡来说如果想采用PS端其他的gem作为mac(当然也可以使用PL端的mac)来实现另一个网口就只能采用ps+emio的办法,也就是gem0+sfp通过sfp转rj45的模块(这个模块选择了思科的转接模块)来实现另一个网口。要实现SFP,需要设置跳线J16如下图所示:

1 硬件配置

首先BD要求如下图:其中选择gem0和gem3作为双mac,其中gem0是PS+EMIO的方式实现千M网口。由于SFP的GTH的参考时钟要求为125Mhz,首先要设置si570的输出为125Mhz(默认时钟是156.25Mhz),对于zcu102的板卡可通过参考xilinx文档XTP433来设置si570的输出。

2 软件部分修改

生成bit文件后打开SDK,要实现双网口有两种办法,一种是在单核实现,一种是双核实现,这里选择双核,因为发现要在单核上实现要修改的地方太多了……

新建的工程后默认的bsp是适用于GEM0的,要想在GME3上实现需进行下面的操作:

修改app src文件platform_config.h里的PLATFORM_EMAC_BASEADDR 定义,比如,

#define PLATFORM_EMAC_BASEADDR XPAR_XEMACPS_1_BASEADDR在GEM3 bsp的xparameters.h里面注销XPAR_GIGE_PCS_PMA_1000BASEX_CORE_PRESENT,然后右键点击app,选择“clean project”。

/******************************************************************/

/* Definitions related to PCS PMA PL IP*/
//#define XPAR_GIGE_PCS_PMA_1000BASEX_CORE_PRESENT 0
//#define XPAR_PCSPMA_1000BASEX_PHYADDR 0

/******************************************************************/

/* Definitions related to PCS PMA PL IP*/
//#define XPAR_GIGE_PCS_PMA_1000BASEX_CORE_PRESENT 0
//#define XPAR_PCSPMA_1000BASEX_PHYADDR 0

/******************************************************************/

除此之外还要修改mac地址和IP地址。

知道了上述的改动,那么新建两个standalone的工程,分别使用apu和rpu(都采用apu的core因为lwip的中断机制,导致要修改中断才能实现apu的双核),修改ld中的ddr的程序占用地址,保证两个cpu不重叠即可。采用tcp_lwip_perf_server的例子,经过修改分别来实现基于GEM0和GEM3的网口程序。下面采用APU的双核来实现双网口。最开始实现时发现sdk生成的例子cpu0启动后再启动cpu1会导致cpu0不正常,通过debug发现主要原因在于中断。lwip的中断包括定时器中断和PS的mac中断,在例子里的实现中集中在platform_zynqmp.c这个文件里,需要修改platform_setup_interrupts这个函数,例子里是将所有的SPI中断都绑定在了cpu0上,在cpu1启动时重复初始化就会把cpu0上的中断给覆盖掉,导致cpu0不正常。因此将这个函数里XScuGic_DeviceInitialize(INTC_DEVICE_ID)删掉,按照中断的处理程序的流程将定时器和gem中断建立起来,其中在cpu0我使用了TTC0和gem0,在cpu1使用TTC0和gem3,经过这样修改后,两个网卡能同时工作,需要用到的函数有:

Xil_ExceptionInit;//初始化异常处理系统

XScuGic_LookupConfig;//初始化中断处理控制器

XScuGic_CfgInitialize(这个函数绑定了cpu); //初始化中断处理控制器

Xil_ExceptionRegisterHandler;//注册异常回调函数,中断类型的异常

XScuGic_Connect;//设置连接定时器中断

XScuGic_SetPriTrigTypeByDistAddr;//设置硬中断优先级和中断类型

XScuGic_Enable。//使能中断

经过修改这样就可以在SDK里选择debug模式进行调试实现双网口。

3 固化到SD卡

这里参考zcu102_13_PS多核协同工作_bt_的博客-CSDN博客这篇文章的设置方法即可。

参考文档:

xapp1305

ug1182

ug1209

zcu102_13_PS多核协同工作_bt_的博客-CSDN博客

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ubuntu 网卡双网口 配置_ZCU102板卡下的基于lwip的双网口开发 的相关文章

随机推荐