IlPuntoTecnico
Hardware e Software => Connessioni ADSL/VDSL/FTTC => Topic aperto da: Cris - 27 Maggio 2006, 22:51
-
Come avrete visto a molte persone il firmware di Submax non funziona :'(
Questo è dovuto a un incompatibilità del kernel con la flash Atmel all'interno dei "nuovi" 30xT.
Ok... ho bisogno di una mano da chi il kernel aztech (quello di submax tanto per intenderci) funziona già.
Se leggete questo thread https://www.ilpuntotecnico.com/forum/index.php/topic,1948.0.html vedrete che stavamo provando a patchare il kernel per farlo funzionare su i 30xT con flash Atmel.
Ecco cosa e necessario fare passo passo:
0 - Do per scontato che avete un PC con windows e un 30xT con kernel Aztech ;)
1 - Scaricate zip da : http://rapidshare.de/files/21550390/dump_kernel.zip.html (scusate ma rapidshare.de era l'unico modo per condividere un file velocemente che mi è venuto in mento)
2 - Scompattate tutto su un'unica directory
3 - Avviate tftpd32.exe (sbloccatelo per farlo passare dall firewall se ne
cessario)
4 - Collegatevi tramite telnet al 30xT (login: root pwd: admin)
5 - Da shell sul 302T digitate:
cd /var
tftp -g -r sector2 192.168.1.100
chmod 777 sector2
Ovviamente 192.168.1.100 è l'indirizzo del mio server tftp. Voi mettete il vostro. A questo punto potete usare sector2.
6 - Adesso dobbiamo trovare l'indirizzo del codice del kernel nella RAM. Basta lanciare questa riga per avere l'indirizzo iniziale e finale del kernel:
cat /proc/iomem
7 - Estraiamo il kernel e portiamo sul PC. Basta scrivere:
cd /var
/var/sector2 /dev/mem kernel_begin_address kernel_end_address >/var/vmlinux
tftp -p -l vmlinux 192.168.1.100
rm vmlinux
-> Ovviamente kernel_begin_address e kernel_end_address sono gl iindirizzi ottenuti tramite "cat /proc/iomem" in "kernel code" <-
Nella directory dove avevate lanciato tftpd32.exe adesso c'è pronto il kernel scompattato 8)
Se avete problemi leggete più sotto in questo thread.
8 - Fatto! mandate un messaggio in privato e vi fornisco il mio indirizzo email dove inviare il file
9 - Appena ricevete il mio indirizzo email compattatelo in formato .zip, .rar o .7z e inviatemelo :P
Grazie per la collaborazione!
Ciao,
Cris 8)
-
ma poi come lo ricomprimi?
-
Te l'ho scritto 2 volte qui: https://www.ilpuntotecnico.com/forum/index.php/topic,1948.45.html.
Leggi lì.
Se mi fornisci il kernel scompattato poi ci penso io. Ti mando il mio indirizzo email.
Ciao,
Cris
-
Per ricomprimerlo penso sia sufficiente metterlo nella home directory dei sorgenti del kernel russo e lanciare "makefile ram_zimage" per ottenere un immagine compressa in ram_zimage.bin.
forse hai ragione :D
tftp -p -l ./vmlinux 192.168.1.2
tftp: server says: Permission denied
cosa vuole?
-
scusami non ho mai usato tftpd su linux.... ;(
-
Neppure io. Te l'ho detto io uso il server FTP su Windows.
Che non gli piaccia il "./" davanti a vmlinux?
Non so... Leggi quello che ha scritto il server tftp sul log ...
Ciao,
Cris
P.S.: Forse c'è da modificare qualcosa nel makefile su mips-boards/ti_avalanche/ per ricomprimerlo.
-
azz ma scaricarlo con htttpd ? non riesco... uffa...
-
Ok... puoi usare pure httpd o qualsiasi altro server web... l'importante è che lo porti sul PC.
-
non riesco a scaricarlo dal router ! si blocca!
-
Forse perchè hai la RAM troppo piena o il kernel è troppo grande. Prova a scaricarlo in due parti:
cd var
/var/sector2 /dev/mem kernel_begin_address indirizzo_intermedio >/var/vmlinux.0
tftp -p -l vmlinux.0 192.168.1.100
rm vmlinux.0
/var/sector2 /dev/mem indirizzo_intermedio+1 kernel_end_address >/var/vmlinux.1
tftp -p -l vmlinux.1 192.168.1.100
rm vmlinux.1
Scegli l'indirizzo_intermedio in modo da tagliarlo in parti più o meno uguali. Occhio al +1 (ovviamente lo devi calcolare te)!
Ciao, Cris
-
ora faccio un ultima prova... se riesce ok ... altrimenti domani .....
-
Non hai un PC con WinXP? Usa il server tftpd32.exe per trasferire il file. A me non ha mai dato problemi. Mi viene in mente che forse il tftp client sul tuo firmware è diverso. Prova a controllare i parametri su http://www.busybox.net/downloads/BusyBox.html.
Se tftp ti sta proprio antipatico puoi lanciare un httpd su una porta diversa dalla 80 sullla directory /var
Dovrebbe funzionare lo stesso a meno che non tu sia a corto di RAM.
Prova:
/usr/sbin/thttpd -g -d /var -u root -p 8080
Puoi recuperare l'immagine del kernel a http://192.168.1.1:8080/vmlinux
O se hai spezzato il kernel in due(come ti dicevo sopra) a http://192.168.1.1:8080/vmlinux.0 e http://192.168.1.1:8080/vmlinux.1. Ovviamente ricordati di scaricare vmlinux.0 prima di fare "rm vmlinux.0".
Mi posti il kernel_begin_address e kernel_end_address ottenuti tramite "cat /proc/iomem" in "kernel code" ?
Grazie,
Cris
-
è quello che ho fatto... aspetta che provo anche da winzoz .... ma è tardi...
-
Magari i file che crei hanno i diritti sbagliati.
Prova a fare "chmod 666 vmlinux".
Rileggi un po' il messaggio sopra che l'ho modificato. Please.
-
FATTO ..... non era quello .... dava anche lo stesso errore in winzoz.... ma la linea
tftp -p -l /var/vmlinux 192.168.1.100
andava cambiata in
tftp -p -l vmlinux 192.168.1.100
comunque mandami la tua mail...
-
mi passi i sorgenti di sector2.c ?
-
Te l'avevo mandaa sula tua email su tiscali e te lh'o rimandata per messaggio privato.
-
I sorgenti di sector2 sono da qualche giorno sul thread "Quiete".
-
file inviato.....
-
facci sapere.... notte ;)
-
Grazie. Se tutto va bene lo patcho stanotte.
La prox settimana sono straimpegnato e prima del prox weekend non potrei metterci le mani.
Ciao, Cris
-
Ciao a tutti.
Prima di patchare il kernel ho provato a ricompattare l'immagine estratta dal kernel del mio 302T che sta funzionando adesso, mi pare sia l'originale Dlink per il 302T (lo so avrei dovuto provarea farlo prima).
Sto lavorando con i sorgenti del linux-2.4.17_mvl21_mc_09.
Ho copiato il kernel estratto dalla RAM in "vmlinux" nella directory principale.
Ho aggiunto nel makefile principale queste linee (in pratica ho tolto la dipendenza da vmlinux):
myram_zimage: srec2bin
$(MAKE) ram_zimage -C arch/$(ARCH)/mips-boards/ti_avalanche/inflater
$(SREC2BIN) ram_zimage.sre ram_zimage.bin
Visto che il file del kernel che abbiamo è già senza simboli ho fatto questa modifica nel makefile in \arch\mips\mips-boards\ti_avalanche\inflater nella sezione zimage.lzma commentando la linea:
$(CROSS_COMPILE)objcopy -S -O binary $(TOPDIR)/vmlinux zimage
e aggiungendo a seguire la linea:
cp $(TOPDIR)/vmlinux zimage
Putroppo non funzionava e mi dava:
mipsel-linux-ld -T zimage.script -r -b binary zimage.lzma -o zimage.o
mipsel-linux-ld -G 0 -static -G 0 -Map inflate.map -R /home/vmware/AR7/linux-2.4.17_mvl21_mc_09/vmlinux -no-warn-mismatch -T ld. script inflate.o zimage.o -o inflate
/home/vmware/AR7/linux-2.4.17_mvl21_mc_09/vmlinux: file not recognized: File format not recognized
make[1]: *** [ram_zimage] Error 1
make[1]: Leaving directory `/home/vmware/AR7/linux-2.4.17_mvl21_mc_09/arch/mips/mips-boards/ti_avalanche/inflater'
make: *** [myram_zimage] Error 2
Ho scoperto che il problema era la linea:
LOCALLINKFLAGS = -static -G 0 -Map inflate.map -R $(TOPDIR)/vmlinux
che ho provato a cambiare in:
LOCALLINKFLAGS = -static -G 0 -Map inflate.map
Ora però mi da un'altro errore:
LZMA 4.06 Copyright (c) 1999-2004 Igor Pavlov 2004-09-05
sed -e 's/@@OUTPUT_FORMAT@@/elf32-tradlittlemips/' \
-e 's/@@LOADADDR@@//' <zimage.script.in >zimage.script
mipsel-linux-ld -T zimage.script -r -b binary zimage.lzma -o zimage.o
sed -e 's/@@OUTPUT_FORMAT@@/elf32-tradlittlemips/' \
-e 's/@@LOADADDR@@//' <ld.script.in >ld.script
mipsel-linux-ld -G 0 -static -G 0 -Map inflate.map -no-warn-mismatch -T ld.script inflate.o zimage.o -o inflate
ld.script:56 invalid assignment to location counter
make[1]: *** [ram_zimage] Error 1
make[1]: Leaving directory `/home/vmware/AR7/linux-2.4.17_mvl21_mc_09/arch/mips/mips-boards/ti_avalanche/inflater'
make: *** [myram_zimage] Error 2
Penso che manchino i simboli per la mappatura dei segmenti tramite LD.
La riga 56 in ld.script è l'ultima riga ed è vuota... il messaggio di errore non mi aiuta a identificare il simbolo o i simboli mancanti.
C'è qualcuno che è più esperto di me in materia che può dare una mano?
Ciao,
Cris
-
Non è esattamente chiaro quali sono gli indirizzi dentro vmlinux che servono al compressore (quelli usati da LD).
Ho trovato questo simpatico post che potrebbe aiutare:
http://sourceware.org/ml/binutils/2005-02/msg00132.html
Con questa patch LD potrebbe ritornare informazioni più significative.
Sapete per caso dove trovare i sorgenti di "ld" nel toolchain
Io ho quelli di openwrt per WRT54. Anche il suo processore è mips ma gli eseguibili sembrano diversi (almeno dall lunghezza degli eseguibili).
Ciao,
Cris
-
Ok. Ultime notizie prima della prossima settimana.
Stavo cercando di risolvere il problema della compressione del kernel riscrivendo il loader.
Ma mi sono detto siamo sicuri che qualcuno non l'abbia già fatto?
Mi sono ricordato che Openwrt funziona (o almeno comincia a funzionare) su AR7.
Osvi sta lavorando alla versione 2 del firmware che dovrebbe basarsi su Openwrt... spero che si sia reso conto di quello che è già stato fatto (forse l'ha fatto lui?)
Ho scaricato i sorgenti della versione "kamikaze". Dando un'occhiata al makefile sembra che il vmlinux originale con i simboli non sia necessario. Eccetto per definire la variabile KERNEL_ENTRY(che non dovrebbe essere difficile da recuperare).
Quindi si potrebbe utilizzare questa versione del compressore per ricomprimere l'immagine patchata.
Ci vuole un po' di tempo per capire come abilitare la compilazione per AR7 di openwrt
Potere partire da qui:
http://wiki.openwrt.org/AR7Port
Fatemi sapere.
Ciao, Cris
-
bravo cris... OTTIMO LAVORO ..... aspetto con ansia.. se non rispondo subito non preoccuparti sto scorrazzando con la gsr ...... :D