L'appareil utilise un chipset RTL8197DN, à l'aide d'un ensemble d'instructions MIPS Big-Endan. Selon mes recherches, le noyau MIPS réel à l'intérieur semble être Lexra (à vérifier).
Appuyez sur WPS et réinitialisez en même temps pendant le démarrage entre en mode Bootloader. Le chargeur de démarrage fournit une interface de commande simple via UART, et permet de télécharger des mises à jour via TFTP (voir ./upload_update.sh ). Le chargeur de démarrage est entré automatiquement si le démarrage échoue (servant également de mode de récupération).
Lorsqu'une mise à jour est téléchargée via TFTP, elle est chargée dans RAM à l'adresse 0x80500000. Si le fichier est un fichier de mise à jour approprié, le clignotement commence automatiquement, sinon le fichier reste simplement en RAM et peut être flashé manuellement à l'aide de la commande FLW.
Commandes de travail confirmées:
L'appareil expose un en-tête UART avec des messages de chargeur de démarrage et un shell Linux. 38400 bauds
Nom d'utilisateur: mot de passe racine: tout ce qui est configuré comme mot de passe administrateur pour le panneau Web (par défaut: admin)
Tout est grand endian. Voir ./check_update.py pour un script qui analyse les fichiers de mise à jour, et ./Make_header.py pour un script qui ajoute un en-tête de mise à jour vers un fichier binaire brut
Le fichier de mise à jour est composé des blocs suivants concaténés ensemble:
| compenser | taille | description |
|---|---|---|
| 0 | 4 | Type de fichier - Voir https://github.com/jameshilliard/wecb-vz-gpl/blob/master/rtl819x/bootcode/boot/init/rtk.h pour les types valides. L'appareil que nous n'avons que d'utiliser "CR6C" pour le noyau et "R6CR" pour rootfs (et peut-être "démarrer" pour le chargeur de démarrage?) |
| 4 | 4 | Adresse de chargement en RAM (utilisé uniquement pour l'image du noyau, il semble?) |
| 8 | 4 | Adresse en mémoire flash |
| 12 | 4 | Durée des données |
| 16 | * | Données |
Les données sont enregistrées - la somme Big Endian 16 bits de tous les octets doit être 0x0000 (sauf si vous clignotez la partition de fichiers Web, ce que cet appareil n'a pas - dans ce cas, la somme de contrôle est 8 bits). Ceci est généralement réalisé en ajoutant deux octets à la fin.
Lorsque le chargeur de démarrage essaie de charger d'abord une première fois à ~ 4 adresses codées en dur, procède ensuite à la recherche de la signature entière, ce qui semble indiquer que la disposition du flash peut être différente sur différents appareils. Les données ont une vérification de somme de contrôle identique aux fichiers de mise à jour ci-dessus.
Voir ./split_img.sh
| Début de l'adresse | adresse finale | tête | description |
|---|---|---|---|
| 0x00000000 | 0x00006000 | - | Code de chargeur de démarrage |
| 0x00006000 | 0x00008000 | H601 (?) | Configuration matérielle (adresse MAC, etc.) |
| 0x00008000 | 0x00010000 | Compds (?) | Configuration par défaut |
| 0x00010000 | 0x00018000 | Compcs (?) | Configuration actuelle |
| 0x00018000 | 0x00138000 | Mettre à jour l'en-tête de CR6C | Noyau Linux, préfixé avec un en-tête identique au format d'en-tête de mise à jour |
| 0x00138000 | 0x00327002 | En-tête de système de fichiers squashfs, en commençant par HSQS | Système de fichiers racine. Les deux derniers octets sont ajoutés pour la somme de contrôle. |
| 0x00327002 | 0x00400000 | - | 0xff 0xff 0xff 0xff ... |