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 😀
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:
- server DHCPDÂ
- server TFTPD
- server HTTP
- serial clientÂ
Io non ho usato DnsMasq, ma ho usato come server TFTPDÂ http://mirror.usu.edu/mirrors/gentoo/distfiles/tftp-hpa-0.48.tar.bz2
- Scompattiamolo e configuriamolo con i classici comandi ./configure e make
- ./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.
- Avviamo il server DHCPD
- Avviamo il server HTTP
- Avviamo il server TFTPD con la [tftpdir] che punta alla directory dove avete salvato vmlinux
- 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/