OpenWrt ( Kamikaze ) su Miktronik RouterBoard rb112

E’ da un po’ di giorni che cerco di aggiornare la mia RouterBoard rb112 con la nuova versione di OpenWrt Kamikaze 8.09.02, per tale motivo ho deciso di scrivere un piccolo articolo sui passi che ho seguito per riuscire nell’impresa 😀

Miktronik RouterBoard

OverView

Prima di procedere, vediamo le caratteristiche principali del router Miktronik

la board e’ equipaggiata con un processore MIPS32 4Kc ad una frequenza di 175MHz Infineon ADM5120 (Little Endian), due slot mini-pci, 16 MB di RAM, 64 MB di memoria NAND ed una porta ethernet

N.b. ricordiamoci che il processore e’ Little Endian per quando andremo a compilare il kernel

Prerequisiti

L’unico modo per poter installare OpenWrt sulla board, e’ quello di usare NetBoot ( cioè’ far caricare l’immagine del kernel da rete per poi installare il kernel nella flash del dispositivo ) un cavo seriale ed una connessione ethernet.

Per fare questo dovremmo avere una macchina che funzioni sia da:

  1. server DHCPD 
  2. server TFTPD
  3. server HTTP
  4. serial client 
Se avete una macchina linux il gioco e’ molto semplice, basta configurare il demone DnsMasq che implementa le funzionalità’ (TFTPD e DHCPD), Apache come server HTTP e Minicom come programma client per la porta seriale.

Io non ho usato DnsMasq, ma ho usato come server TFTPD http://mirror.usu.edu/mirrors/gentoo/distfiles/tftp-hpa-0.48.tar.bz2

  1. Scompattiamolo e configuriamolo con i classici comandi ./configure e make
  2. ./tftpd/tftpd -s -L [tftpdir] , dove [tftpdir] e’ la cartella dovre andranno i nostri file usati per flashare il dispositivo ( vedi in seguito) 

e come server DHCPD il demone che ha di default ogni distribuzione linux con la seguente configurazione

( macchina che uso come server IP -> 192.168.1.115 )

[sourcecode language=”text”]

# dhcpd.conf
#
# Configuration file for ISC dhcpd (see ‘man dhcpd.conf’)
#
ddns-update-style ad-hoc;
default-lease-time 600;
max-lease-time 7200;

subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.200 192.168.1.220;
option routers 192.168.1.15;

}

[/sourcecode]

Come server HTTP possiamo usare apache WebServer e con un semplice comando possiamo lanciarlo in esecuzione

[sourcecode language=”bash”]

apachectl start

[/sourcecode]

Mentre questi sono i settaggi da impostare su Minicom

[sourcecode language=”text”]
# Machine-generated file – use setup menu in minicom to change parameters.
pu port /dev/ttyUSB0
pu backspace BS
pu baudrate 115200
pu bits 8
pu parity N
pu stopbits 1
[/sourcecode]

L’unico modo per poter installare OpenWrt sulla nostra board e’ quello di avere due kernel.

Il primo kernel ( vmlinux )ha la funzione di RAMDISK al proprio interno (estensione ELF) e quindi dovra’ essere usato nella fase di avvio da Netboot, mentre il secondo ( kernel ) sarà’ installato direttamente nella memoria NAND del dispositivo e sarà’ il kernel vero e proprio che andremo ad usare oltre al filesystem ( rootfs ) associato ad esso.

L’ideale sarebbe compilarvi a “manella” il tutto, in modo da ottimizzare il kernel per l’uso che vorrete fare del vostro router. Una guida completa alla compilazione di OpenWrt e’ reperibile al seguente indirizzo (ricordatevi che il nostro processore e’ un Mipsel little Endian). In questo piccolo tutorial ometterò’ questa parte (anche se credo sia la più’ interessante ), ma sarà’ l’argomento del prossimo articolo sul Miktronik 😀

Se non volete cimentarvi nella compilazione del kernel tramite CrossCompiler, vi potete scaricare direttamente le immagini del kernel e del rootfs che ho usato io

openwrt_kamikaze_adm5120_vmlinux.elf        ( Immagine del kernel da usare al Netboot )

openwrt_kamikaze_adm5120_kernel           ( Immagine del kernel da mettere nella memoria NAND )

openwrt_kamikaze_adm5120_rootfs.tgz  ( filesystem usato dal kernel dalla NAND )

Rinominate openwrt_kamikaze_adm5120_vmlinux.elf  in vmlinux e mettetelo all’interno della path specificata al server TFTPD

Rinominate openwrt_kamikaze_adm5120_kernel   in  kernel e mettetelo nella cartella raggiungibile dal server HTTP

Rinominate openwrt_kamikaze_adm5120_rootfs.tar.gz in rootfs.tar.gz e mettetelo nella cartella raggiungibile dal server HTTP

Bene, ora abbiamo tutto il necessario per iniziare a flashare la nostra RouterBoard e far girare OpenWrt.

Prepariamo la RouterBoard

Colleghiamo il cavo ethernet che ci servira’ per caricare il kernel ed il cavo seriale usato per settare alcuni parametri nel bootloader del router.

  1. Avviamo il server DHCPD
  2. Avviamo il server HTTP
  3. Avviamo il server TFTPD con la [tftpdir] che punta alla directory dove avete salvato vmlinux
  4. Lanciamo Minicom ed appena accesa la board premiamo un pulsante qualsiasi per fermare il normale boot della board, avremo un menu’ del genere
d - boot delay
 k - boot key
 s - serial console
 o - boot device
 m - memory test
 u - cpu mode
 f - try cpu frequency
 c - keep cpu frequency
 r - reset configuration
 g - bios upgrade
 a - mac addresses
 p - boot protocol
 t - do memory testing
 x - exit setup

scegliamo: p – (boot protocol)

In questo modo avremo un altro menu dove ci chiederà’ quale boot usare, noi scegliere il boot da dhcp

2 - dhcp protocol

poi dal menu’ di prima scegliamo: o – (boot device)

e scegliamo il boot da ethernet: e – (boot over ethernet)

 e - boot over Ethernet
 n - boot from NAND

Infine scegliete: x – (exit setup)
e la vostra board dovrebbe caricare il kernel ELF (vmlinux) che abbiamo messo nella directory del server TFTPD.

Installazione del Kernel

Se tutto e’ andato per il verso giusto, avremo la shell di OpenWrt tutta per noi in attesa di istruzioni 😀

Ora non ci resta altro che mettere il kernel vero e proprio ed il filesystem ad esso associato nella memoria NAND del dispositivo, per fare questo useremo il comando wget 

Supposto che il nostro server web  abbia IP -> 192.168.1.115, e che il file kernel e rootfs.tar.gz sono nella root principale del web server.

diamo dalla shell della board il seguente comando:

[sourcecode language=”text”]
mount /dev/mtdblock2 /mnt; cd /mnt; wget http://192.168.1.115/kernel; cd /; umount /mnt;
[/sourcecode]

Cosa abbiamo fatto? abbiamo semplicemente montato la partizione della memoria NAND (mtdblock2) e poi abbiamo posizionato il nostro kernel all’interno

La stessa cosa dovremmo fare per il filesystem usato dal kernel, cambia solo la posizione all’interno della memoria NAND (mtdblock3)

[sourcecode language=”text”]
mount /dev/mtdblock3 /mnt; cd /mnt; wget http://192.168.1.115/rootfs.tgz; \

gunzip -d rootfs.tgz; tar xvf rootfs.tar; rm rootfs.tar; cd /; umount /mnt; sync; reboot;
[/sourcecode]

Bene.. se siamo arrivati fino a questo punto potremmo essere soddisfatti del nostro lavoro 😀

Ora non vi resta altro che settare di nuovo l’avvio dalla memoria NAND e non più’ tramite DHCP, per fare questo premiamo immediatamente un pulsante qualsiasi in Minicom per fermare l’avvio delle board e dal menu

d - boot delay
 k - boot key
 s - serial console
 o - boot device
 m - memory test
 u - cpu mode
 f - try cpu frequency
 c - keep cpu frequency
 r - reset configuration
 g - bios upgrade
 a - mac addresses
 p - boot protocol
 t - do memory testing
 x - exit setup

scegliamo: p – (boot protocol)
e poi

scegliamo: n (n – boot from NAND, if fail then Ethernet)

L’installazione e’ finita, dovreste vedere il boot dalla memoria NAND del vostro kernel.
IP della board e’ 192.168.1.1 , prima di accedervi con ssh cambiate la password

[sourcecode language=”bash”]
passwd
[/sourcecode]

oppure configuratela direttamente tramite seriale.

La prossima volta vedremo come crearci da soli il nostro kernel ottimizzato per le nostre esigenze 😀

Riferimenti:
http://rb1xx.ozo.com/doku.php?id=welcome
http://www.student.tue.nl/Q/t.f.a.wilms/adm5120/

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.