Disabilitazione della negoziazione automatica PHY durante il processo di avvio di Linux su Xilinx


9

Sto cercando di installare Linux su una scheda FPGA. Il sapore di Linux è petalinux per i chip FPGA Xilinx.

L'attuale SoC Xilinx ha un processore Cortex A9 e una logica hardware programmabile, ad esempio FPGA. Ho catturato il messaggio di avvio sul terminale:

.....................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

Sono particolarmente interessato a queste righe:

[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

Domanda n. 1: Immagino che queste righe siano per TCP / IP?

Come si può vedere, qui vengono sprecati circa 12 secondi. Il fatto è che ho bisogno di un sistema di avvio rapido e non avrei bisogno del TCP / IP nell'applicazione finale.

Il Linux che ho installato finora utilizzava un'immagine pre-costruita fornita da Xilinx. Ora per sbarazzarsi della parte TCP / IP (poiché non ne ho bisogno e se non l'ho nel sistema operativo, questi 12 secondi potrebbero essere salvati - questa è la mia comprensione), sto pianificando di costruire il mio proprio kernel Linux.

Quindi ho scaricato il codice sorgente di per PetaLinux, supponendo che dovrò compilarlo dal mio sistema host.

Domanda n. 2: Ma voglio sapere come posso escludere la parte TCP / IP dalla fonte del sistema operativo, in modo che quando il sistema operativo si avvia non eseguirà mai quelle routine TCP / IP che richiedono tempo?

Domanda n. 3: Non sono inoltre sicuro se nell'immagine pre-costruita possiamo avere qualche opzione per disabilitare la parte TCP / IP?

Il mio obiettivo è quello di sbarazzarmi di queste linee durante il processo di avvio:

[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

passaggio 1: scopri quale sistema init viene utilizzato. passaggio 2: sfogliare i file di configurazione.
Strugee,

Hai il sorgente del kernel? Come lo stai avviando adesso? È coinvolto un albero dei dispositivi?
Stark07

Quel messaggio proviene da U-Boot, Linux non si è ancora avviato a quel punto.
Gilles 'SO- smetti di essere malvagio' il

Risposte:


2

Domanda 2: credo che quelle stampe provengano da Uboot. In tal caso, credo che tu abbia definito "CONFIG_PHY_RESET" - potresti per favore controllare la tua configurazione uboot per quello? Per disabilitare questa funzione, probabilmente dovresti controllare la tua configurazione, di solito qualcosa di simile a: ./include/configs/YourBoardConfigFile.h, è ciò che Uboot userebbe.

Un'altra delle risposte è stata chiamata per usare Kconfig: ho controllato il menuconfig del mio uboot e quell'opzione non era presente.

Se dai un'occhiata al file sorgente uboot: ./drivers/net/4xx_enet.c , cerca "CONFIG_PHY_RESET", sembrerebbe che il codice sia in esecuzione:

#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 dopo, puoi vedere il testo "In attesa del completamento della negoziazione automatica PHY", quindi questo dovrebbe essere esattamente dove si trova il tuo problema (o vicino ad esso - c'erano alcuni altri file che avevano un'inizializzazione simile a seconda dell'architettura).

Per qualche motivo, il file README nella fonte uboot di livello superiore richiama CONFIG_PHY_RESET_DELAY, ma non CONFIG_PHY_RESET, quindi potresti averlo perso lì.

Domanda 3: se CONFIG_PHY_RESET è il problema, è necessario impostarlo al momento della compilazione. Dovresti essere in grado di scaricare la fonte uBoot di Xilinx per la tua scheda.

Non sono sicuro del motivo per cui è necessario il ripristino, quindi non ho davvero risposto alla tua domanda 1, ma sembra che alcuni PHY abbiano requisiti diversi per il ripristino al momento dell'inizializzazione e anche alcuni hanno bisogno di un certo ritardo.


0

Apparentemente quel sistema vuole eseguire il ping dell'indirizzo IP 10.10.70.101, probabilmente perché sta controllando il proprio indirizzo IP o il proprio gateway. Questa parte indica che il sistema è configurato con un'interfaccia di rete con quell'indirizzo IP o simile.

La pausa si verifica perché nel processo di configurazione dell'IP carica il driver di rete Ethernet, che esegue la negoziazione automatica PHY, essenzialmente cerca di vedere cosa è collegato ad esso. Poiché nulla è collegato, scade.

Probabilmente dovresti cercare ovunque questa distribuzione Linux mantenga le impostazioni dell'interfaccia di rete. Una rapida ricerca su google indica che questo U-Boot ha la variabile ipaddrper http://www.denx.de/wiki/view/DULG/UBootEnvVariables


-1

Utilizzare Kconfigo i suoi analoghi grafici per disabilitare Networking al momento della compilazione del kernel. Esempi: vedi questo .


2
Per favore, non solo pubblicare collegamenti, includi la maggior parte dei contenuti pertinenti direttamente su questo sito. Se il sito a cui ti stai collegando scompare, la tua risposta diventa inutile.
slm
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.