|
|
Riga 1: |
Riga 1: |
| ''Inserire qui la traduzione di [http://www.kernel.org/pub/linux/kernel/people/gregkh/lkn/lkn_pdf/appa.pdf questo] capitolo...'' | | ''Torna all'indice: [[Linux Kernel in a Nutshell]]'' |
| | |
|
| |
|
| __TOC__ | | __TOC__ |
|
| |
|
| Scaricare [da Internet, NdT], compilare, aggiornare e mantenere i sorgenti del kernel Linux coinvolge diversi passi, come questo libro illustra. Essendo per natura creature pigre, gli sviluppatori hanno creato alcuni programmi a supporto di queste attivit� di routine. Descriviamo alcuni di tali utili strumenti e le nozioni di base sul loro utilizzo.
| | Il [[LKN:_Personalizzare_un_Kernel|capitolo precedente]] ci ha insegnato i meccanismi per la riconfigurazione del kernel; in questo capitolo arriva la parte interessante, in cui si possono trovare tutte le modifiche pi� comuni che gli utenti hanno bisogno di apportare ai loro kernel, con le istruzioni specifiche per effettuarle. |
| | |
| Lo sviluppo del kernel Linux differisce per molti aspetti dal tradizioale processo di sviluppo software. Ad uno sviluppatore del kernel sono richieste alcune attivit� peculiari:
| |
| | |
| * Applicare le modifiche ad un "bersaglio mobile" quale � il kernel, a causa della pianificazione dei rilasci di sviluppo.
| |
| * Risolvere i conflitti nella fase di merge tra ci� ha fatto rispetto a quanto fatto dagli altri sviluppatori.
| |
| * Esportare i suoi cambiamenti in un formato che permetta agli altri sviluppatori di incorporarli facilmente nel proprio lavoro.
| |
| | |
| ==patch e diff==
| |
| Questa sezione � basata su un articolo pubblicato originariamento su ''Linux Journal''.
| |
| | |
| Una delle modalit� pi� comuni per lavorare con il kernel � quella di usare i programmi ''patch'' e ''diff''. Per usare questi strumenti, sono necessarie due differenti directory: una "pulita" (clean) e una "di lavoro" (indicata con ''dirty'' in seguito). La directory clean contiene la versione originale del kernel, mentre quella di lavoro contiene le modifiche apportate dal programmatore alla stessa release.
| |
| Utilizzando ''patch'' e ''diff'' � possibile estrarre i cambiamenti apportati sul sorgente e portarli nella nuova release del kernel.
| |
| | |
| Per esempio, creiamo due directory contenenti l'ultima versione del kernel come descritto nel Capitolo 3.
| |
| | |
| <pre>
| |
| $ tar -zxf linux-2.6.19.tar.gz
| |
| $ mv linux-2.6.19 linux-2.6.19-dirty
| |
| $ tar -zxf linux-2.6.19.tar.gz
| |
| $ ls
| |
| linux-2.6.19/
| |
| linux-2.6.19-dirty/
| |
| </pre>
| |
| | |
| Ora � possibile apportare tutte le modifiche desiderate al sorgente presente nella directory di lavoro (dirty), lasciando inalterata quella clean. Dopo aver apportato le modifiche, si potr� creare una patch da inviare agli altri sviluppatori tramite i seguenti comandi:
| |
| | |
| <pre>
| |
| $ diff -Naur -X linux-2.6.19/Documentation/dontdiff linux-2.6.19/ \
| |
| linux-2.6.19-dirty/ > my_patch
| |
| </pre>
| |
| | |
| Questo comando creer� un file dal nome ''my_patch'' che conterr� tutti i cambiamenti apportati al sorgente del kernel rispetto alla versione pulita presente nella directory clean. Tale file potr� essere distribuito o inviato ad agli altri sviluppatori via email.
| |
| | |
|
| |
|
| ===Nuove versioni del kernel===
| |
| Al rilascio di una nuova versione del kernel, se si desidera portare i cambiamenti su questa nuova versione necessario applicare la patch ad una versione ''pulita'' del kernel.
| |
| Questo pu essere fatto seguendo questi passi:
| |
| * Creare la patch, come illustrato nell'esempio precedente.
| |
| * Utilizzare la patch ufficiale dal sito ''kernel.org'' e aggiornare la vecchia versione alla nuova release:
| |
|
| |
|
| <pre>
| | == '''Dischi''' == |
| $ cd linux-2.6.19
| |
| $ patch -p1 < ../patch-2.6.20
| |
| $ cd ..
| |
| $ mv linux-2.6.19 linux-2.6.20
| |
| </pre>
| |
|
| |
|
| * Aggiornare la directory di lavoro rimuovendo la propria patch e, in seguito, applicando il nuovo aggiornamento:
| | Il kernel Linux supporta una grande variet� di differenti tipi di disco. Questa sezione mostra come configurare il kernel in modo tale che supporti la maggior parte di modelli pi� comuni di controller di disco. |
| <pre>
| |
| $ cd linux-2.6.19-dirty
| |
| $ patch -p1 -R < ../my_patch
| |
| $ patch -p1 < ../patch-2.6.20
| |
| $ cd ..
| |
| $ mv linux-2.4.19-dirty linux-2.6.20-dirty
| |
| </pre>
| |
|
| |
|
| * Provare ad applicare la propria patch sul nuovo aggiornamento:
| | '''Periferiche USB''' |
| <pre>
| |
| $ cd linux-2.6.20-dirty
| |
| $ patch -p1 < ../my_patch
| |
| </pre>
| |
|
| |
|
| Se l'applicazione della patch provoca dei problemi, � necessario risolvere i conflitti creati (il comando ''patch'' informer� circa questi conflitti creando i file ''.rej'' e ''.orig'' per l'analisi e la correzioni da parte dello sviluppatore).
| | Per utilizzare una periferica di archiviazione USB (comunemente chiamate "chiavette USB", o dischi esterni USB) il supporto USB deve prima funzionare correttamente. Fare riferimento alla ricetta nella sezione chiamata [[USB]] per sapere come fare. |
| Questo processo di ''fusione'' (''merge'') pu� rappresentare la parte pi� difficile dell'intero processo se sono stati apportati cambiamenti a porzioni di codice che sono state modificate anche da altri.
| |
|
| |
|
| Per applicare correttamente questo processo di sviluppo, raccomando fortemente di utilizzare l'eccellente insieme di programmi ''patchutils'' (reperibile qui: ''http://cyberelk.net/tim/patchutils''). Questi programmi permettono di manipolare le patch facilmente e hanno risparmiato agli sviluppatori molte ore di tedioso lavoro.
| |
|
| |
|
| ---- | | ---- |