Je viens de télécharger un fichier de firmware de ~ 7 Ko sur un système embarqué Linux basé sur BusyBox via le port série.
Aucun réseau, aucun utilitaire de transfert de fichiers; pas d'utilitaires Base64 ou quoi que ce soit d'utile à distance sur l'appareil.
Sur l'hôte, j'ai encodé trivialement un firmware au format suivant; une sorte de vidage hexadécimal composé de littéraux shell combinés avec des printf
commandes:
printf "\xDE\xAD\xBE\xEF\x...\xF0"
printf "\xCA\xFE\x33\xE1\x...\xD3"
shell essentiellement des printf
commandes avec des \x
séquences d'échappement qui printf
interprète. Sur l'appareil, j'ai fait:
device $ cat > firmware.sh
puis utilisé le minicom
fichier ASCII send ( Ctrl-AS) pour envoyer ce fichier à l'hôte. J'aurais pu simplement utiliser le copier-coller, car la quantité de données est petite.
Ensuite, marqué exécutable et exécuté le printf
script:
device $ chmod a+x firmware.sh
device $ ./firmware.sh > firmware.bin
Vérifié à l'aide de BusyBox md5sum
que la firmware.bin
somme de contrôle sur le périphérique correspond à l'image du firmware d'origine sur l'hôte.
PS La syntaxe de guillemet double du shell passe \x
in extenso car ce n'est pas une séquence d'échappement reconnue; nous n'avons donc pas à doubler les barres obliques inverses.
busybox --help
etls -l /bin
etls -l /usr/bin
, s'il vous plaît.