7
votes

Linux: Arguments de démarrage avec u-boot et arbre d'image plate (FIT)

J'essaie d'obtenir ma propre construction de u-boot pour démarrer Linux sur un tableau Jetson TK1. Comme nous poussons un démarrage vérifié, j'utilise l'arborescence d'image plate (image unificatrice du noyau, arborescence de périphérique, ...) pour décrire mon système. U-boot peut charger le fichier ITB et tenter de démarrer le noyau, mais le système se bloque après ce message.

Je suppose que cela est dû au fait que aucun argument de démarrage n'est transmis au noyau (le démarrage d'origine ajoute des charges d'arguments) mais je Je suis un peu abasourdi sur la façon de transmettre les arguments au noyau. J'ai essayé de définir la variable d'environnement bootargs, mais cela n'a pas changé la situation.

Comment passer des arguments du noyau au noyau lors de l'utilisation d'un fichier ITB?

Arguments de ligne de commande (pris de La commande append des exemples extlinux.conf): xxx

contenu de son fichier: xxx

sortie u-boot : xxx


1 commentaires

Pouvez-vous s'il vous plaît fournir une sortie de console et des bootarg actuels afin que nous puissions vérifier où le démarrage cesse?


3 Réponses :


2
votes

Lorsque vous utilisez l'arborescence de périphérique, vous utilisez toujours bootargs pour fournir des arguments.

Vérifiez que:

  • Vous avez compilé l'arborescence (à l'aide du compilateur scripts / dtc / dtc à l'intérieur du noyau Linux)
  • Prise en charge de l'arborescence de périphérique est activé dans la configuration du noyau (Symbole config_use_of ) (Whle of Stands pour "Ouvrir le micrologiciel" ) ) )
  • Vous avez fourni u-boot l'adresse de l'arborescence: bootm -
  • Console série est activé dans la configuration du noyau sous Pilotes de périphérique -> Dispositifs de caractères -> Pilotes série
  • console est activé dans bootargs (E.G., console = ttys0,115200 )

5 commentaires

Sachez que j'utilise un arborescence d'image qui unit l'image du noyau, l'arborescence de l'arborescence du périphérique et d'autres choses (configurations, ramdisks, ...) dans un seul fichier.


Mieux. Avez-vous activé config_use_of et la console dans bootargs ?


Vous avez la console = ttys0,115200n8 console = TTY1 dans vos bootargs. Vérifiez lequel est correct (démarrez la machine avec DTB et vérifiez) et retirez le mauvais.


Je dois ajouter que ces bootargs fonctionnent dans le cas de les utiliser dans un fichier extlinux.conf pour démarrer Linux sur le même tableau


Supprimer également TTY1 (comme TTY0 est celui que je récupère la sortie) ne change rien: - /



6
votes

Le problème de saillie est que le système semble suspendre après la sortie de U-Boot, le texte xxx

si un fichier de noyau non compressé image a été chargé, puis le fichier Le code de démarrage du noyau réel serait exécuté ensuite.
Mais si un fichier uImage ou Zimage a été chargé (qui sont également déclarés "non compressés" car ils sont auto-extrayants), le code suivant est exécuté serait la décompression routine qui est attachée au fichier Zimage. Normalement, cette routine de décompression produira un texte tel que xxx

avant que le code de démarrage du noyau réel soit exécuté, avant tout traitement de la ligne de commande du noyau, avant tout traitement de l'arborescence du périphérique. BLOB, et avant toute sortie de la console du noyau (y compris avocat anticipé ).


Il existe une divergence entre les adresses de chargement et de démarrage du noyau spécifiées dans l'en-tête d'image xxx

par rapport à ce qui est spécifié dans le DT: xxx

puisque l'image du noyau est temporairement chargée à xxx

Les adresses de la DT sembleraient être correctes et les adresses dans l'en-tête d'image sont faux.

supposant qu'il n'y ait pas de RAM physique à 0x00000000, le résultat sera que l'image du noyau est copiée (ou décompressée) à l'adresse de charge de 0, puis l'image du noyau sera exécutée par branche vers Le point d'entrée de faux 0. La CPU est susceptible d'accrocher à tenter d'exécuter des ordures à partir de la mémoire inexistante et qui corréla parfaitement avec ce que vous rapportez.

solution est (1) confirmez que le noyau est lié à la Adresse correcte et (2) Pour spécifier les adresses correctes dans la commande mkimage à l'aide des -A et -E Options de commande.
Cette correction devrait au moins vous mettre au-delà de ce point.


0 commentaires

0
votes

J'ai connu le même problème ou le même problème similaire. Ma solution (ou contourner) pour ce problème était de définir les variables d'environnement U-Boot InitieRd_High et FDT_HIGE à une adresse de la RAM avant la démarrage u déplacée (dans mon cas 8EFFFFFF).


0 commentaires