OpenWRT: la distribuzione piccola e versatile

openwrt logo

logoIn queste ultime settimane ho avuto modo di vedere da vicino OpenWRT, una distribuzione nata per essere usata su router e modem di larga diffusione al posto del firmware di fabbrica, ma che può essere anche usata per compiti ben diversi data la sua estrema versatilità.

In questo articolo vi farò vedere come, una volta scaricati i sorgenti di OpenWRT, sia possibile in semplici passi provare questa distribuzione su di una piattaforma x86 e quindi perfettamente eseguibile su di un PC domestico.

Per semplificarci le cose però, dato che non tutti potrebbero non avere un PC da utilizzare per questo test, proveremo OpenWRT con QEMU, emulando quindi un PC.

Per scaricare l’ultima versione del codice vi consiglio di usare GIT in modo tale che poi, in futuro, potrete tracciare le eventuali patch in maniera molto efficiente. Diamo quindi:

$ git clone  git://nbd.name/openwrt.git

Una volta finito entriamo nella directory openwrt e configuriamo il sistema in modo che compili per la piattaforma x86 (è interessante vedere quante altre piattaforme OpenWRT supporti, il che la rende davvero accattivante per chi sviluppa embedded su diverse piattaforme):

$ cd openwrt/ && make menuconfig

Il sistema di configurazione di OpenWRT è praticamente quello di Linux il che ci facilita molto le eventuali aggiunte di pacchetti software e/o parametri di configurazione del sistema. Per i nostri scopi basta quindi che verifichiamo di aver impostato il sottomenu Target System su x86 e Target Images come segue:

  | | [*] tar.gz (NEW)                                                    | |
  | | — Root filesystem images                                          | |
  | | [*] ext4 (NEW)                                                      | |
  | | [*] jffs2 (NEW)                                                     | |
  | | [*] squashfs (NEW)                                                  | |
  | | — Image Options                                                   | |
  | | [*] Build GRUB images (Linux x86 or x86_64 host only) (NEW)         | |
  | | [*]   Use Console Terminal (in addition to Serial) (NEW)            | |
  | | (ttyS0) Serial port device (NEW)                                    | |
  | | (115200) Serial port baud rate                                      | |
  | | ()    Extra kernel boot options (NEW)                               | |
  | | [ ]   Build VirtualBox image files (VDI) (NEW)                      | |
  | | [ ]   Build VMware image files (VMDK) (NEW)                         | |
  | | [*] Pad images to filesystem size (for JFFS2) (NEW)                 | |
  | | (4) Kernel partition size (in MB) (NEW)                             | |
  | | (/dev/sda2) Root partition on target device (NEW)                   | |
  | | (48) Root filesystem partition size (in MB) (NEW)                   | |
  | | (6000) Maximum number of inodes in root filesystem (NEW)            | |

quindi salviamo tutto e passiamo alla compilazione.

Sulla mia Ubuntu ho dovuto aggiungere il pacchetto gcc-multilib perché il mio sistema è a 64bit mentre OpenWRT compila a 32bit, inoltre se lanciate il comando:

$ echo ‘int main(int argc, char **argv) { return 0; }’ | gcc -x c -o /tmp/a.out – -m32 -lc

ed ottenete:

gcc: selected multilib ’32’ not installed

allora il vostro sistema è configurato male… io ho aggiustato tutto con:

$ sudo ln -sf /usr/bin/gcc-4.6 /usr/sbin/gcc

perché le librerie multilib nel mio sistema si rifacevano alla versione 4.6 del gcc… verificate sul vostro a quale versione fanno riferimento ed usate un comando acconcio.

Bene, una volta aggiustate queste cose il tutto si compila con il solito

$ make

e, dopo un bel po’ di tempo, se la compilazione è andata a buon fine, otterrete:

$ ls bin/x86/
md5sums
openwrt-x86-generic-combined-ext4.img.gz
openwrt-x86-generic-combined-jffs2-128k.img.gz
openwrt-x86-generic-combined-jffs2-64k.img.gz
openwrt-x86-generic-combined-squashfs.img.gz
openwrt-x86-generic-rootfs-ext4.img.gz
openwrt-x86-generic-rootfs-jffs2-128k.img.gz
openwrt-x86-generic-rootfs-jffs2-64k.img.gz
openwrt-x86-generic-rootfs-squashfs.img.gz
openwrt-x86-generic-rootfs.tar.gz
openwrt-x86-generic-vmlinuz
packages/

Il file openwrt-x86-generic-vmlinuz è un kernel per x86 mentre gli altri file sono il rootfs memorizzato in diversi formati, a noi ne basta uno e quello che più ci facilita le cose con QEMU è quello in formato EXT4; quindi decomprimiamolo:

$ cd bin/x86/
$ gzip -d openwrt-x86-generic-rootfs-ext4.img.gz

ed andiamo quindi a lanciare QEMU con il comando che segue:

$ qemu -kernel openwrt-x86-generic-vmlinuz -net nic,model=ne2k_pci -append “root=/dev/sda” openwrt-x86-generic-rootfs-ext4.img

Il risultato è riportato in figura:

openwrt-ss

Enjoy! :)

Su Rodolfo Giometti

Ingegnere informatico libero professionista ed esperto GNU/Linux offre supporto per: - device drivers; - sistemi embedded; - sviluppo applicazioni industriali per controllo automatico e monitoraggio remoto; - corsi di formazione dedicati. Manutentore del progetto LinuxPPS (il sottosistema Pulse Per Second di Linux) contribuisce attivamente allo sviluppo del kernel Linux con diverse patch riguardanti varie applicazioni del kernel e dispositivi (switch, fisici di rete, RTC, USB, I2C, network, ecc.). Nei 15+ anni di esperienza su Linux ha lavorato con le piattaforme x86, ARM, MIPS & PowerPC.

Lascia un commento

Utilizzando il sito, accetti l'utilizzo dei cookie da parte nostra. maggiori informazioni

Questo sito utilizza i cookie per fonire la migliore esperienza di navigazione possibile. Continuando a utilizzare questo sito senza modificare le impostazioni dei cookie o clicchi su "Accetta" permetti al loro utilizzo.

Chiudi