Il Forum è consultabile solo in modalità lettura. Per domande o consigli iscriviti al nostro GRUPPO FACEBOOK / COMMUNITY cliccando qui

[Guida] Compilare un kernel personalizzato per Ubuntu

Discussione in 'Linux' iniziata da axlffx2forever, 9 Ott 2013.

  1. Introduzione


    In informatica, il kernel costituisce il nucleo di un sistema operativo. Si tratta di un software con il compito di fornire ai processi in esecuzione sull'elaboratore un accesso sicuro e controllato all'hardware e una porzione di tempo-macchina (multitasking).

    Installare un kernel ricompilato anziché uno di quelli precompilati forniti da Ubuntu può portare alcuni vantaggi, come:

    avere una configurazione diversa e più adatta alla propria macchina.
    velocizzare l'avvio di sistema, nel caso non si usi l'initrd.
    avere un sistema operativo leggermente più reattivo grazie all'ottimizzazione basata sul tipo di processore.

    Non è necessario compilare un kernel nei casi in cui l'hardware non funzioni alla perfezione o le periferiche non vengano completamente riconosciute. A volte per far riconoscere correttamente al sistema una data periferica basta caricare i moduli necessari con le dovute opzioni. È utile ricompilare il kernel solo se tali moduli non sono presenti o se si è certi che i driver della periferica sono presenti solo in una versione diversa da quella attualmente in uso. Inoltre, l'aumento di prestazioni tende a essere irrilevante, soprattutto su computer già veloci.


    È bene tenere presente che compilare un nuovo kernel significa, nella sostanza, cambiare sistema operativo, in quanto esso ne costituisce il motore; inoltre è richiesta un buona conoscenza del proprio hardware.

    Preparativi

    Installare le dipendenze

    Il processo di compilazione richiede l'attivazione nelle fonti apt software dei link ai file source,in seguito,l'installazione dei seguenti pacchetti:

    Codice:
     sudo apt-get install fakeroot build-essential crash kexec-tools makedumpfile kernel-wedge
    Codice:
     sudo apt-get build-dep linux 
    Codice:
     sudo apt-get install git-core libncurses5 libncurses5-dev libelf-dev asciidoc binutils-dev 
    Inoltre, se si desidera usare un'interfaccia grafica per configurare il kernel, è necessario installare uno dei seguenti pacchetti:

    libglade2-dev, se si usa Ubuntu.
    libqt3-mt-dev, se si usa Kubuntu,fino alla v12.10
    libqt4-dev-*,se si usa Kubuntu 13.04 e superiore.
    libncurses5-dev, per avere una interfaccia grafica direttamente dentro il terminale e spostarsi tra i menu usando la sola tastiera (utile per computer poco potenti o senza server grafico).

    Scaricare l'archivio dei sorgenti d
    Cosìel kernel


    Modo 1 (linux Ubuntu 9.0 in su)
    Si possono scaricare direttamente dalla fonte,tramite questi comando:

    Codice:
     sudo apt-get build-dep --no-install-recommends linux-image-$(uname -r) 
    Codice:
     apt-get source linux-ubuntu-modules-$(uname-r) 
    Modo 2

    Se si desidera usare l'ultima versione stabile del kernel Linux ufficiale (la cosiddetta versione vanilla), scaricare il pacchetto da questo indirizzo: http://www.kernel.org
    Se si desidera usare la versione del kernel Linux modificata dagli sviluppatori di Ubuntu, è possibile prelevarla dai repository, installando il pacchetto linux-source. Questa versione ha il vantaggio di contenere driver e componenti aggiuntivi che gli sviluppatori di Ubuntu hanno ritenuto di integrare nel kernel, ma per contro potrebbe non essere sempre aggiornata rispetto all'ultima versione del kernel Linux ufficiale.

    Estrarre i sorgenti

    Sebbene non sia strettamente necessario, la policy Debian consiglia di usare la directory /usr/src per compilare il kernel.
    Il gruppo proprietario della cartella /usr/src è il gruppo src. Per inserire il proprio utente nel gruppo src è sufficiente digitare il seguente comando in una finestra di terminale, sostituendo alla dicitura «nomeutente» il proprio nome utente:

    Codice:
    sudo adduser nomeutente src
    La modifica verrà applicata all'accesso successivo.

    Qualora il gruppo src non avesse più i diritti di scrittura sulla cartella /usr/src, questi dovranno essere ripristinati con il seguente comando:

    Codice:
    sudo chmod -R g+wr /usr/src
    Scompattare e spostare i sorgenti nella cartella di destinazione:

    Codice:
    tar -xjf linux-[VERSIONE_SCARICATA].tar.bz2mv linux-[VERSIONE_SCARICATA] /usr/src/
    Compilazione e installazione

    Entrare nella directory dei sorgenti del kernel appena scaricati:

    Codice:
    cd /usr/src/linux-[VERSIONE_SCARICATA]
    Prima di iniziare la configurazione,importate la configurazione esistente,per evitare problemi di compatibilità col comando:

    Codice:
    sudo make oldconfig
    Configurazione

    Per personalizzare la configurazione, ci sono diverse modalità:

    grafica su Ubuntu (usando le librerie gtk)

    Codice:
    make gconfig
    grafica su Kubuntu (usando le librerie qt)

    Codice:
    make xconfig
    pseudo-grafica nel terminale (usando le librerie ncurses):

    Codice:
    make menuconfig
    testuale nel terminale:

    Codice:
    make config
    L'errata configurazione di un semplice modulo può compromettere l'intero sistema. Per cercare di ridurre al minimo gli errori, usare il comando
    Codice:
    lshw
    per visualizzare il proprio hardware.

    È possibile importare la configurazione di un altro kernel e partire da questa per effettuare ulteriori personalizzazioni. I file di configurazione per i kernel attualmente installati nel sistema si trovano nella directory /boot e sono chiamati config-2.6*, ma è possibile importare un qualunque file di configurazione valido.

    Lo stesso risultato è possibile raggiungerlo copiando a mano un file di configurazione per il kernel all'interno della directory con i sorgenti e rinominando il file in .config, dopodichè si avvia il programma di configurazione; oppure se non si vuole usare l'interfaccia grafica,
    Codice:
    make oldconfig
    importa direttamente la configurazione del kernel attualmente in esecuzione sul computer, e con un'interfaccia a linea di comando propone una ad una tutte le opzioni presenti nel nuovo sorgente.

    Alla fine la configurazione viene salvata all'interno del file .config presente nella cartella del kernel. È consigliato farne una copia, se si è soddisfatti del lavoro svolto.

    per compilare certi drivers,serve il codice sorgente completo,ecco il codice per procurarselo

    Codice:
    sudo apt-get install linux-headers-$(uname -r)
    Ecco un codice da aggiungere nei Makefile se si presentano 'warning' durante l'elaborazione dei vari moduli......Per fare questo bisogna aprire un terminale e con le credenziali root e utilizzare un qualunque editor

    Codice:
    STACK_CHECK_MAX_FRAME_SIZE= 2048

    Impostazioni consigliate

    Seguire quanto descritto per evitare spiacevoli inconvenienti:

    In «General Setup» attivare:

    -Support for paging of anonymous memory (swap)
    --Support for prefetching swapped memory

    In «Processor type and features»:

    In «Processor family» scegliere il modello del processore.
    Attivare Preemption Model-> Voluntary Kernel Preemption (Desktop)
    In «High Memory Support» scegliere:

    off se si possiede meno di 1 GB di RAM
    1GB Low Memory Support se si possiede 1GB di RAM
    4GB se si possiede più di 1GB di RAM

    In «Timer frequency» abilitare: 1000 Hz

    In «Block layer -> IO Schedulers» lasciare solo «CFQ I/O scheduler», otterrete una migliore performance.
    In «Kernel hacking» deselezionare «Kernel debugging».
    In «Device Drivers -> Character devices» selezionare «Virtual terminal».

    Compilare

    Finita la fase di personalizzazione, si passa alla compilazione.
    Nel caso in cui si possiede un sistema multiprocessore è possibile impostare la variabile CONCURRENCY_LEVEL affinché vengano eseguite più compilazioni in parallelo. Ad esempio per un processore con 2 core è possibile impostare tale valore a 2:

    Codice:
    export CONCURRENCY_LEVEL=2
    Qualora i sorgenti fossero già stati compilati in passato e si desiderasse ripulirli (ri-eseguire la compilazione di tutti i pacchetti):

    Codice:
    make-kpkg --rootcmd fakeroot clean
    Il comando consigliato per compilare il kernel è:

    Codice:
    make-kpkg --rootcmd fakeroot --initrd kernel_image kernel_headers modules_image
    L'opzione «--rootcmd» è necessaria perchè alcuni passaggi nella creazione del pacchetto richiedono un ambiente di root, che fakeroot simula.

    L'opzione «--initrd» serve a creare un file immagine di una partizione speciale (initial ram disk), che all'avvio del sistema verrà caricata nella ram, montata temporaneamente come directory root e usata per caricare i moduli strettamente necessari per l'avvio del sistema, prima di venire sostituita dalla partizione contenente il sistema reale. L'immagine initrd è usata soprattutto nei kernel ufficiali, che devono supportare un gran numero di chipset, file system, dischi fissi ecc... e perciò caricano tutti questi moduli nell'initrd. Serve anche nel caso si desideri avere un bootsplash. Perché l'initrd funzioni, è necessario che l' opzione 'RAM disk support' nella sezione 'Block Device' della configurazione del kernel sia abilitata. Per poter fare a meno di questa opzione è necessario, nella sezione Device Drivers, compilare staticamente nel kernel sia il modulo relativo al chipset della propria scheda madre, sia il modulo relativo al filesystem usato nella partizione di root (in questo modo l'avvio risulterà anche un po' più veloce).

    L'opzione «--append-to-version», facoltativa, serve a definire un suffisso personalizzato per il proprio kernel, visualizzabile attraverso il comando:

    Codice:
    uname -r
    Si può scrivere ciò che si vuole, basta che sia scritto in minuscolo, senza punti e senza caratteri extra.

    I target specificano quali pacchetti deb verranno creati:

    Il target kernel_image compila il kernel e tutti i moduli scelti nella configurazione, e ne crea un pacchetto .deb.

    Il target kernel_headers crea un pacchetto .deb con una serie di file e script che consentono di compilare moduli esterni in un secondo momento. Non è necessario, in quanto gli stessi sorgenti del kernel servono già allo scopo, ma se si desidera eliminare in seguito i sorgenti del kernel (magari per liberare spazio su disco) è bene specificare anche questo target.

    Il target modules_image compila i sorgenti dei moduli esterni scaricati a parte e posizionati in /usr/src/modules (come i moduli per i driver video proprietari). Se non ce ne fossero, non serve aggiungere questo parametro.

    Installare

    Entrare nella cartella superiore:

    Codice:
    cd ..
    E installare i pacchetti appena creati. Da terminale digitare:

    Codice:
    sudo dpkg -i kernel-image-[VERSIONE_DEL_KERNEL].deb
    Codice:
    sudo dpkg -i linux-headers-[VERSIONE_DEL_KERNEL].deb
    Nelle ultime versioni l'immagine del kernel è denominata come linux-image-[VERSIONE_KERNEL]_[ARCHITETTURA].deb

    Il boot loader GRUB verrà aggiornato automaticamente.

    Riavviare il computer e quindi scegliere il nuovo kernel installato.

    Se ci sono problemi, riavviare la macchina e utilizzare il vecchio kernel.
     
    Ultima modifica di un moderatore: 3 Nov 2013
    A Morissio, Maialking e Raffaele piace questo elemento.
  2. Maialking

    Maialking Baby Droid

    Iscritto:
    25 Mag 2013
    Messaggi:
    41
    "Mi Piace":
    49
    :seguo: ormai ubuntu non lo uso da tempo, leggendoti mi stai facendo venire voglia
     
  3. Non ti costa niente fare una partizioncina per ubuntu e divertirti a testare soluzioni.......Quindi perchè non farlo.....Se poi usi il programma Universal Usb Installer,hai pure l'imbarazzo della scelta.....Ci sono moltissime distro (pure non ubuntu) che puoi installare su chiavetta USB :)
     
  4. Maialking

    Maialking Baby Droid

    Iscritto:
    25 Mag 2013
    Messaggi:
    41
    "Mi Piace":
    49
    ehh....purtroppo ho fatto lo sbaglio di comprarmi un imac :raff:
     
  5. Io i mac proprio non li sopporto......Costano 3 volte tanto di un pc standard con gli stessi componenti e un OS non a pagamento......
     
    A PeFo piace questo elemento.