Versione 1 del 2007-01-30 23:12:35

Nascondi questo messaggio
Italiano English
Modifica History Actions

Asus_WL-500g_e_openwrt_rc6


  • INTRO


In questo documento tratto come far vedere un pen drive usb alla vostra macchina mipsel per farci fare il boot o semplicemente per aumentare la memoria a disposizione (che è sempre moooooolto risicata ). Ho fatto le prove su un asus wl500g deluxe con openwrt rc6 ( attenzione per rc inferiori alla 6 potrebbe non funzionare questo procedimento).La quasi totalità delle info che trovate qui di seguito sono state prese dalla documentazione on-line reperibile su www.openwrt.org.Inoltre questo documento è altamente migliorabile, quindi chi pensa di poter aggiungere, completare o cancellare del testo, è invitato a farlo!


  • INFORMAZIONI GENERALI


Host utilizzati:

host remoto ( linux ) da cui ho lavorato --> 192.168.0.10 (ethernet)

( Asus wl500g-deluxe )Openwrt rc6 --> 192.168.0.2 (ethernet)

Openwrt consta di 2 filesystem :

SquashFS --> kernel + filesystem read-only

JFFS2 --> filesystem scrivibile

Quando openwrt parte, verifica dapprima l'esistenza del filesystem JFFS2 e se non lo trova fa il boot da SquashFS. Di default il JFFS2 è popolato con link simbolici ai file del SquashFS. Per fare delle modifiche che rimangano effettive ai prossimi riavvii basta eliminare i link simbolici su JFFS2 e sostituirli con i file che si vuole ( ovviamente mantenendo il nome del link simbolico ). Per esempio il file /etc/resolv.conf ( che si occupa di indicare l'ip del ns da usare ):

root@Asus_WRT_1:~# ls -l /etc/resolv.conf

lrwxrwxrwx 1 root root 16 Jan 1 00:06 /etc/resolv.conf -> /tmp/resolv.conf

in queste condizioni se lo si modifica ( vi /etc/resolv.conf ), le modifiche avranno effetto fino al prossimo riavvio dopodichè andranno perse.Per rendere le modifiche effettive si deve cancellare il link simbolico e ricreare un file nella stessa posizione e con lo stesso nome del link appena cancellato. Solo allora le modifiche che si apporteranno rimarranno effettive anche ai prossimi riavvii :

root@Asus_WRT_1:~# rm /etc/resolv.conf ;touch /etc/resolv.conf ;vi /etc/resolv.conf

Openwrt usa la directory /etc/modules.d per caricare automaticamente i moduli ad ogni riavvio.


  • BACKUP DEI DATI SULL'OPENWRT


Ti indico la procedura di backup per evitare di fare dei casini irreversibili. Ci sono 2 procedure:

1. ( procedura rozza ) sshti sull'asus e fai un mega tarrone delle configurazioni :

root@Asus_WRT_1:~#tar -czvf backup_asus.tar.gz /etc/

copia tutto sul pc 192.168.0.10 per esempio nella cartella /root/backup_asus

root@Asus_WRT_1:~#scp root@192.168.0.10:/root/backup_asus backup_asus.tar.gz

2. ( procedura più pulita ) oppure procedi così dal pc remoto 192.168.0.10 per fare il backup dell'intero firmware :

$ssh root@192.168.0.2 'dd if=/dev/mtdblock/1' > firmware-backup.trx

ti troverai il backup del firmware nella directory corrente.


  • INSTALLAZIONE DEL PENNINO USB


I moduli necessari sono :

root@Asus_WRT_1:~#ipkg install kmod-usb-uhci (usb1.1)

root@Asus_WRT_1:~#ipkg install kmod-usb2 (usb2.0 ehci-hcd)

root@Asus_WRT_1:~#ipkg install kmod-usb-storage

root@Asus_WRT_1:~#ipkg install kmod-vfat (supporto per fat32)

root@Asus_WRT_1:~#ipkg install kmod-ext2 kmod-ext3 (supporto per ext3; magari per un samba)

Passiamo ora al partizionamento e alla formattazione del pennino. Ci sono 2 modi: farlo da un pc OPPURE farlo direttamente sull'host openwrt ( l'asus nel mio caso ).

1.da pc

[

è il metodo che io ho preferito sia perchè così mi sono risparmiato di scaricare altri pacchetti necessari per queste operazioni sull'asus ( gli apparati hanno una memoria generalmente risicata ), sia perchè ho avuto dei priblemi nel formattare il pennino direttamente sul'asus.Trovate ( tramite dmesg ) come si chiama il vostro pennino ( generalmente sd qualcosa ). Creiamo la tabella delle partizioni :

bash-3.00#fdisk /dev/sda

una volta partito fdisk digita 'p' per vedere quali partizioni ci sono e 'd' seguito dal numero della partizione per cancellarle. Poi sempre con 'p' verifichi che non hai più partizioni. Ora devi creare una nuova partizione quindi digita 'n' e se la vuoi primaria (p) e 1. Per riempire la chiavetta intera premi enter 2 volte. Se vuoi creare una partizione FAT32 digita 't' e poi 'b'. Se vuoi creare una prtizione linux digita 't' e poi'83'. Ora digita 'w' per scrivere la tabella di partizioni sulla chiavetta ( non puoi più tornare indietro!). Ora devi formattare la chiavetta :

bash-3.00#mkfs.vfat -F 32 /dev/sda1 ( se hai scelto fat32 )

bash-3.00#mkfs.ext3 /dev/sda1 (se hai scelto linux e la vuoi in ext3)

linux offre diversi file system con il rispettivo formattatore di fs ( mkfs.reiserfx, mkfs.ext2 ecc... tab è tuo amico come dice Sal!!! ).

]

2.da openwrt

[ serve fdisk ma non è presente nei repository della rc6 quindi aggiungiamo il backports della rc5 /etc/ipkg.conf

root@Asus_WRT_1:~#echo src backports http://downloads.openwrt.org/backports/rc5 >> /etc/ipkg.conf root@Asus_WRT_1:~#ipkg update root@Asus_WRT_1:~#ipkg install fdisk

Ora dovi sgamare come viene riconosciuto dal sistema il pennino. Plugga il pennino e lancia dmesg; dovresti trovare una voce del genere /dev/scsi/host0/bus0/target0/lun0 ---> questo è il tuo pennino. Creiamo la tabella delle partizioni:

root@Asus_WRT_1:~#fdisk /dev/scsi/host0/bus0/target0/lun0

Per formattare la chiavetta sull'openwrt abbiamo bisogno di altri strumenti:

root@Asus_WRT_1:~#ipkg install e2fsprogs root@Asus_WRT_1:~#mkefs -j /dev/scsi/host0/bus0/target0/lun0/part1 (per la formattazione)

Se ti esce un errore del tipo che non trova il file mke2fs significa che manca il link simbolico :

root@Asus_WRT_1:~#ln -s /proc/mounts /etc/mtabs (???non ho idea di cosa sia---oltretutto è vuoto???)

]

Verifica che esista la cartella /mnt sul tuo apparato e se non esiste creala:

root@Asus_WRT_1:~# mkdir -p /mnt

Da questo punto in poi devi aver pluggato il pennino sull'apparato perchè tocca copiare tutto il contenuto della flash sulla usb :

root@Asus_WRT_1:~#mount -t ext3 /dev/scsi/host0/bus0/target0/lun0/part1 /mnt ( montiamo il pennino in /mnt)

Ora hai tutto il contenuto del pennino in /mnt. Al prossimo riavvio il demone di hotplug dovrebbe incaricarsi di montarti in automatico il pennino in /mnt/disc0_1 o qualcosa del genere ( il che sarà un priblema per il boot da usb ).


  • BOOTING DA PENNINO USB


root@Asus_WRT_1:~#mkdir /tmp/root ( creiamo una cartella di appoggio in cui copiare quello che verrò poi copiato sul pennino )

di queste 2 righe che seguono una esclude l'altra:

root@Asus_WRT_1:~#mount -o bind /rom /tmp/root ( se vuoi caricare lo squashfs sulla usb e non ti interessa di eventuali modifiche che hai fatto sul JFFS2 )

root@Asus_WRT_1:~#mount -o bind / /tmp/root ( per chi ha fatto delle modifiche sul JFFS2.E' il mio caso e mi sento di consigliarlo! )

root@Asus_WRT_1:~#cp /tmp/root/* /mnt -a ( copiamo tutto da /tmp/root in /mnt (pennino usb) compresi i file nascosti )

root@Asus_WRT_1:~#umount /tmp/root ( smonto la directory /tmp/root che non mi serve più )

root@Asus_WRT_1:~#umount /mnt ( smonto il pennino usb )

Ora fai un backup del file /sbin/init

root@Asus_WRT_1:~#mv /sbin/init /sbin/init.BK

e rimpiazzalo con questo nuovo init:


#!/bin/sh

# change this to your boot partition

boot_dev="/dev/scsi/host0/bus0/target0/lun0/part1"

# install needed modules for usb and the ext3 filesystem

# **NOTE** for usb2.0 replace "uhci" with "ehci-hcd"

# **NOTE** for ohci chipsets replace "uhci" with "usb-ohci"

for module in usbcore ehci-hcd usb-ohci uhci scsi_mod sd_mod usb-storage jbd ext3; do {

  • insmod $module

}; done

# this may need to be higher if your disk is slow to initialize

sleep 4s

#aggiunta da pedro per smontare il pennino se hotplug lo ha già montato

umount /mnt/disc0_1

# mount the usb stick

mount "$boot_dev" /mnt

# if everything looks ok, do the pivot root

[ -x /mnt/sbin/init ] && {

  • mount -o move /proc /mnt/proc && \

    pivot_root /mnt /mnt/mnt/disc0_1 && {

    • mount -o move /mnt/dev /dev mount -o move /mnt/tmp /tmp

      mount -o move /mnt/jffs2 /jffs2 2>&-

      mount -o move /mnt/sys /sys 2>&-

    }

}

# finally, run the real init (from USB hopefully).

exec /bin/busybox init


Poi per verificare se al riavvio il boot viene fatto dal pennino o dalla flash puoi visualizzare un messaggio nel banner dell'openwrt :

$echo "BOOT FROM FLASH" >> /etc/banner

$mount /dev/scsi/host0/target0/lun0/part1 /mnt

$echo "BOOT FROM USB" >> /mnt/etc/banner

Ora dovrebbe essere tutto pronto per il boot da usb.Riavvia e in bocca al lupo. Se tutto è andato a buon fine non appena ti loggi sul tuo asus dovresti vedere il banner seguito dalla scritto BOOT FROM USB e il file /sbin/init è in forma binaria ( è quello originale dell'openwrt! ). Se l'asus non riesce per qualche motivo a partire da usb allora partirà dalla flash di default e ti mostrerà il messaggio BOOT FROM FLASH.

to fix:

nel nuovo file /sbin/init il vero e proprio cambio di root del sistema dalla flash alla usb avviene con il comando

root@Asus_WRT_1:~#pivot_root new_root old_root

dove nella new_root si indica la radice della usb /mnt e in old_root va messo il percorso per memorizzare la vecchia root di modo da rendere il cambio di root un processo reversibile.Secondo quanto scritto nel file la vecchia root dovrebbe essere in /mnt/mnt ma così non avviene.(idee!??!)