me99-052.jpg
_______________________________________________________________

Domande e Risposte

Che cosa e’ il kernel?

Il kernel e’ il “cuore” del sistema operativo..il server principale per driver ed applicazioni
Nel caso di Linux si puo’ dire che Linux stesso sia il Kernel..mentre il sistema operativo si chiamaGNU..da qui GNU/Linux..anche se ormai nelle recenti distribuzioni Linux di GNU c’e’ ben poco..

Perche’ di parla di “ricompilare” il kernel?

Il kernel ,come qualsiasi altro programma,puo’ essere distribuito sotto varie forme.
Il ramo principale,prende il nome di “vanilla”..ed e’ possibile scaricare i sorgenti in formato tar.gz o bz2 su http://kernel.org
Ubuntu e Kubuntu adottano un kernel di default,preinstallato e precompilato (riconfigurato) quindi non c’e’ un reale bisogno di installare un altro kernel o ricompilare quello esistente

Quando devo ricompilare il kernel?

Quando ad esempio compri una periferica..e i driver sono disponibili all’interno del kernel (ad esempio i driver r8169 della scheda di rete realtek) ma non abilitati.
In questo caso e’ opportuno scaricare i sorgenti del kernel e configurarlo con l’opzione “r8169”
Se il vostro hardware funziona,cosi’ come le periferiche esterne..non c’e’ bisogno di ricompilare il kernel..tanto piu’ che il kernel di Ubuntu e’ stato revisionato e patchato dalla Canonical..prima di essere inserito nei repository ufficiali

E’ vero che se ricompilo il kernel il sistema va piu’ veloce?

Detta cosi’ sembra che basta ricompilarlo e stop.
No..bisogna configurarlo..ed eventualmente snellirlo di quei moduli che non usiamo e che abbiamo in previsione di non usare mai (es. portatile con scheda video ATI..nvidia,via,sis,matrox…non le useremo MAI).
Cosi’ facendo..magari toglieremmo qualche modulo superfluo che venina caricato al boot..e allora si che la velocita’ di boot diminuisce..e probabilmente ,se tutto configurato correttamente,anche il sistema puo’ trarne giovamento

Ho un Processore dual core..come posso sfruttare tutti e 2 i canali di accesso alla cpu?

Il kernel 2.6.17-10-generic di Ubuntu e’ gia’ impostato per il dual core e i dual processors in genere,cosi’ come e’ abilitato di default lo scaling della cpu,selezionabile in userspace (cioe’ controllabile da tool come kpowersave o cpufreqd)
Se avete un processore di classe i686 con queste caratteristiche,questo kernel e’ adatto per voi

Cosa sono i kernel headers?

E’ un insieme di files,solitamente ubicati in /usr/src, che permette di compilare e caricare driver esterni al kernel tree..senza necessariamente scaricare i sorgenti o ricompilare il kernel.
I driver verranno compilati utilizzando gli headers,ed installati in /lib/modules/’uname-a’

Capito..mentre i sorgenti dove sono?..non li trovo

Generalmente sono in /usr/src
Se avete installato il pacchetto linux-sources con synaptic o adept_manager dovreste vedere la directory scompattata..
Al suo interno ci sono i sorgenti del kernel,pronti per essere compilati e installati
Una volta installato il nuovo kernel..non e’ piu’ necessario avere i kernel-headers per compilare i moduli..basta avere i sorgenti in /usr/src

Cosa sono i “restricted-modules”?

E’ un insieme di script NON FREE..quindi con una licenza ambigua..che vengono inseriti nei repository dall’ Ubuntu Kernel Team..e piu’ o meno sono questi

This package provides restricted modules for Linux version 2.6.17 on generic x86/x86_64. Currently the following modules are included:
madwifi (Atheros)
fglrx (ATI)
nvidia
fcdsl2, fcdslsl, fcdslslusb, fcdslusb, fcdslusb2, fcpci (AVM ISDN)
These modules are "restricted" because they are not available under a completely Free licence.

Possiamo dire che sia un “metapacchetto” che si puo’ facilmente abilitare dal sources.list di apt-get
Ma con la dapper funzionava il wifi e con la edgy no!! la edgy fa schifo..

Ogni volta che si ricompila il kernel..vanno ricompilati PER FORZA tutti gli altri driver compilati ESTERNAMENTE..quindi scheda video,webcam,modem e quant’altro..(a patto che i driver non siano nel kernel)
Se state utilizzando il kernel dei repository..dovete sapere che magari nel kernel della edgy,per motivi a noi ignoti,non hanno inserito i driver per la tua scheda wifi..oppure sono stati rimossi dal tree principale..mentre sulla Dapper erano presenti..
Ecco a cosa serve conoscere il Kernel..se noi conosciamo tutti i driver delle nostre periferiche…facciamo in fretta a capire come mai con la Dapper il wifi funziona e con la edgy no
Se utilizziamo un kernel “vanilla” siamo per forza obbligati a gestire da soli i nostri driver,e non puo’ che essere cosa migliore
Se state cercando di ricompilare il kernel per necessita’.forse non vi interessa..ma se cercate il tuning ideale..questo e’ il massimo!!
Consiglio vivamente di scaricare,configurare e dinstallare un kernel per i fatti propi…

Prerequisiti

sudo apt-get install build-essential bin86 kernel-package libqt3-headers libqt3-mt-dev gcc libncurses5 libncurses5-dev

Questo prepara alla compilazione del kernel..
Se desiderate scaricare i sorgenti dai repository..ad esempio i sorgenti per il kernel 2.6.17
sudo apt-get install libqt3-dev linux-source-2.6.17
Facciamo l’esempio di un kernel “vanilla” scaricato da kernel.org

cd /usr/src
tar xvfz linux-sources-2.6.18.2.tar.gz
cd linux-sources-2.6.18.2

A questo punto siamo pronti alla configurazione..abbiamo installato le librerie necessarie per l’interfaccia di configurazione grafica

Ncurses:make menuconfig
Qt:make xconfig
Gtk:make gconfig

Per comodita’ utilizziamo “xconfig”.Prima pero’ salviamo la vecchia configurazione del kernel che si trova in /boot col comando
sudo make oldconfig
A terminale vi verra’ chiesto cosi’,di scegliere solamente le opzioni nuove..rispetto al vecchio kernel..ma voi premete sempre enter e rispondete sempre “yes” perche’ la configurazione la faremo graficamente propio per non creare problemi
Bene,ora apriamo questa configurazione

sudo make xconfig

Per ricompilare il kernel non è necessario essere root, anzi è sconsigliato. In debian, per policy, tutti i sorgenti contenuti in /usr/src (almeno quelli installati dai pacchetti debian) hanno come proprietario root e come gruppo proprietario src. Gli utenti del gruppo src hanno inoltre diritto di scrittura in /usr/src/*. Basterà dunque aggiungere al gruppo src l’utente che si vuole usare per la compilazione, con i seguenti comandi:
adduser nome_vostro_utente src

Ricordate di non usare l’utente root per ricompilare il kernel (e neanche per scompattarlo) altrimenti tutti i file che verranno creati apparterranno a root:root. Se a questo punto si cercherà di compilare dall’utente normale si avranno problemi di permessi e per risolverli dovrete dare un:
chown -R root:src /usr/src/
Se, inoltre, il gruppo src non ha più i diritti di scrittura dovranno anch’essi essere ripristinati con:
chown -R g+w /usr/src/*
Free Image Hosting at www.ImageShack.us
Ora e’ possibile selezionare o rimuovere i moduli preferiti..una volta eseguito questo passaggio basta salvare la conf. dal menu’ e chiudere la dialog

Compilazione

Ecco un esempio classico

make-kpkg --initrd --append-to-version -versione kernel_image kernel_headers modules_image

Vediamo le opzioni usate:

–append-to-version
serve ad aggiungere un nome personalizzato (non date troppo sfogo alla fantasia..nomi brevi e semplici)
–initrd
Il metodo piu’ semplice per creare un immagine initrd,ovvero l’insieme di moduli essenziali per caricare il kernel (opzionale)
kernel_image
Dice a make-kpkg di creare un immagine del kernel pacchettizzata in .deb
kernel_headers
In realta’ non c’e’ affatto bisogno dei kernel-headers perche’ per compilare i drivers verranno usati i sorgenti del kernel in /usr/src e i driver compilati finiranno in /lib/modules/’uname -a’…pero’ e’ sempre bene averne una copia a portata di mano
modules_image
Anche questa opzione e’ superflua,se non avete dei driver scaricati magari con module-assistant,in /usr/src (es. fglrx,fuse,nozomi,etc..)
In questo caso in un solo colpo..con l’opzione modules_image potrete “pacchettizzare” tutti i moduli scaricati e installati al di fuori del kernel..cosi’ da poterli facilmente installare con un click (dopo un reboot col nuovo kernel)
Per una panoramica su tutte le opzioni possibili leggere la guida DEBIANIZZATI in fondo al topic..

Installazione
Per “pulire” i sorgenti e prepararli ad un eventuale ricompilazione
make-kpkg clean
spostiamoci di nuovo in /usr/src
cd /usr/src

Per installare i pacchetti debian creati (qualcosa del tipo kernel-image-2.6.17-nomepersonalizzato.deb)
e’ sufficiente dare un:

sudo dpkg -i kernel-image-2.6.17-nomepersonalizzato.deb
e cosi’ per tutti gli altri pacchetti che avete creato ..
Grub verra’ aggiornato in automatico (grub-update) e potete riavviare il sistema per selezionare il kernel appena installato (se non avete modificato grub non c’e’ problema,viene dato come primo kernel avviabile)

Informazioni Utili

Per altre informazioni ecco qualche ottimo wiki

Debianizzati: guida alla compilazione del kernel
Wiki Ubuntu:Compilazione kernel Ubuntu
Kernel.org:Sito ufficiale del Kernel Linux

Related Posts Plugin for WordPress, Blogger...

Il tuo indirizzo ip:
54.211.135.32

Valutazione 3.00 su 5
happy wheels 2 demo

Category:

Senza categoria

Tags:

,

Commenti via Facebook:

Leave a Reply

Your email address will not be published. Required fields are marked *

*

35 Comments

  • gforresu ITALY 12 anni ago

    ciao!
    Volevo solo un chiarimento:
    quando tu dici “Se, inoltre, il gruppo src non ha più i diritti di scrittura dovranno anch’essi essere ripristinati con:
    chown -R g+w /usr/src/* ”
    mi pare che chown non assegni i permessi di scrittura in una determinata cartella…non è che volevi scrivere “sudo chmod -R g+w /usr/src/* ” ?
    era solo per dirti questo..scusa il disturbo, ci si vede sul forum 😉

      Quota

  • gforresu ITALY 12 anni ago

    PS: ottima guida! complimenti 🙂

      Quota

  • no non e' sbagliato..cambi il propietario del file..non i permessi..il propietario e il gruppo..

      Quota

  • gforresu ITALY 12 anni ago

    non capisco perchè mi da questo “errore”?
    giacomo@giacomo-desktop:~$ chown -R g+w /usr/src/*
    chown: `g+w’: utente non valido

    ciao 😉

      Quota

  • hai creato prima il gruppo di scrittura?
    chown -R root:src /usr/src/
    cmq questa parte e’ facoltativa..io inizio sempre con un

    sudo make xconfig
    su
    e da root faccio il make-kpkg

      Quota

  • gforresu ITALY 12 anni ago

    “hai creato prima il gruppo di scrittura?”
    si si certo. stavo controllando la guida su debianizzati.org e lì indica di mettere “chmod -R g+w /usr/src/* “. Tutto qua, comunque non è un problema 😉
    grazie mille ciao

      Quota

  • Divilinux ITALY 12 anni ago

    chown -R root:root /usr/src/linux-2.6.20/debian/linux-headers-2.6.20-alien-2

    e’ tra l’altro un opzione che il processo di pacchettizzazione fa in automatico..quando ricompili il kernel..
    questo e’ un esempio fresco fresco..

    dpkg-gencontrol -isp -DArchitecture=i386 -plinux-headers-2.6.20-alien-2 \
    -P/usr/src/linux-2.6.20/debian/linux-headers-2.6.20-alien-2/
    chown -R root:root /usr/src/linux-2.6.20/debian/linux-headers-2.6.20-alien-2
    chmod -R og=rX /usr/src/linux-2.6.20/debian/linux-headers-2.6.20-alien-2
    dpkg –build /usr/src/linux-2.6.20/debian/linux-headers-2.6.20-alien-2 ..
    dpkg-deb: building package `linux-headers-2.6.20-alien-2′ in `../linux-headers-2.6.20-alien-2_2.6.20-alien-2-10.00.Custom_i386.deb’.

      Quota

  • valerio ITALY 12 anni ago

    Ciao. Questo è l’errore che mi da quando tento di compilare:
    valerio@ubuntu:/usr/src/linux-2.6.20.1$ make-kpkg –initrd –append-to-version -versione kernel_image kernel_headers modules_image
    exec make -f /usr/share/kernel-package/ruleset/minimal.mk debian APPEND_TO_VERSION=-versione INITRD=YES
    net/ipv4/netfilter/Kconfig:667:warning: leading whitespace ignored
    make[2]: *** [silentoldconfig] Error 1
    make[1]: *** [silentoldconfig] Error 2
    net/ipv4/netfilter/Kconfig:667:warning: leading whitespace ignored
    make[2]: *** [silentoldconfig] Error 1
    make[1]: *** [silentoldconfig] Error 2
    net/ipv4/netfilter/Kconfig:667:warning: leading whitespace ignored
    make[2]: *** [silentoldconfig] Error 1
    make[1]: *** [silentoldconfig] Error 2
    net/ipv4/netfilter/Kconfig:667:warning: leading whitespace ignored
    make[2]: *** [silentoldconfig] Error 1
    make[1]: *** [silentoldconfig] Error 2
    net/ipv4/netfilter/Kconfig:667:warning: leading whitespace ignored
    make[2]: *** [silentoldconfig] Error 1
    make[1]: *** [silentoldconfig] Error 2
    Can’t find string terminator ‘”‘ anywhere before EOF at -e line 1.
    /bin/sh: Syntax error: “(” unexpected
    /usr/share/kernel-package/ruleset/misc/version_vars.mk:123: *** Error. The version number * * Riavvio configurazione… * * * Impostazioni generali * Versione locale – aggiungi al rilascio del kernel (LOCALVERSION) [86×64] 86×64 Aggiungi automaticamente informazioni sulla versione alla stringa della versione (LOCALVERSION_AUTO) [Y/n/?] y Supporto per pagine di memoria anonima (swap) (SWAP) [Y/n/?] (NUOVO) abortito! L’input/output della console e’ rediretto. Eseguire ‘make oldconfig’ per aggiornare la configurazione. 2.* * Riavvio configurazione… * * * Impostazioni generali * Versione locale – aggiungi al rilascio del kernel (LOCALVERSION) [86×64] 86×64 Aggiungi automaticamente informazioni sulla versione alla stringa della versione (LOCALVERSION_AUTO) [Y/n/?] y Supporto per pagine di memoria anonima (swap) (SWAP) [Y/n/?] (NUOVO) abortito! L’input/output della console e’ rediretto. Eseguire ‘make oldconfig’ per aggiornare la configurazione. 6.* * Riavvio configurazione… * * * Impostazioni generali * Versione locale – aggiungi al rilascio del kernel (LOCALVERSION) [86×64] 86×64 Aggiungi automaticamente informazioni sulla versione alla stringa della versione (LOCALVERSION_AUTO) [Y/n/?] y Supporto per pagine di memoria anonima (swap) (SWAP) [Y/n/?] (NUOVO) abortito! L’input/output della console e’ rediretto. Eseguire ‘make oldconfig’ per aggiornare la configurazione. 20* * Riavvio configurazione… * * * Impostazioni generali * Versione locale – aggiungi al rilascio del kernel (LOCALVERSION) [86×64] 86×64 Aggiungi automaticamente informazioni sulla versione alla stringa della versione (LOCALVERSION_AUTO) [Y/n/?] y Supporto per pagine di memoria anonima (swap) (SWAP) [Y/n/?] (NUOVO) abortito! L’input/output della console e’ rediretto. Eseguire ‘make oldconfig’ per aggiornare la configurazione. .1-versione* * Riavvio configurazione… * * * Impostazioni generali * Versione locale – aggiungi al rilascio del kernel (LOCALVERSION) [86×64] 86×64 Aggiungi automaticamente informazioni sulla versione alla stringa della versione (LOCALVERSION_AUTO) [Y/n/?] y Supporto per pagine di memoria anonima (swap) (SWAP) [Y/n/?] (NUOVO) abortito! L’input/output della console e’ rediretto. Eseguire ‘make oldconfig’ per aggiornare la configurazione. is not all lowercase. Since the version ends up in the package name of the kernel image package, this is a Debian policy violation, and the packaging system shall refuse to package the image. . Stop.
    Failed to create a ./debian directory: Nessun file o directory at /usr/bin/make-kpkg line 1062.
    Cosa posso fare?

      Quota

  • semplicemente lanciare la compilazione da root..e non da utente normale..
    se stai compilando i sorgenti gia’ revisionati (deu repository per intenderci) prima ti sei scordato di dare

    sudo make-kpkg clean

      Quota

  • Maramax ITALY 12 anni ago

    @Valerio
    Devi creare il link alla directory /usr/src/linux
    nel tuo caso il comando è

    sudo ln -s /usr/src/linux-2.6.20.1 /usr/src/linux

      Quota

  • non e' necessario maramax..:)

      Quota

  • wesbluemarine ITALY 12 anni ago

    scusami ma come faccio a capire i moduli che sono fondamentali e quelli che non lo sono… 🙁

      Quota

  • hehe..devi conoscere a fondo l’hardware del tuo pc..una lista universale non c’e’
    e’ quello il difficile della ricompilazione..mica quei 3 comandi messi in croce
    Di base pero’ non c’e’ granche’ da toccare,c’e’ da levare i moduli che non si usano..per diminuire la grandezza dell’immagine finale (meglio se meno di 4MB)..e il resto e’ hacking..ovvero selezionare quei moduli che possono migliorare il kernel….

      Quota

  • wesbluemarine ITALY 12 anni ago

    ho provato ad eliminare qualcosa e a mettere l’ottimizzazione per il mio processore….speriamo via….ho notato però che al boot non mi fa scegliere il kernel e mi dà direttamente quello nuovo….come faccio a fare l’update che citi nella guida?

      Quota

  • per cambiare la sequenza di avvio c’e’ un comando che non ricordo..comunque basta che commenti

    #hiddenmenu

    nel menu.lst per accedere direttamente al menu’ di grub e selezionare il kernel

      Quota

  • wesbluemarine ITALY 12 anni ago

    scusa ma com’è possibile che caricando il nuovo kernel mi funzioni tutto come prima?cioè….mi va beryl….e io ho scelto il kernel all’avvio….

      Quota

  • ma..il kernel e’ solo il “nocciolo” del sistema operativo..il sistema e’ sempre quello..;)
    credevi cambiasse qualcosa a livello visivo..o di programmi o altro?

      Quota

  • wesbluemarine ITALY 12 anni ago

    no….pensavo dovessi installare i driver video…

      Quota

  • tutti i driver esterni al kernel vanno ricompilati..quello si

      Quota

  • wesbluemarine ITALY 12 anni ago

    i driver delle scheda video intel non sono esterni?

      Quota

  • nn lo so..non ho schede intel..
    hai dovuto installare dei driver?..se non lo hai fatto vuol dire che sono inclusi nel kernel

      Quota

  • wesbluemarine ITALY 12 anni ago

    no non ho dovuto installare nulla 🙂

      Quota

  • walter ITALY 12 anni ago

    Ma scusa… a che serve fare “sudo make oldconfig”, configurare, e poi subito dopo “sudo make xconfig” se il file “.config” viene comunque sovrascritto con la seconda configurazione?
    A meno che tu non abbia voluto dire di “salvare il vecchio file ‘.config’ da un’altra parte o rinominarlo in ‘.oldconfig’ per poter ricompilare il vecchio kernel in un secondo momento”… non ho capito.

    E poi, capisco salvare la vecchia configurazione per una ricompilazione successiva, ma se salvi il vecchio kernel ed i vecchi moduli (che vengono comunque conservati se precisi un diverso titolo custom), non è la stessa cosa? So che con GrUB e LiLo puoi comunque scegliere tra più di un kernel. Però averne una copia di backup può salvare il giorno, a volte. Scusa per la confusione. 🙂

    E infine, io ho sempre ricompilato il kernel come root:root… e non ho mai avuto problemi. Perchè suggerisci di ricompilare e creare file come root:src? Proprio perchè il kernel è il “nucleo” del sistema operativo, la parte più importante, non si dovrebbe trattare con tanta leggerezza. Così, appena un utente qualsiasi, che magari neanche sa che cosa è un kernel, appartiene al gruppo src e -metti il caso- cancella o modifica per sbaglio il kernel… poi che si fa? Se non hai un kernel di riserva non combini granchè… puoi solo riparare con una distro live, ma neanche così tanto…

    Nel messaggio principale dici che è sconsigliato compilare il kernel da root… ma in un messaggio successivo dici che “questa parte è facoltativa”…
    …non ho capito.

      Quota

  • @walter
    ognuno ha imparato a compilare il kernel in maniera diversa..anche io mi domando perche’ tutte le guide riportano ad esempio

    ln -s /usr/src/linux

    quando non c’e’ ne’ assolutamente bisogno
    Questa guida e’ stata scritta appena ho aperto il Blog..giusto per riempirlo perche’ era propio vuoto..e poi non ci ho piu’ messo mano
    La guida,tra l’altro,non e’ mia ma e’ stata presa da quella di debianizzati,di cui il link a fine articolo

    Ma scusa… a che serve fare “sudo make oldconfig”, configurare, e poi subito dopo “sudo make xconfig” se il file “.config” viene comunque sovrascritto con la seconda configurazione?

    Quando scarichi e prepari un nuovo kernel lanci di solito make oldconfig per importare una configurazione precedente.
    Ovviamente i moduli NUOVI vengono proposti durante questo processo..
    siccome non mi e’ mai piaciuto scegliere i moduli da terminale..basta tenere premuto enter fino a quando non finiscono le domande sui nuovi moduli che vengono assunti come YES di default
    DOPO,con molta calma e senxza strabuzzare gli occhi,si possono sempre sistemare dalla piu’ pratica interfaccia grafica
    Dal momento che uso linux da 5 anni ho imparato un mio metodo di compilazione del kernel,con tutte le sfaccettature,che non sono riscontrabili in nessuna guida..

    E poi, capisco salvare la vecchia configurazione per una ricompilazione successiva, ma se salvi il vecchio kernel ed i vecchi moduli (che vengono comunque conservati se precisi un diverso titolo custom), non è la stessa cosa? So che con GrUB e LiLo puoi comunque scegliere tra più di un kernel. Però averne una copia di backup può salvare il giorno, a volte. Scusa per la confusione.
    Certo..ne ho sempre 10-12 di kernel installati tra memtest,recovery e altro..ma non capisco cosa dovrebbe essere la stessa cosa..
    😉

    E infine, io ho sempre ricompilato il kernel come root:root… e non ho mai avuto problemi. Perchè suggerisci di ricompilare e creare file come root:src? Proprio perchè il kernel è il “nucleo” del sistema operativo, la parte più importante, non si dovrebbe trattare con tanta leggerezza. Così, appena un utente qualsiasi, che magari neanche sa che cosa è un kernel, appartiene al gruppo src e -metti il caso- cancella o modifica per sbaglio il kernel… poi che si fa? Se non hai un kernel di riserva non combini granchè… puoi solo riparare con una distro live, ma neanche così tanto…
    Io accetto i tuoi preziosi consigli..che comunque conosco gia’.
    Questo pezzo..root:root e’ stato preso pari pari dalla guida debianizzati,come ripetuto prima,ed il link e’ li anche per eventuali delucidazioni..sai..magari in un blog puoi fare un riassunto e non scrivere tutto quanto
    😉

      Quota

  • Potresti aggiungere “Come disinstallare un kernel compilato da noi?”…che non ne ho proprio idea…

      Quota

  • @Philip
    E’ semplice..
    Visto che alla fine crei un .deb, ti basta aprire il gestore-pacchetti (adept o synaptic) e selezionare per la rimozione il pacchetto del kernel che hai installato.
    Automaticamente viene rimossa la stringa in /boot/grub/menu.lst..quindi non c’e’ altro da fare
    😉

      Quota

  • E' vero…Grazie dell'aiuto!!

      Quota

  • jackass ITALY 11 anni ago

    divi ma non c'è la possibilita di aggiungere un modulo senza dover ricompilare tutto daccapo?

      Quota

  • @jackass
    se si tratta di abilitare un modulo del kernel purtroppo no..va necessariamente ricompilato.

      Quota