Seguridad Wireless - Wifi
Equipos y materiales => Puntos de acceso, routers, switchs y bridges => Openwrt & LEDE => Mensaje iniciado por: albert22 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
-
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í
-> 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
make kernel_menuconfig
Y 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.
-
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.
-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.
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:
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 ?
-> 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
-
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?
-
cual es la board ID de tu router, si eso podrías enseñar el bootlog que muestra por puerto serie
-
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)
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.
-
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
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
-
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)
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
-
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
-
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
-
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.