CFE

De neufbox 4

CFE, ou Common Firmware Environment, est un bootloader développé par Broadcom. Plus d'info ici: http://www.linux-mips.org/wiki/CFE

Pour y avoir accès, il suffit de connecter un Port série au boot.

Attention: De mauvaises manipulations sur le CFE peuvent rendre inopérant votre neufbox, soyez prudent !


Présentation de l'environnement CFE

Si votre cable série fonctionne vous devriez avoir quelque chose comme ceci.

Affichage CFE sur une NB6-FXC-r0

HELO
CPUI
L1CI
HELO
CPUI
L1CI
DRAM
----
PHYS
ZQDN
PHYE
DINT
LASY
USYN
MSYN
LMBE
PASS
----
ZBSS
CODE
DATA
L12F
MAIN


CFE version 1.0.37-105.12 for BCM96362 (32bit,SP,BE)
Build Date: Mon May  3 19:26:12 CEST 2010 (arno@golgoth13)
Copyright (C) 2000-2009 Broadcom Corporation.

boot...
HS Serial flash device: name MX25L128E, id 0xc218 size 16384KB
Total Flash size: 16384K with 256 sectors
RTL8367R probed
TX/RX delay set on switch side!
Chip ID: BCM6362B0, MIPS: 400MHz, DDR: 333MHz, Bus: 166MHz
Main Thread: TP0
Memory Test Passed
Total Memory: 67108864 bytes (64MB)
Boot Address: 0xb8000000

CFE Release: NB6-BOOTLOADER-R1.20.0
Board IP address                     : 192.168.1.1:ffffff00  
Host IP address                      : 192.168.1.100  
Gateway IP address                   :   
Run from flash/host (f/h)            : f  
Default host run file name           : vmlinux  
Default host flash file name         : bcm963xx_fs_kernel  
Boot delay (0-9 seconds)             : 3  
Boot image (m=main, r=rescue, a=auto): m  
CFE Release: NB6-BOOTLOADER-R1.20.0
Board Id (0-11)                   : NB6-FXC-r0  
Number of MAC Addresses (1-32)    : 11  
Base MAC Address                  : 00:25:15:c0:02:a8  
PSI Size (1-64) KBytes            : 24  
Enable Backup PSI [0|1]           : 0  
System Log Size (0-256) KBytes    : 0  
Main Thread Number [0|1]          : 0  

*** Press any key to stop auto run (3 seconds) ***
Auto run second count down: 3

Affichage CFE sur une NB4-FXC-r1

CFE version 1.0.37-6.4 for BCM96358 (32bit,SP,BE)
Build Date: Fri Nov 17 13:33:10 CET 2006 (miguel@mgo)
Copyright (C) 2000-2005 Broadcom Corporation.
Boot Address 0xbe000000
Initializing Arena.
Initializing Devices.
Parallel flash device: name EON FLASH, id 0x0000, size 8192KB
Auto-negotiation timed-out
10 MB Half-Duplex (assumed)
CPU type 0x2A010: 300MHz, Bus: 133MHz, Ref: 64MHz
Total memory: 33554432 bytes (32MB)

Total memory used by CFE:  0x80401000 - 0x80528870 (1210480)
Initialized Data:          0x8041E4C0 - 0x8041FF70 (6832)
BSS Area:                  0x8041FF70 - 0x80426870 (26880)
Local Heap:                0x80426870 - 0x80526870 (1048576)
Stack Area:                0x80526870 - 0x80528870 (8192)
Text (code) segment:       0x80401000 - 0x8041E4B8 (119992)
Boot area (physical):      0x00529000 - 0x00569000
Relocation Factor:         I:00000000 - D:00000000

Board IP address                  : 192.168.1.210  
Host IP address                   : 192.168.1.5  
Gateway IP address                : 192.168.1.1  

Run from flash/host (f/h)         : f  
Default host run file name        : vmlinux  
Default host flash file name      : bcm963xx_fs_kernel  
Boot delay (0-9 seconds)          : 1  
Board Id Name                     : 96358VW  
Psi size in KB                    : 64
Number of MAC Addresses (1-32)    : 4  
Base MAC Address                  : 00:17:33:73:9c:38  
Ethernet PHY Type                 : Internal
Memory size in MB                 : 32
CMT Thread Number                 : 1 

SC CFE Version 1.03
*** Press any key to stop auto run (1 seconds) ***
Auto run second count down: 1

Affichage CFE sur une NB4-SER-r2

CFE version 1.0.37-12.1 for BCM96358 (32bit,SP,BE)
Build Date: mercredi 1 octobre 2008, 15:48:06 (UTC+0200) (art@LOST-art)
Copyright (C) 2000-2006 Broadcom Corporation.

Boot Address 0xbe000000

Initializing Arena.
Initializing Devices.
Parallel flash device: name AM29DL800B, id 0x22cb, size 8192KB
Auto-negotiation timed-out
10 MB Half-Duplex (assumed)
CPU type 0x2A010: 300MHz, Bus: 133MHz, Ref: 64MHz
CPU running TP1
Total memory: 33554432 bytes (32MB)

Total memory used by CFE:  0x80401000 - 0x80526670 (1201776)
Initialized Data:          0x8041CE40 - 0x8041E4F0 (5808)
BSS Area:                  0x8041E4F0 - 0x80424670 (24960)
Local Heap:                0x80424670 - 0x80524670 (1048576)
Stack Area:                0x80524670 - 0x80526670 (8192)
Text (code) segment:       0x80401000 - 0x8041CE3C (114236)
Boot area (physical):      0x00527000 - 0x00567000
Relocation Factor:         I:00000000 - D:00000000

Board IP address                  : 192.168.1.1:ffffff00  
Host IP address                   : 192.168.1.100  
Gateway IP address                :   
Run from flash/host (f/h)         : f  
Default host run file name        : vmlinux  
Default host flash file name      : bcm963xx_fs_kernel  
Boot delay (0-9 seconds)          : 1  
Board Id (0-9)                    : 96358VW  
Number of MAC Addresses (1-32)    : 4  
Base MAC Address                  : 00:17:33:1a:99:30  
PSI Size (1-64) KBytes            : 0  
Main Thread Number [0|1]          : 1  

*** Press any key to stop auto run (1 seconds) ***
Auto run second count down: 1
CFE> 

Appuyez alors sur entrée afin d'accéder au shell du CFE.

Quelques précisions importantes :

Board IP address                  : 192.168.1.210  

Comme son nom l'indique, c'est IP correspondante à la neufbox et plus précisément l'interface réseau du port TV de la NeufBox4. Il faut donc raccorder le PC à la box via cette interface. Note: la valeur par défaut est 192.168.1.1 (testé sur NB4-FXC-r1)

Host IP address                   : 192.168.1.5  

Cette fois c'est l'IP de l'hôte, cette adresse est celle du PC sur lequel est installé le serveur TFTP. Note: la valeur par défaut est 192.168.1.100 (testé sur NB4-FXC-r1)


La commande help vous donne la liste des commandes disponibles:

Commande help de la NB6-FXC-r0

CFE> help
Available commands:

sm                  Set memory or registers.
dm                  Dump memory or registers.
w                   Write the whole image start from beginning of the flash
e                   Erase [n]vram or [a]ll flash except bootrom
r                   Run program from flash image or from host depend on [f/h] flag
p                   Print boot line and board parameter info
c                   Change booline parameters
f                   Write image to the flash 
i                   Erase persistent storage data
b                   Change board parameters
reset               Reset the board
help                Obtain help for CFE commands

For more information about a command, enter 'help command-name'
*** command status = 0
CFE>

Commande help de la NB4-FXC-r1

CFE> help
Available commands:

memshow             show memory.
bootcounter         get/set boot counter. If the counter is over 2, the auto mode will always run the rescue bin. 
bootmode            get/set boot mode. 0:AUTO 1:Main Image 2:Rescue Image
assign              sercomm assign mode
download            sercomm download
w                   Write the whole image start from beginning of the flash
p                   Print boot line and board parameter info
c                   Change booline parameters
f                   Write image to the flash 
i                   Erase persistent storage data
b                   Change board parameters
reset               Reset the board
flashimage          Flashes a compressed image after the bootloader.
help                Obtain help for CFE commands

For more information about a command, enter 'help command-name'
*** command status = 0

Commande help de la NB4-SER-r2

CFE> help
Available commands:

w                   Write the whole image start from beginning of the flash
fm                  Write main image to the flash
fr                  Write rescue image to the flash
e                   Erase [n]vram or [a]ll flash except bootrom
r                   Run program from flash image or from host depend on [f/h] flag
p                   Print boot line and board parameter info
c                   Change booline parameters
i                   Erase persistent storage data
b                   Change board parameters
xd                  Dump a memory area
bootcounter         Get or set bootcounter value
ramtest             sercomm 32m ram test
download            sercomm download
reset               Reset the board
help                Obtain help for CFE commands

For more information about a command, enter 'help command-name'
*** command status = 0

Flasher la NeufBox avec une image

Vous devez disposer d'un serveur TFTP installé sur l'une de vos machines. Dans cet exemple mon serveur TFTP est 192.168.1.5 et je veux installer l'image NB4-1.3.11-MAIN. Vous devez connecter la neufbox4 au réseau via le port Ethernet dit TV.

CFE> flashimage 192.168.1.5:NB4-R1.3.11-MAIN
Loading 192.168.1.5:NB4-R1.3.11-MAIN ...
Finished loading 3950746 bytes
....................................................
Finished flashing image.
Resetting board...


N'utilisez pas l'interface web du CFE en vous connectant a l'IP de votre neufbox.

Cfe http.png

Le chargement de l'image NB4-R1.3.11-MAIN par l'interface web du CFE n'aboutit pas car c'est équivalent à la commande :

CFE> f

qui est différente de flashimage (sans doute différence dans les adresses d'écriture). Il y a un risque d'écraser des parties de flash

La box passe en mode "rescue" si le bootcounter deviens supérieur à 3. Ce compteur est incrémenté chaque fois que la box est reflashé avec flashimage, c'est normallement au firware de le remettre à 0. Mais OpenWrt ne le fait pas, il faut donc passer la commande suivante si la box passe en mode rescue:

bootmode 1

Changer l'IP de la NeufBox4

Par défaut l'IP de la NeufBox4 dans l'environnement CFE est 192.168.1.1 et la NeufBox4 tentera de se connecter au serveur TFTP 192.168.1.100.

Il est possible de changer ces adresses IP. Le même menu permet de choisir quels fichiers lancer dans le cas d'un boot en réseau.

CFE> c
Press:  <enter> to use current value
        '-' to go previous parameter
        '.' to clear the current value
        'x' to exit this command
Board IP address                  :  192.168.1.210  
Host IP address                   :  192.168.1.5  
Gateway IP address                :  192.168.1.1  
Run from flash/host (f/h)         :  f  
Default host run file name        :  vmlinux  
Default host flash file name      :  bcm963xx_fs_kernel  
Boot delay (0-9 seconds)          :  1  
*** command status = 0

Charger et exécuter une image pour la NeufBox4 en RAM

Fonctionnalité qui peut s'avérer fort utile lorsqu'on souhaite débugger ou tester un firmware, CFE permet le boot directement sur une image téléchargée via TFTP. Il est donc possible de tester un firmware sans altérer la flash de la NeufBox4.

Pour cela, il faut configurer l'environnement CFE de la manière suivante :

CFE> c
Press:  <enter> to use current value
       '-' to go previous parameter
       '.' to clear the current value
       'x' to exit this command
Board IP address                  :  192.168.1.1
Host IP address                   :  192.168.1.100
Gateway IP address                :
Run from flash/host (f/h)         :  f  h
Default host run file name        :  vmlinux
Default host flash file name      :  bcm963xx_fs_kernel
Boot delay (0-9 seconds)          :  1
*** command status = 0

Une fois cette configuration terminée, il suffit d'exécuter la commande reset. Si votre serveur TFTP est correctement configuré et que l'image du firmware est bien nommée vmlinux, votre NeufBox4 devrait télécharger et booter l'image directement en RAM. Note : Contrairement au mode "flash", l'image doit être au format elf. (Pour OpenWrt, dans make menuconfig, Target Images --->, [*] ramdisk).

Pour revenir à l'état initial, il vous suffit de remettre le lancement sur la flash suivi d'une commande reset :

CFE> c
[...]
Run from flash/host (f/h)         :  h  f
[...]
CFE> reset

Données (sérialisation)

Dans la partition du CFE il y a une plage de 1024 octets qui contient des données de configuration pour le CFE (aussi appelé sérialisation). Le contenu de cette plage est décrit dans

shared/opensource/include/bcm963xx/bcm_hwdefs.h

Elle commence à l'offset 0x0580 et se compose de :

  • un offset de 4 octets
  • la boot_line du CFE (chaine de 256 octets)
  • l'identifiant de la box (chaine de 16 octets) G6358GVW + caractères nuls offset de 0x0684
  • le nombre de reboot (4 octets) à confirmer
  • la taille du Psi (4 octets) par défaut 24
  • le nombre de mac adresses (4 octets) offset de 0x069C
  • la mac adresse de base (chaine de 6 octets) ) offset de 0x06A0
  • 2 octets réservés (chaine)
  • un check_sum (4 octets)
  • le numéro de série du GPON (chaine de 13 octets) par défaut BRCM12345678
  • le mot de passe du GPON (chaine de 11 octets) par défaut 11 blancs
  • le DevicePin WPS (chaine de 8 octets) par défaut 12345670
  • paramètres du wlan (chaine de 256 octets)
  • espace non utilisé (chaine de 432 octets)
  • un check_sum (4 octets)

La fin de la partition a été utilisée pour stocker des données propres à la NB4, en particulier à partir de l'adresse 0x0FF80 et sur 80 octets

  • 20 octets le modèle de la box NB4-SER-rx ou NB4-FXC-rx + caractères nuls (x= numéro de version
  • 20 octets la clé WIFI 20 octets donc offset de 0x0FF94
  • 4 octets check_sum  ?? à confirmer
  • 4 octets non utilisés (ff ff ff ff)
  • 32 octets un label NB4-RO1-CFE + caractères nuls

Remerciements

Un grand merci à Florian Fainelli pour toutes les connaissances qu'il possède et qu'il transmet toujours aussi agréablement.

Liens

Voir aussi

Reflasher un firmware avec CFE