Notas de depuración del puerto de red Linux ZYNQ (3) PL-ETH
Cámara con interfaz de red mediante protocolo gigE Vision en ZYNQ.
Paso 1: Ajuste el puerto de red del lado PS GEM0 (Xilinx BSP está configurado de forma predeterminada).
Paso 2: Ajuste el puerto de red lateral PS GEM1 (consulte el documento anterior: Notas de desarrollo (1)).
Paso 3: Ajuste el puerto de red del lado PL (explicado en este artículo).
Paso 4: Verificar las características de Jumbo Frame en el puerto de red del lado PL y adaptar el protocolo gigE Vision en la capa de aplicación.
Según "xapp1082", el PHY en el lado PL admite dos configuraciones: 1000Base-X y SGMII. Estas dos configuraciones corresponden a dos interfaces de pines PHY diferentes (conectadas a MAC). Nuestro archivo hdf utiliza la configuración 1000Base-X.
En cuanto al controlador Linux del puerto de red, encontramos una información en el sitio web oficial: Xilinx Wiki - Zynq PL Ethernet. La información es muy larga, solo veamos el capítulo 2.4.1 Instalación de PL Ethernet BSP para 1000Base-X que es relevante para nosotros.
Primero importe el archivo hdf proporcionado por el colega de diseño de FPGA: p> p>
En la interfaz gráfica emergente, ingrese Configuración de hardware AUTO del subsistema - Configuración de Ethernet - Ethernet principal y confirme que puede ver el dispositivo de red del lado PL axi_ethernet_0, lo que indica que se incluye la información necesaria del hardware del puerto de red. en el archivo hdf:
El puerto de red seleccionado en la imagen de arriba se convertirá en el dispositivo eth0 en Linux. Aquí seleccionamos ps7_ethernet_0 de forma predeterminada, es decir, usamos GEM0 como el puerto de red preferido
.Habilite el controlador Xilinx AXI Ethernet
Ingrese a los controladores de dispositivos - Compatibilidad con dispositivos de red - seleccione Xilinx AXI Ethernet (y Xilinx Ethernet GEM, que es el controlador para el puerto de red del lado PS)
Ingrese a Soporte de red: seleccione Ethaddr aleatorio si no está configurado
Ingrese a Controladores de dispositivo - Soporte de dispositivo de red - Infraestructura y soporte de dispositivo PHY - Habilite controladores para PHY de xilinx
Ingrese ~ ~~~Controladores de dispositivos - Compatibilidad con el motor DMA - Deshabilitar ~~~~Xilinx AXI DMAS Engine~~~ (El elemento de configuración correspondiente se denomina ~~ CONFIG_XILINX_DMA ~~~)
Nota: La referencia a el nodo del árbol de dispositivos en Xilinx Wiki es incorrecto (amp; axi_ethernet), lo que provoca un error de compilación, debe cambiarse a axi_ethernet_0
Nota: La ruta donde se encuentra el controlador PL-ETH: lt;projectgt. ;/build/tmp/work-shared/plnx_arm/kernel-source/drivers/net /ethernet/xilinx/xilinx_axienet_main.c y xilinx_axienet_mdio.c.
Los elementos de configuración del kernel correspondientes son CONFIG_NET_VENDOR_XILINX y CONFIG_XILINX_AXI_EMAC.
Habilite ethtool y tcpdump (para depuración, no es necesario):
Luego copie el BOOT.BIN y el image.ub generados en el directorio raíz de la tarjeta SD e inserte la tarjeta SD. Encienda la tarjeta en la placa, enciéndala y ejecútela.
Después de encender, use ifconfig eth1 para verificar la información del puerto de red y observe que la dirección MAC sea consistente con la configuración, y ifconfig eth1 192.168.1.11 up no informa un error.
Pruebe el acceso a la red: ping a la PC está bien. Indica que el puerto de red está funcionando normalmente.
La dirección MAC de eth1 (PL-ETH) en Linux es incorrecta
Descripción del problema:
Impresión al inicio:
Nota :
La dirección MAC es incorrecta. Lo que el controlador analizó es la dirección MAC de GEM0.
La prueba encontró que incluso si la dirección-mac-local no está escrita en system-user.dtsi, la MAC de GEM0 aún se analiza.
Cambie el nombre de la dirección-mac-local en system-user.dtsi a pl-mac-address y cambie la cadena analizada en el controlador a pl-mac-address en consecuencia, y funcionará correctamente. :
Pasar la dirección MAC al kernel a través de Device Tree Blob y U-Boot:
/support/answers/53476.html
En U-Boot El entorno La variable etaddr sobrescribirá el campo local-mac-addr de pl-eth en el árbol de dispositivos, afectando así la dirección MAC de la tarjeta de red después de iniciar Linux;
Sin embargo, la variable de entorno ipaddr en U- El arranque no se realizará. La configuración después del inicio de Linux no tiene ningún impacto. Porque no hay ninguna configuración sobre la dirección IP en el árbol de dispositivos.
¿Cómo puede ser phy-mode sgmii? Revisé el BSP oficial y también era "sgmii". Significa que esto no es ningún problema. La razón específica no está clara.
@TODO: ¿Cómo afecta el orden de los números de interrupción en el árbol de dispositivos a la funcionalidad?
¿Por qué se lee mal el número IRQ? Esto se debe a que lo que se lee aquí no es el número de interrupción del hardware, sino el número IRQ del software después del mapeo del sistema. No existe una relación lineal entre los dos.
Preguntas sobre los números de interrupción:
El orden de los puertos de red eth0 y eth1 en Linux parece estar organizado según la dirección phy, de menor a mayor.
Xilinx xapp1082-zynq-eth.pdf (v5.0) 16 de julio de 2018
/support/documentation/application_notes/xapp1082-zynq-eth.pdf
Wiki Xilinx - Zynq PL Ethernet:
/wiki/spaces/A/pages/18841633/Zynq PL Ethernet
Wiki Xilinx - Controladores Linux:
/wiki/spaces/A/pages/18841873/Controladores Linux
Xilinx Wiki - Controladores Linux - Controlador Macb:
/wiki/spaces/A/pages/18841740/Controlador Macb
Xilinx Wiki - Rendimiento de Zynq Ethernet:
/wiki/spaces/A/pages/18841743/Zynq Ethernet Performance
Encuentre la definición de MTU de trama Jumbo, la El valor actual es 9000. ¿Se puede aumentar?
Descripción de la trama gigante en el código fuente del controlador:
Configure la MTU en 9000 y descubrió que la longitud máxima del paquete de ping solo se puede configurar en ping 192.168.1.10 -s 1472
https://lore.kernel.org/patchwork/patch/939535/
Fin