?>/script>'; } ?> Hacer backup de la flash com ramdisk Widgets Magazine

Autor Tema: Hacer backup de la flash com ramdisk  (Leído 4522 veces)

0 Usuarios y 1 Visitante están viendo este tema.

albert22

  • Visitante
Hacer backup de la flash com ramdisk
« en: 12-05-2016, 19:28 (Jueves) »
Hola,
soy un novato en el tema del openwrt. Empece a pelear hace unos dias con un router Pirelli DRG A112.
Mi intencion, por lo menos al principio, es aprender acerca de embedded linux y no tanto que el aparato trabaje como router. De todas maneras creo que no le da la capacidad de memoria para soportar una version funcional del openwrt.
No pude conseguir ningun firmware para este equipo. Esta basado en un Broadcom BCM6338KFBG.
No puedo encontrar el puerto JTAG (el BGA tiene los pines inaccesibles)
Quisiera hacer un backup del firmware antes de empezar a transformarlo en otro pisapapeles.
Desde telnet no se puede hacer casi nada porque el busybox esta muy limitado. Instale un puerto serial y tiene una version reducida del CFE. Aparentemente no tiene el comando dm porque probe con el cfetool y este encuentra el promt pero luego queda indefinidamete en 0%.
Logre compilar una version de ramdisk pero no logro que bootee cuando utilizo el comando r del cfe. Resulto de menos de 2Mbit porque elimine casi todos los paquetes menos el busybox.
Probe compilando una imagen no comprimida que quedo con extension .elf y una version squashfs que resulto .bin.
Los errores al intentar el comando r son CRC invalido y System exception 32 respectivamente.

Por favor alguien podria indicarme los pasos para poder compilar una version reducida que me permita bootear desde la RAM. He visto varias referencias a gente que lo pudo hacer pero nada que tenga algo de detalle.

Desde ya muchas gracias
Saludos

danitool

  • Visitante
Re: Hacer backup de la flash com ramdisk
« Respuesta #1 en: 12-05-2016, 21:05 (Jueves) »
Teniendo en cuenta que tu dispositivo no tendrá más de 16 MB, debería usarse una versión Attitude Adjustment o menor.

Normalmente las imágenes RAMDISK no deben superar el tamaño de 4MB, en caso contrario al cargarse en RAM pisa al propio CFE impidiendo continuar el proceso de carga.

Simplemente tienes que lograr que el firmware RAMDISK no supere los 4 MB, primero habilitando la compresión, puedes probar con una compresión fuerte como lzma

En menuconfig este parámetro se encuentra aquí
Código: [Seleccionar]
-> Target Images                                                                │ 
  │       -> ramdisk (TARGET_ROOTFS_INITRAMFS [=y])                                     │ 
  │         -> Compression (<choice> [=y])

           ┌────────────────────────────────────────────────────────────────┐ │ 
           │ │                           ( ) none                             │ │ 
           │ │                           ( ) gzip                             │ │ 
           │ │                           ( ) bzip2                            │ │ 
           │ │                           (X) lzma                             │ │ 
           │ │                           ( ) lzo                              │ │ 
           │ │                           ( ) xz                               │ │ 
           │ └────────────────────────────────────────────────────────────────┘ │ 
           ├────────────────────────────────────────────────────────────────────┤ 

Seguramente aun no sea suficiente con esto, así que debes deshabilitar todo lo que no sea necesario
- dropbear
- drivers wireless, utilidades wireless como wpa-mini, etc
- firewall, modulos de iptables, ppoe, y material diverso para enrutamientos
- cualquier otra cosa que no sea necesaria

También puedes irte al menú del kernel
Código: [Seleccionar]
make kernel_menuconfigY deshabilitar drivers o material que usan otras placas, o cualquier otra cosa que sepas no necesitarás

Si aún así no bajas de 4 megas, revisa de nuevo todo.

Como último recurso se podría compilar un CFE RAM que sí tenga el comando dm. De esta forma se carga el CFE RAM, se ejecuta el CFETOOL, y listo. Pero me temo que no estés preparado para jugar con el código fuente de CFE, así que lo mejor es intentar la otra vía.

albert22

  • Visitante
Re: Hacer backup de la flash com ramdisk
« Respuesta #2 en: 13-05-2016, 00:11 (Viernes) »
danitool
Muchas gracias por tu respuesta.
Ya habia deshabilitado casi todo en el menuconfig (salvo el busybox) y los tamaños me quedan de menos de 2Meg.
 
Citar
-rwxr-xr-x 1 karl karl 1905412 May 12 17:04 openwrt-brcm63xx-generic-96338GW-generic-initramfs.elf

Este es el error que me da cuando intento comando r con el .elf que resulto de la compilacion.

Citar
CFE> r                                                                                 
0x80010000/1839342 Entry at 0x80010000                                                 
Closing network.                                                                       
Starting program at 0x80010000                                                         
**Exception 32: EPC=DEADDEAD, Cause=DEADDEAD(CoProcUnu)                               
                RA=DEADDEAD, VAddr=DEADDEAD                                           
                                                                                       
        0  ($00) = DEADDEAD     AT ($01) = DEADDEAD                                   
        v0 ($02) = DEADDEAD     v1 ($03) = DEADDEAD                                   
        a0 ($04) = DEADDEAD     a1 ($05) = DEADDEAD                                   
        a2 ($06) = DEADDEAD     a3 ($07) = DEADDEAD                                   
        t0 ($08) = DEADDEAD     t1 ($09) = DEADDEAD                                   
 ... mas lineas similares
luego cambie a una imagen con compresion y en lugar de un .elf me genero un .bin que me da el sig error:

Citar
CFE> r                                                                                 
Retry loading it as a compressed image.                                               
Loading 10.0.0.1:vmlinux ...                                                           
Finished loading 1966084 bytes                                                         
Code Address: 0x36000000, Entry Address: 0x42726f61                                   
2048 size flash memory detected                                                       
starting image at (BF800000) ... crc calculated: 45DFFE6 - CRC embedded 45DFFE6       
Just one copy on board                                                                 
 Illegal image ! Image crc failed. or corrupted image                                 
*** command status = 1966084                                                           
CFE>


A ver si entiendo, lo unico que hay que configurar para lograr una imagen que corra en RAM es ?
Citar
-> ramdisk (TARGET_ROOTFS_INITRAMFS [=y])             
          -> Compression (<choice> [=y]
         (X) lzma         
                   

Estoy intentandolo aunque parece que ya me abandono la suerte de principiante porque las 1eras tres compilaciones fueron sin error pero ahora no lo estoy logrando.

Saludos

albert22

  • Visitante
Re: Hacer backup de la flash com ramdisk
« Respuesta #3 en: 13-05-2016, 01:05 (Viernes) »
Bueno probe con LZMA y XZ. Este ultimo porque lo mencionaban en otro lado.
 
En ambos casos me da el error que mencione anteriormente ( EXCEPTION 32)

Ahora me di cuenta que la imagen con extension .bin que genere en la 2nda compilacion, no sirve para esto porque la genere con squashfs y no es ramfs

He visto que usan los .elf con el comando boot pero nunca vi un ejemplo con el comando r.
Se necesitara otro formato o tal vez modificar algun header?

danitool

  • Visitante
Re: Hacer backup de la flash com ramdisk
« Respuesta #4 en: 13-05-2016, 01:54 (Viernes) »
cual es la board ID de tu router, si eso podrías enseñar el bootlog que muestra por puerto serie

albert22

  • Visitante
Re: Hacer backup de la flash com ramdisk
« Respuesta #5 en: 13-05-2016, 06:23 (Viernes) »
Este es un boot seguido de un intento fallido por cargar
Compile para profile default y genero un monton de .elf uno para cada placa. Probe alrededor de 20 incluyendo algunos distintos al 6338
No encontre la manera de cambiar el board id (si es que la hay)

Código: [Seleccionar]
CFE version 1.0.37-3.1 P13 for BCM96338 (32bit,SP,BE)                                 
Build Date: lun dic 17 16:21:41 CET 2007 (root@TiglioLinux)                           
Copyright (C) 2000-2005 Broadcom Corporation.                                         
                                                                                       
Boot Address 0xbf800000                                                               
                                                                                       
Initializing Arena.                                                                   
Initializing Devices.                                                                 
cfi_flash_get_device_id                                                               
Parallel flash device: name AM29LV160B, id 0x2249, size 2048KB                         
Auto-negotiation timed-out                                                             
10 MB Half-Duplex (assumed)                                                           
CPU type 0x29010: 240MHz                                                               
Total memory: 8388608 bytes (8MB)                                                     
                                                                                       
Total memory used by CFE:  0x80401000 - 0x805291B0 (1212848)                           
Initialized Data:          0x8041EC50 - 0x80420920 (7376)                             
BSS Area:                  0x80420920 - 0x804271B0 (26768)                             
Local Heap:                0x804271B0 - 0x805271B0 (1048576)                           
Stack Area:                0x805271B0 - 0x805291B0 (8192)                             
Text (code) segment:       0x80401000 - 0x8041EC4C (121932)                           
Boot area (physical):      0x0052A000 - 0x0056A000                                     
Relocation Factor:         I:00000000 - D:00000000                                     
                                                                                       
Board IP address                  : 10.0.0.2                                           
Host IP address                   : 10.0.0.1                                           
Gateway IP address                :                                                   
Run from flash/host (f/h)         : h                                                 
Default host run file name        : p.elf                                             
Default host flash file name      : bcm963xx_fs_kernel                                 
Boot delay (0-9 seconds)          : 1                                                 
Board Id Name                     : PirelliCMB_1P                                     
Psi size in KB                    : 24                                                 
Number of MAC Addresses (1-32)    : 5                                                 
Base MAC Address                  : 00:1d:8b:05:db:4d                                 
Ethernet PHY Type                 : Internal                                           
Memory size in MB                 : 8                                                 
                                                                                       
*** Press any key to stop auto run (1 seconds) ***                                     
Auto run second count down: 0                                                         
0x80010000/2638157 Entry at 0x80010000                                                 
Closing network.                                                                       
Starting program at 0x80010000                                                         
**Exception 32: EPC=DEADDEAD, Cause=DEADDEAD (CoProcUnu)                               
                RA=DEADDEAD, VAddr=DEADDEAD                                           
                                                                                       
        0  ($00) = DEADDEAD     AT ($01) = DEADDEAD                                   
        v0 ($02) = DEADDEAD     v1 ($03) = DEADDEAD                                   
        a0 ($04) = DEADDEAD     a1 ($05) = DEADDEAD                                   
        a2 ($06) = DEADDEAD     a3 ($07) = DEADDEAD                                   
        t0 ($08) = DEADDEAD     t1 ($09) = DEADDEAD                                   
        t2 ($10) = DEADDEAD     t3 ($11) = DEADDEAD                                   
        t4 ($12) = DEADDEAD     t5 ($13) = DEADDEAD                                   
        t6 ($14) = DEADDEAD     t7 ($15) = DEADDEAD                                   
        s0 ($16) = DEADDEAD     s1 ($17) = DEADDEAD                                   
        s2 ($18) = DEADDEAD     s3 ($19) = DEADDEAD                                   
        s4 ($20) = DEADDEAD     s5 ($21) = DEADDEAD                                   
        s6 ($22) = DEADDEAD     s7 ($23) = DEADDEAD                                   
        t8 ($24) = DEADDEAD     t9 ($25) = DEADDEAD                                   
        k0 ($26) = DEADDEAD     k1 ($27) = DEADDEAD                                   
        gp ($28) = DEADDEAD     sp ($29) = DEADDEAD                                   
        fp ($30) = DEADDEAD     ra ($31) = DEADDEAD                                   
                                                                                       
  AQUI EMPIEZA
NUEVAMENTE                                                                                   
                                                                                       
CFE version 1.0.37-3.1 P13 for BCM96338 (32bit,SP,BE)

PD
Te he visto en otros foros y veo que la tenes clarisima. Me siento honrado por tu atencion. Gracias.

danitool

  • Visitante
Re: Hacer backup de la flash com ramdisk
« Respuesta #6 en: 13-05-2016, 11:35 (Viernes) »
He compilado una versión RAM de CFE para bcm6338

https://drive.google.com/file/d/0B-EMoBe-_OdBZV91WDB3NGFnN1U/view?usp=sharing

Intenta cargarla. Yo normalmente uso el comando
Código: [Seleccionar]
r 192.168.1.20:firmwareRAM.elf
donde 192.168.1.20 es la IP de nuestro ordenador, viene a ser lo mismo que lo que tú haces. Lo mejor es probar ambas formas si una no funciona.

Este CFE sí incluye el comando dm aunque no lo he testado en 6338

albert22

  • Visitante
Re: Hacer backup de la flash com ramdisk
« Respuesta #7 en: 13-05-2016, 21:44 (Viernes) »
Veo luz al final del tunel ....... Sera un tren.
Trate de hacer algunos deberes.
La version que amablemente me enviaste corre pero queda en un loop, indicando web error, que hace imposible utilizarla (ver recuadro mas abajo)
Viendo que el .elf contiene el boardID (PirelliCMB_1P) intente parchar un .elf compilado con compresion none pero no encontre ese texto.
Luego cambie el valor
.name   = "96338GW"
 en el archivo
/openwrt/build_dir/target-mips_mips32_musl-1.1.14/linux-brcm63xx_generic/linux-4.1.23/arch/mips/bcm63xx/boards/board_bcm963xx.c
Y compile para el 96338GW Pero siguio tirando el mismo EXCEPTION 32.
Me di cuenta que hay un monton de archivos board_bcm963xx.c y no me da la paciencia para cambiarlos todos si no hay una posibilidad de exito.
Por ultimo: el source del cfe es este ?
https://github.com/Noltari/cfe_bcm63xx

resultado de cargar el cfe en RAM (no pude parar de ninguna manera los mensajes de error)

Código: [Seleccionar]
0x80601000/124240 0x8061f550/26872 Entry at 0x80601000                                 
Closing network.                                                                       
Starting program at 0x80601000                                                         
                                                                                       
                                                                                       
CFE version 1.0.37-6.4 for BCM96338 (32bit,SP,BE)                                     
Build Date: Fri May 13 11:24:12 CEST 2016 (dani@tool)                                 
Copyright (C) 2000-2005 Broadcom Corporation.                                         
                                                                                       
Boot Address 0xbfc00000                                                               
                                                                                       
Initializing Arena.                                                                   
Initializing Devices.                                                                 
Parallel flash device: name AM29LV160B, id 0x2249, size 2048KB                         
error on Ethernet Switch setup                                                         
Failed initializing enet hardware                                                     
CPU type 0x29010: 240MHz                                                               
Total memory: 8388608 bytes (8MB)                                                     
                                                                                       
Total memory used by CFE:  0x80601000 - 0x80727E50 (1207888)                           
Initialized Data:          0x8061D950 - 0x8061F550 (7168)                             
BSS Area:                  0x8061F550 - 0x80625E50 (26880)                             
Local Heap:                0x80625E50 - 0x80725E50 (1048576)                           
Stack Area:                0x80725E50 - 0x80727E50 (8192)                             
Text (code) segment:       0x80601000 - 0x8061D948 (117064)                           
Boot area (physical):      0x00728000 - 0x00768000                                     
Relocation Factor:         I:00000000 - D:00000000                                     
                                                                                       
Board IP address                  : 10.0.0.2                                           
Host IP address                   : 10.0.0.1                                           
Gateway IP address                :                                                   
Run from flash/host (f/h)         : h                                                 
Default host run file name        : cfe.elf                                           
Default host flash file name      : bcm963xx_fs_kernel                                 
Boot delay (0-9 seconds)          : 1                                                 
Board Id Name                     : PirelliCMB_1P                                     
Psi size in KB                    : 24                                                 
Number of MAC Addresses (1-32)    : 5                                                 
Base MAC Address                  : 00:1d:8b:05:db:4d                                 
Ethernet PHY Type                 : External Switch Using Reverse MII                 
Memory size in MB                 : 8                                                 
CMT Thread Number                 : 0                                                 
                                                                                       
Could not activate network interface 'eth0': CFE error -1                             
***  Press any key to stop auto run (1 seconds) ***                                   
 Auto run second count down: 0               

                                         
web error -1: Could not create TCP socket.                                             
web error -1: Could not create TCP socket.                                             
web error -1: Could not create TCP socket.                                             
 error -1: Could not create TCP socket.                                             
web error -1: Could not create TCP socket.                                             
Available commands:                                                                   
                                                                                       
gpioget             Get the value of GPIO configured as input                         
gpioset             Set a GPIO as output high or low                                   
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 boot line 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                                                                 
web error -1: Could not create TCP socket.                                             
web error -1: Could not create TCP socket.                                             
web

saludos y nuevamente gracias

danitool

  • Visitante
Re: Hacer backup de la flash com ramdisk
« Respuesta #8 en: 13-05-2016, 22:09 (Viernes) »
No me había dado cuenta de que el router no tiene switch.

Lo he compilado de nuevo:
https://drive.google.com/file/d/0B-EMoBe-_OdBZV91WDB3NGFnN1U/view?usp=sharing

albert22

  • Visitante
Re: Hacer backup de la flash com ramdisk
« Respuesta #9 en: 14-05-2016, 06:54 (Sábado) »
Buenisimo. Anda el cfe. Mis unicos exitos con esto son gracias a vos.
Pude bajar una copia de la ROM aunque esta algo corrupta o el binwalk no la interpreta bien. Cuando tenga algo chequeado lo posteo por si a alguien le sirve.

Respecto a poder hacer andar un ramdisk, podrias darme algun punto de partida ? Algo breve, no quiero abusar mas de tu paciencia.
Calculo que las posibilidades son
1-cambiar el boardID mediante el CFE tool cargado en la ram. Corro algun riezgo?
2- Intentar agregar un nuevo device al openwrt con el nuevo boardID.
Aqui encontre algo
https://wiki.openwrt.org/doc/devel/add.new.device
intente cambiar los .c que dice alli pero sigo con el EXCEPTION 32

saludos


danitool

  • Visitante
Re: Hacer backup de la flash com ramdisk
« Respuesta #10 en: 14-05-2016, 11:12 (Sábado) »
Empieza por usar Attitude Adjustment, o una versión menor.

Con solo 8 MB de RAM incluso será difícil arrancar Openwrt en una versión antigua.