Deshabilitar la negociación automática de PHY durante el proceso de arranque de Linux en Xilinx

9

Estoy tratando de instalar Linux en una placa FPGA. El sabor de Linux es petalinux para chips Xilinx FPGA.

El Xilinx SoC actual tiene un procesador Cortex A9 y una lógica de hardware programable, es decir, FPGA. Capturé el mensaje de arranque en la terminal:

.....................U-boot time.......................partition.......................................................

[Fri Dec 27 15:18:53.108 2013] Copying Linux from SD to RAM...
[Fri Dec 27 15:18:53.129 2013] Device: SDHCI
[Fri Dec 27 15:18:53.129 2013] Manufacturer ID: 2
[Fri Dec 27 15:18:53.129 2013] OEM: 544d
[Fri Dec 27 15:18:53.129 2013] Name: SA04G 
[Fri Dec 27 15:18:53.129 2013] Tran Speed: 25000000
[Fri Dec 27 15:18:53.129 2013] Rd Block Len: 512
[Fri Dec 27 15:18:53.129 2013] SD version 1.10
[Fri Dec 27 15:18:53.129 2013] High Capacity: Yes
[Fri Dec 27 15:18:53.129 2013] Capacity: 3951034368
[Fri Dec 27 15:18:53.129 2013] Bus Width: 1-bit
[Fri Dec 27 15:18:53.129 2013] reading zImage
[Fri Dec 27 15:18:59.367 2013] 
[Fri Dec 27 15:18:59.367 2013] 2304852 bytes read
[Fri Dec 27 15:18:59.381 2013] reading devicetree.dtb
[Fri Dec 27 15:18:59.475 2013] 
[Fri Dec 27 15:18:59.475 2013] 2709 bytes read
[Fri Dec 27 15:18:59.491 2013] reading ramdisk8M.image.gz
[Fri Dec 27 15:19:06.121 2013] 
[Fri Dec 27 15:19:06.121 2013] 2501584 bytes read
[Fri Dec 27 15:19:06.144 2013] Trying to set up GEM link...
[Fri Dec 27 15:19:06.144 2013] Resetting PHY...
[Fri Dec 27 15:19:06.144 2013] 
[Fri Dec 27 15:19:06.144 2013] PHY reset complete.
[Fri Dec 27 15:19:06.144 2013] Waiting for PHY to complete auto-negotiation...
[Fri Dec 27 15:19:18.176 2013] ***Error: Auto-negotiation stalled...
[Fri Dec 27 15:19:18.176 2013] ping failed; host 10.10.70.101 is not alive

Estoy específicamente interesado en estas líneas:

[Fri Dec 27 15:19:06.144 2013] PHY reset complete.
[Fri Dec 27 15:19:06.144 2013] Waiting for PHY to complete auto-negotiation...
[Fri Dec 27 15:19:18.176 2013] ***Error: Auto-negotiation stalled...
[Fri Dec 27 15:19:18.176 2013] ping failed; host 10.10.70.101 is not alive

Pregunta # 1: ¿Supongo que estas líneas son para TCP / IP?

Como se puede ver, aquí se desperdician unos 12 segundos. La cuestión es que necesito un sistema de arranque rápido y no necesitaría TCP / IP en absoluto en la aplicación final.

El Linux que instalé hasta ahora estaba usando una imagen preconstruida proporcionada por Xilinx. Ahora, para deshacerme de la parte TCP / IP (ya que no la necesito y si no la tengo en el sistema operativo, estos 12 segundos podrían salvarse, según tengo entendido), estoy planeando construir mi propio núcleo de Linux.

Así que descargué el código fuente de PetaLinux, suponiendo que tendré que compilarlo desde mi sistema host.

Pregunta n. ° 2: Pero quiero saber cómo puedo excluir la parte TCP / IP de la fuente del sistema operativo, de modo que cuando el sistema operativo se inicie nunca ejecute esas rutinas TCP / IP que consumen mucho tiempo.

Pregunta # 3: Tampoco estoy seguro de si en la imagen preconstruida ¿podemos tener alguna opción para deshabilitar la parte TCP / IP?

Mi objetivo es deshacerme de estas líneas durante el proceso de arranque:

[Fri Dec 27 15:19:06.144 2013] PHY reset complete.
[Fri Dec 27 15:19:06.144 2013] Waiting for PHY to complete auto-negotiation...
[Fri Dec 27 15:19:18.176 2013] ***Error: Auto-negotiation stalled...
[Fri Dec 27 15:19:18.176 2013] ping failed; host 10.10.70.101 is not alive
usuario2799508
fuente
Paso 1: descubre qué sistema de inicio se está utilizando. Paso 2: hurga en sus archivos de configuración.
strugee
¿Tienes la fuente del núcleo? ¿Cómo lo estás arrancando a partir de ahora? ¿Hay un árbol de dispositivos involucrado?
Stark07
Ese mensaje es de U-Boot, Linux aún no se ha iniciado en ese momento.
Gilles 'SO- deja de ser malvado'
quizás digi.com/support/kbase/kbaseresultdetl?id=3143
Gilles 'SO- deja de ser malvado'

Respuestas:

2

Pregunta 2: Creo que esas impresiones son de uboot. Si es así, creo que tiene definido "CONFIG_PHY_RESET". ¿Podría verificar su configuración de uboot para eso? Para deshabilitar esta función, es probable que tenga que verificar su configuración, generalmente algo similar a: ./include/configs/YourBoardConfigFile.h, es lo que uboot usaría.

Una de las otras respuestas llamó a usar Kconfig: revisé el menúconfig de mi uboot y esa opción no estaba presente.

Si observa el archivo fuente uboot: ./drivers/net/4xx_enet.c , busque "CONFIG_PHY_RESET", parece que el código se está ejecutando:

#if defined(CONFIG_PHY_RESET)
/*
 * Reset the phy, only if its the first time through
 * otherwise, just check the speeds & feeds
 */
if (hw_p->first_init == 0) {

Poco después, puede ver el texto "Esperando a que se complete la negociación automática de PHY para completarlo", por lo que debería estar justo donde está su problema (o cerca de él; había algunos otros archivos que tenían una inicialización similar dependiendo de la arquitectura).

Por alguna razón, el archivo README en la fuente uboot de nivel superior invoca CONFIG_PHY_RESET_DELAY, pero no CONFIG_PHY_RESET, por lo que es posible que lo haya perdido allí.

Pregunta 3: Si el problema es CONFIG_PHY_RESET, entonces esto debería configurarse en tiempo de compilación. Debería poder descargar la fuente uBoot de Xilinx para su placa.

No estoy seguro de por qué es necesario el reinicio, por lo que realmente no respondí la pregunta 1 de los suyos, pero parece que algunos PHY tienen diferentes requisitos para reiniciarse después de la inicialización e incluso algunos necesitan una cierta cantidad de retraso.

GéminisDakota
fuente
0

Al parecer, ese sistema quiere hacer ping a la dirección IP 10.10.70.101, probablemente porque está comprobando su propia dirección IP o su puerta de enlace. Esta parte significa que el sistema está configurado con una interfaz de red con esa dirección IP o similar.

La pausa ocurre porque en el proceso de configuración de IP, carga el controlador de red Ethernet, que realiza la negociación automática PHY, esencialmente trata de ver qué está conectado a él. Como nada está conectado, se agota el tiempo de espera.

Probablemente debería buscar donde esta distribución de Linux mantenga la configuración de la interfaz de red. Una búsqueda rápida en Google indica que este U-Boot tiene la variable ipaddrsegún http://www.denx.de/wiki/view/DULG/UBootEnvVariables

Josip Rodin
fuente
-1

Use Kconfigo sus análogos gráficos para deshabilitar la conexión de red al compilar el núcleo. Ejemplos: mira esto .

Boris Burkov
fuente
2
No solo publique enlaces, incluya tanto contenido relevante directamente en este sitio. Si el sitio al que está enlazando desaparece, su respuesta deja de tener valor.
slm