Il semble possible de transformer un G-010S-A en G-010S-P carlitoxx-v1.
L'intérêt est d'avoir un démon OMCI plus versatile et configurable, notamment en face d'un OLT Huawei "méchant".
Voici donc les grandes lignes,
Par avance, je m'excuse des approximations & du côté brouillon, l'idée générale est que l'opération est faisable.
Bien sûr, ne tenter l'opération que si on
comprend exactement ce qu'on fait,
Je n'assume aucun SAV, dédommagement, ou aide au rollback
La seule chose que je peux certifier, c'est que ça a fonctionné chez moi !
Déblocage du bootloaderVoir :
https://forum.openwrt.org/t/will-gpon-nokia-g-010s-a-change-sn/69602/16En ssh sur ONTUSER@192.168.1.10 :
root@SFP:/# fw_setenv bootdelay 5
root@SFP:/# fw_setenv asc0 0
root@SFP:/# fw_setenv preboot
root@SFP:/# fw_setenv bootretry -1
# la dernière commande permet d'éviter l'auto-reboot sur l'invite FALCON
Idée intéressante, si la suite se passe mal, faire à minima un backup de mtd0 + mtd1,
# en SSH sur l'ONT
root@SFP:/# cat /dev/mtd0 > /tmp/mtd0.bin
root@SFP:/# cat /dev/mtd1 > /tmp/mtd1.bin
# sur un PC
scp -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null ONTUSER@192.168.1.10:/tmp/mtd0.bin ./mtd0.bin # SUGAR2A041
scp -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null ONTUSER@192.168.1.10:/tmp/mtd1.bin ./mtd1.bin # SUGAR2A041
Accès au bootloader en UART,Voir :
https://forum.openwrt.org/t/will-gpon-nokia-g-010s-a-change-sn/69602/17- Pour rappel les broches SFP sont 3(Tx-disable) et 6(MOD-def-0)
+ connexion à 115200 bauds
Flash des partitionsVoir :
https://lafibre.info/remplacer-livebox/guide-de-connexion-fibre-directement-sur-un-routeur-voire-meme-en-2gbps/- l'idée est de réécrire les images G-010S-P au bon endroit sur la flash
- on se sert du mtd2 du firmware carlitoxx-v1 :
https://www.dropbox.com/sh/6h1w2ud7k6xetpc/AADvN14Na5Dz_kmzxo5uA9vqa/Carlitoxx-v1- le mtd5 n'est pas utile, sa charge utile (squashfs) est identique au mtd2
- en fait on en écrit plus que nécessaire, sachant que le jffs2 superflu ne sera jamais lu.
A faire sous l'invite FALCONATTENTION :
Toute écriture en dessous de l'offset 0xC0000 va corrompre le bootloader,
Il faudra alors appliquer la procédure du court-circuit sur la flash + upload XMODEM du bootloader modifié pour s'en sortir.
Eviter d'en arriver jusque là, car on augmente encore la difficulté.
# chargement de l'image MTD2 dans une zone de mémoire vide
loadx 0x82F00000
# puis déclencher le transfert XMODEM du mtd2.bin
# controle du CRC
crc32 0x82F00000 0x00740000
# si le résultat n'est pas 0x03071158 , il y a une erreur, NE PAS continuer !
# à partir de maintenant, les opérations sont destructives
# effacement de la flash pour mtd2
sf erase 0xC0000 0x740000
# écriture mtd2 (copie mémoire > flash)
sf write 0x82F00000 0xC0000 0x740000
# pareil pour mtd5
sf erase 0x800000 0x800000
sf write 0x82F00000 0x800000 0x740000
# controle du CRC final si on veut (lecture mémoire + CRC)
sf read 0x82F00000 0xC0000 0x740000
crc32 0x82F00000 0x00740000
Modification des valeurs d'environnement.L'idée est d'introduire les valeurs typées model-P et supprimer celles model-S.
Cette opération est à faire sous l'invite FALCON du bootloader :
- je préconise ici d'utiliser printenv / setenv / saveenv (c'est ce que j'ai fait),
- certes c'est fastidieux et source d'erreurs, mais nettement moins risqué
- car on pourrait aussi reflasher violemment un mtd1 fonctionnel
- cependant certaines valeurs sont apparemment uniques à chaque appareil (goi_config)
- et si ca se passait mal, retour au court-circuit
Le cocktail final peut varier, difficile de dire ce qui est indispensable ou non :
- il faut à minima répliquer tout ce qui lien aux partitions et bootcmd / addmtdparts.
- il faut également supprimer certaines variables d'origine : bootargs, boot_fail, ...
- Laisser intact goi_config (calibration optique)
- ignorer le changement d'IP du diff , si on souhaite rester en 192.168.1.10
- ne pas répliquer tx_fault_pin / preboot
A titre d'exemple en pièces jointes :
- diff des vars de mon G-010S-A avant opération vs. G-010S-P "de série"
- dump des vars sur mon G-010S-A transformé et fonctionnel (G-010S-AP.env.txt)
Les commandes utiles sont :
- Pour modifier / créer une entrée :
setenv + <espace> + <nom variable> + <simple-quote> + <contenu valeur> + <simple-quote>
Note : le principe de la simple-quote est nécessaire pour éviter les sur-substitutions sur les chaines exécutables faisant appel à d'autres valeurs.
- Pour supprimer une entrée
setenv + <espace> + <nom variable>
- EDIT : il faut sauvegarder quand on a terminé
saveenv
EDIT/2 : pour l'avoir refait sur un 2eme appareil, ci-dessus les commandes de modification de l'environnement
ATT : copier / coller massif fortement déconseillé sur un lien UART sans contrôle d'erreur !
FALCON => setenv a0_image
FALCON => setenv a2_image
FALCON => setenv a2_iaddr
FALCON => setenv addmisc 'setenv bootargs ${bootargs} ethaddr=${ethaddr} machtype=${machtype} ignore_loglevel vpe1_load_addr=0x83f00000 vpe1_mem=1M mem=63M ${mtdparts}'
FALCON => setenv addmtdparts0 'setenv mtdparts mtdparts=sflash:256k(uboot)ro,512k(uboot_env),7424k(linux),8192k(image1)'
FALCON => setenv addmtdparts1 'setenv mtdparts mtdparts=sflash:256k(uboot)ro,512k(uboot_env),7424k(image0),8192k(linux)'
FALCON => setenv bertEnable 0
FALCON => setenv bootargs
FALCON => setenv boot_fail
FALCON => setenv c_img 0
FALCON => setenv commit 0
FALCON => setenv committed_image 0
FALCON => setenv config_iaddr
FALCON => setenv fileaddr 80F00000
FALCON => setenv filesize 400092
FALCON => setenv gphy0_phyaddr 0
FALCON => setenv gphy1_phyaddr 1
FALCON => setenv image0_is_valid 1
FALCON => setenv image0_version 3FE56853AOPD39
FALCON => setenv image1_is_valid 0
FALCON => setenv image_name openwrt-lantiq-falcon-SFP
FALCON => setenv kernel1_offs '0x800000'
FALCON => setenv load_kernel
FALCON => setenv load_uboot
FALCON => setenv mtdparts
FALCON => setenv nSerial ALCLFAB759C8
FALCON => setenv netconsole
FALCON => setenv next_active
FALCON => setenv omci_loid loid
FALCON => setenv omci_lpwd loidpass
FALCON => setenv ri_hiaddr
FALCON => setenv ri_image
FALCON => setenv ri_siaddr
FALCON => setenv start_netconsole
FALCON => setenv select_image 'setenv activate_image -1;if itest *${magic_addr} == ${magic_val} ; then if itest *${act_img_addr} == 0 ; then setenv activate_image 0;fi;if itest *${act_img_addr} == 1 ; then setenv activate_image 1;fi;mw ${magic_addr} 0x0;mw ${act_img_addr} 0x0;fi;if test $activate_image = -1 ; then setenv c_img $committed_image;else setenv c_img $activate_image;setenv activate_image -1;fi;if test $c_img = 0 && test $image0_is_valid = 0 ; then setenv c_img 1;fi;if test $c_img = 1 && test $image1_is_valid = 0 ; then setenv c_img 0;fi;if test $image0_is_valid = 0 && test $image1_is_valid = 0 ; then setenv c_img _err;fi;exit 0'
FALCON => setenv update_A0
FALCON => setenv update_A2
FALCON => setenv update_configfs
FALCON => setenv update_image0
FALCON => setenv update_image1
FALCON => setenv update_logfs
FALCON => setenv update_openwrt
FALCON => setenv update_ri
FALCON => setenv update_system
FALCON => saveenv
Fin de l'opérationToujours en UART, tenter un premier boot "en vrai", on doit atterrir sur le shell linux.
Ensuite ré-enfourner dans un switch SFP, l'appareil doit maintenant répondre en SSH et en HTTP sur 192.168.1.10
Si c'est le cas , on a maintenant un G-010S-P mod Carlitoxx-v1 tout neuf !