Désactivation de la négociation automatique PHY pendant le processus de démarrage Linux sur Xilinx


9

J'essaie d'installer Linux sur une carte FPGA. La saveur linux est petalinux pour les puces Xilinx FPGA.

Le SoC Xilinx actuel possède un processeur Cortex A9 et une logique matérielle programmable, c'est-à-dire FPGA. J'ai capturé le message de démarrage sur le 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

Je m'intéresse spécifiquement à ces lignes:

[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

Question # 1: Je suppose que ces lignes sont pour TCP / IP?

Comme on peut le voir, environ 12 secondes sont gaspillées ici. Le truc, c'est que j'ai besoin d'un système de démarrage rapide et que je n'aurais pas du tout besoin de TCP / IP dans l'application finale.

Le Linux que j'ai installé jusqu'à présent utilisait une image pré-construite fournie par Xilinx. Maintenant, pour me débarrasser de la partie TCP / IP (puisque je n'en ai pas besoin et si je ne l'ai pas dans le système d'exploitation, ces 12 secondes pourraient être enregistrées - c'est ce que je comprends), je prévois de construire mon propre noyau Linux.

J'ai donc téléchargé le code source de PetaLinux, en supposant que je devrai le recompiler à partir de mon système hôte.

Question # 2: Mais je veux savoir comment puis-je exclure la partie TCP / IP de la source du système d'exploitation, de sorte que lorsque le système d'exploitation démarre, il n'exécutera jamais ces routines TCP / IP chronophages?

Question # 3: Je ne sais pas non plus si dans l'image pré-construite, pouvons-nous avoir une option pour désactiver la partie TCP / IP?

Mon objectif est de me débarrasser de ces lignes pendant le processus de démarrage:

[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

étape 1: découvrez quel système d'initialisation est utilisé. étape 2: fouiller dans ses fichiers de configuration.
strugee

Avez-vous la source du noyau? Comment démarrez-vous maintenant? Y a-t-il une arborescence d'appareils impliquée?
Stark07

Ce message vient de U-Boot, Linux n'a pas encore démarré à ce stade.
Gilles 'SO- arrête d'être méchant'

Réponses:


2

Question 2: Je pense que ces impressions proviennent de uboot. Si oui, je crois que vous avez défini "CONFIG_PHY_RESET" - pourriez-vous s'il vous plaît vérifier votre configuration de démarrage pour cela? Pour désactiver cette fonctionnalité, vous devrez probablement vérifier votre configuration, généralement quelque chose de similaire à: ./include/configs/YourBoardConfigFile.h, est ce que uboot utiliserait.

L'une des autres réponses a appelé à utiliser Kconfig - J'ai vérifié la menuconfig de mon uboot et cette option n'était pas présente.

Si vous jetez un œil au fichier source uboot: ./drivers/net/4xx_enet.c , recherchez "CONFIG_PHY_RESET", il semblerait que le code soit en cours d'exécution:

#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) {

Peu de temps après, vous pouvez voir le texte "En attente de la fin de la négociation automatique PHY", donc cela devrait être juste là où se trouve votre problème (ou proche - il y avait quelques autres fichiers qui avaient une initialisation similaire en fonction de l'architecture).

Pour une raison quelconque, le fichier README dans la source de démarrage de niveau supérieur appelle CONFIG_PHY_RESET_DELAY, mais pas CONFIG_PHY_RESET, vous l'avez donc peut-être manqué.

Question 3: Si le CONFIG_PHY_RESET est le problème, alors cela devra être défini au moment de la compilation. Vous devriez pouvoir télécharger la source uBoot de Xilinx pour votre carte.

Je ne sais pas pourquoi la réinitialisation est nécessaire, donc je n'ai pas vraiment répondu à la question 1 de la vôtre, mais il semble que certains PHY ont des exigences différentes pour être réinitialisés lors de l'initialisation et même certains ont besoin d'un certain délai.


0

Ce système veut apparemment envoyer une requête ping à l'adresse IP 10.10.70.101, probablement parce qu'il vérifie sa propre adresse IP ou sa passerelle. Cette partie signifie que le système est configuré avec une interface réseau avec cette adresse IP ou une adresse similaire.

La pause se produit car dans le processus de configuration IP, il charge le pilote de réseau Ethernet, qui effectue la négociation automatique PHY, il essaie essentiellement de voir ce qui lui est connecté. Puisque rien n'est connecté, cela arrive à expiration.

Vous devriez probablement chercher où cette distribution Linux conserve les paramètres de l'interface réseau. Une recherche rapide sur Google indique que cette U-Boot a la variable ipaddrpar http://www.denx.de/wiki/view/DULG/UBootEnvVariables


-1

Utilisez Kconfigou ses analogues graphiques pour désactiver la mise en réseau lors de la compilation du noyau. Exemples: voyez ceci .


2
Veuillez ne pas simplement publier des liens, inclure autant de contenu pertinent directement sur ce site. Si le site auquel vous vous connectez disparaît, votre réponse devient sans valeur.
slm
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.