Tom Rini, le mainteneur intérimaire d'U-Boot, a annoncé sur la mailing-list que la version 2013.01 d'U-Boot était disponible.
Parmi les nouveautés, l'une à attiré notre attention: l'ajout de la commande bootstage qui permet de mesurer le temps d'exécution des différentes phases de boot.
Mise en oeuvre
Pour activer cette commande il suffit d'ajouter deux macros à la configuration de votre carte (include/configs/.h):
#define CONFIG_CMD_BOOTSTAGE
#define CONFIG_BOOTSTAGE
La première ajoute la commande bootstage, la seconde le mécanisme de mesure proprement dit.
Une fois compilé et installé, la commande bootstage est disponible avec ses trois options: report, stash et unstash.
bootstage report
Cette commande affiche le rapport du démarrage :
Timer summary in microseconds: Mark Elapsed Stage 0 0 reset 52,000 52,000 id=64 56,000 4,000 id=65 63,000 7,000 main_loop 229,395,296229,332,296 board_init_f Accumulated time:
Cet exemple a été réalisé sous qemu pour la carte versatilepb.
Pour connaître la correspondance de id= avec l'étape, il faut se référer à include/bootstage.h dans l'enum bootstage_id.
Ici id=64 correspond au démarrage de l'ethernet et id=65 correspond à l'initialisation de l'ethernet pour charger un kernel depuis le réseau.
stash et unstash
bootstage stash [<start> [<size>]]
Cette commande stocke en mémoire le rapport. Pratique pour ensuite sauvegarder sur un support avec les commandes habituelles d'U-Boot.
bootstage unstash [<start> [<size>]]
Cette commande permets de relire le rapport depuis la mémoire.
Pour mieux comprendre essayons les commandes suivante:
bootstage stash 0x1000 0x1000
md 0x1000
La sortie est la suivante:
00001000: 00000000 00000004 00000083 b00757a3 .............W.. 00001010: 0000cb20 00000000 00000000 00000000 ............... 00001020: 00000040 0000dac0 00000000 00000000 @............... 00001030: 00000000 00000041 0000f618 00000000 ....A........... 00001040: 07fea2bf 00000000 000000a2 fc177360 ............`s.. 00001050: 00000000 00024bf2 00000000 0000009a .....K.......... 00001060: 363d6469 64690034 0035363d 6e69616d id=64.id=65.main 00001070: 6f6f6c5f 6f620070 5f647261 74696e69 _loop.board_init 00001080: 0000665f 00000000 00000000 00000000 _f..............
Nous y retrouvons les noms des étapes vues précédemment.
Un outil bien pratique qui aurait aidé les participants du concours LinuxEmbedded 2011 !