Newsgroup: it.comp.lang.c
Titolo: [compilazione kernel linux] eseguibili troppo grandi

Salve a tutti, ho una ubuntu 8.04 con gcc 4.2.4 e ho un problemino, quando
compilo (o ricompilo) un modulo l'eseguibile .ko e' sempre di dimensioni
molto superiori a quanto dovrebbe, ad esempio ho ricompilato il pacchetto
usb-rndis-lite che contiene i moduli rndis_host.ko, cdc_ether.ko e
usbnet.ko e tutti sono di circa 150/200 kb contro i 15/20 originali, ma
questo vale anche per altri moduli sempre ricompilati singolarmente e con
questo comando:
 
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
In precedenti installazioni i files erano di dimensioni normali, e credo
che ricompilando l'intero kernel dall'albero dei sorgenti il problema
sparisca.
Da cosa puo' dipendere?
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 Da cosa puo' dipendere?
Dai simboli per il debug.
man strip 

 man strip
Scusa l'ignoranza, devo farlo attraverso il makefile o che altro?
Grazie per la risposta


 Grazie per la risposta
Mi rispondo da solo, ho capito...ho dato
 strip -s usbnet.ko 
et voila' 15k, ma.....non c'e' un modo per 'stripparli' in fase di
compilazione, automatizzando quindi il tutto?


 compilazione, automatizzando quindi il tutto?
Vedendo il man mi sembra che serva
strip -S...
Comunque sì certo basta non generarli, di solito il flag di gcc che
genera i simboli di debug è "-g" se non sbaglio.

Addì  martedì 29 giugno 2010 01:29 neonano scrisse:

Volevo dire:
Dipende dalle tabelle dei simboli usati per il linking e
per il debug

 compilazione, automatizzando quindi il tutto?
Come accennato le tabelle dei simboli comprendono anche le 
informazioni per il linking quindi no, non si può strippare un codice 
oggetto se non dopo averlo linkato in un programma eseguibile.
Però il compilatore gcc non aggiunge le informazioni aggiuntive per 
il debug solo se usi le opzioni oppurtune; per default nell'oggetto vi 
sono solo le informazioni per il linking. In effetti prima ti ho dato una 
informazione imprecisa.

neonano ha scritto:





ok, ma allora la domanda e':
perche' fino ad oggi e con tutte le distro usate (compresa la stessa
ubuntu 8.04) gli eseguibili del kernel erano di dimensioni normali e ora
comprendono tali informazioni aggiuntive? I makefile e icomandi usati per
compilare sono smmpre gli stessi cosi' come il compilatore :-|


 cosi' come il compilatore :-|
Assolutamente no. Le versioni di sviluppo (quelle segnate -devel),
necessarie per compilare il kernel ed i suoi moduli, comprendono gli 
header le informazionoi per il linking e talvolta hanno delle opzioni per 
abilitare il debug.
Viceversa le versioni finite dei vari pacchetti vengono strippate, tali
informazioni sono presenti e sembrano avere dimensioni minori.

neonano ha scritto:






Ok, morale ella favola: mi strippo tutto a manina
bye e tnx


 bye e tnx
Scusa un attimo, ma per quale motivo?
Che ti cambia se sono 100kb invece di 90?
Pensi che ti rallenti il sistema? Che ti si riempia il disco fisso :D?
E anche assumendo che ti serva veramente, che fai ogni volta che
ricompili un kernel nuovo ti ricompili e ristrippi tutti i moduli?