[...]
Si alguien ha tenido exito emulando el firmware con algun emulador en particular, que nos pase detalles de qué software y qué configuracion ha usado.
En mi caso concreto, tuve éxito a medias, ya que algunos binarios no se pueden ejecutar por falta de dispositivos físicos de broadcom. De todas formas, pongo a continuación los pasos que seguí para emular el firmware.
En primer lugar, decir que trabajo con Debian inestable/experimental, aunque cualquier sistema operativo en el que podamos ejecutar qemu nos valdrá. Lo digo porque posiblemente algún que otro comando no esté disponible en vuestro sistema operativo, o cambie ligeramente su sintaxis.
Por tanto, en primer lugar necesitamos instalar qemu. En debian sería así:
sudo aptitude install qemu
¿Y qué hacemos con qemu? Emular otro Debian portado a MIPS.
¿Cómo? Descargándonos una imagen de Debian Lenny, o Squeeze (a elección, yo elegí la Squeeze) para Qemu, con su correspondiente kernel. Está todo
aquíLos pasos que yo seguí fueron los siguientes:
Abrimos konsole, o xterm, o nuestro terminal preferido
mkdir debian_mips
cd debian_mips
wget http://people.debian.org/~aurel32/qemu/mips/debian_squeeze_mips_standard.qcow2
wget http://people.debian.org/~aurel32/qemu/mips/vmlinux-2.6.32-5-4kc-malta
Y ahora, ejecutamos qemu-system-mips con los siguientes parámetros:
qemu-system-mips -M malta -kernel vmlinux-2.6.32-5-4kc-malta -hda debian_squeeze_mips_standard.qcow2 -append "root=/dev/sda1 console=ttyS0" -nographic
Arrancará la máquina, y si todo sale bien nos pedirá user y contraseña:
login: root
password: root
O bien
login: user
password: user
En mi caso no tuve que tocar nada para que funcionara internet, aunque si tuvierais problemas, probad a hacer un dhclient eth0
Si probáis a hacer ping, no funcionará, ya que solamente funcionarán los protocolos TCP y UDP, y no ICMP (ping).
Ahora necesitamos copiar el firmware a esta máquina virtual (debian-mips).
Yo utilicé el
firmware modificado por kisumuDoy por hecho que ya lo habéis descargado y
descomprimido con anterioridad en la máquina host.
Yo lo que hice fue comprimir el directorio resultante en tar.gz y pasarlo a la máquina virtual a través de ftp. Sin entrar en detalles, y por este método, habría que instalar vsftp y configurarlo en el host.
Luego, desde la máquina virtual se accedería haciendo ftp -p 192.168.1.100 (o vuestra ip local), navegando por los directorios hasta llegar al tar.gz y copiarlo usando el comando get.
Una vez con el tar.gz en la máquina virtual, hay que descomprimirlo, y copiar el contenido del directorio resultante en /mnt/hg553 (por ejemplo).
Antes de hacer chroot sobre /mnt/hg553, haremos lo siguiente:
mount -o bind /dev /mnt/hg553/dev
mount -o bind /tmp /mnt/hg553/tmp
mount -o bind /proc /mnt/hg553/proc
Para finalmente, hacer el chroot
chroot /mnt/hg553 /bin/sh
Y listo.
Eso es todo.
Podemos probar a ejecutar algunos binarios:
# cfgctrl
cfgctrl - CFM configuration controller
(c) 2009 Giuseppe Gatta
usage: cfgctrl <action> [file]
Where action can be:
read - Read configuration from memory
write - Write configuration to memory
If the configuration is written, reboot the router
to make it have effect.
If the argument for the file is not specified, it is
assumed to be stdin for writes, and stdout for reads.
Pero...
# cfgctrl read
Could not open /dev/brcmboard. Aborting.
Espero que se hayan entendido las instrucciones con claridad. De no ser así, por favor, hacédmelo saber y ayudaré en todo cuanto pueda.
Un saludo.