Kernel Patching & Recompiling-3

Ecco la terza parte della guida su come patchare e ricompilare il kernel 2.6.21. Ripassiamo i concetti…

  • Stiamo facendo un lavoro per Ubuntu, ma i comandi per Debian sono quasi identici.
  • Abbiamo già fatto i passi preliminari:
    1. elencato i comandi per sapere quale hardware c’è nel nostro computer » primo articolo
    2. installato i pacchetti per la compilazione del kernel in Ubuntu (per i pacchetti Debian vedere Come ricompilare il kernel su Debian (guida di DebianClan)) » primo articolo
    3. scaricato da kernel.org l’ultimo kernel “vanilla” disponibile ed estratto in /usr/src » primo articolo
    4. applicato la patch di Con kolivas e fatto un link simbolico /usr/src/linux alla directory di smanettamento » secondo articolo

Quello che vedremo in questo post è la creazione di un nuovo .config tramite make oldconfig. Questo servirà da base per poter poi configurare tutto il resto.

Pronti?

QUINTO PASSO: Prendere il vecchio file di configurazione ed adattarlo al nuovo kernel

Qui sappiate che ci metteremo parecchio tempo, e probabilmente non funzionerà tutto al primo colpo. Il percorso di purificazione prevede che a un certo punto finiate a urlare istericamente contro lo schermo strappandovi i capelli.

Se non avete tempo a disposizione o avete già il cervello in pappa, è meglio che vi fermiate qui e riprendiate quando potrete buttare via un’oretta/due o avrete assunto ipervitaminizzanti.

Qualcuno è rimasto?
Ah, la particella di iodio sodio! (a non guardare mai la tv si diventa ignoranti… lol)

OLDCONFIG:

Prendiamo la configurazione già esistente e funzionante, come sanno tutti gli scultori è più facile togliere che aggiungere (io so che è più facile distruggere che creare) :)

Al termine di oldconfig avremo un nuovo file di configurazione del kernel, sicuramente funzionante, in cui avremo “filtrato” tutte le novità introdotte dal kernel 2.6.21 rispetto al kernel che state usando adesso. Quindi nessuna ottimizzazione ancora :) alla meno peggio avremo aggiunto qualche riga di codice.

Nella prossima parte modificherò il file di configurazione in base alle mie esigenze, ottimizzando e tagliando via il superfluo: allora sì che il kernel verrà bello snello!

Nei sistemi Debian e derivati (non so per gli altri) la configurazione attuale si trova in /boot. Quindi andiamo a vedere cosa c’è lì dentro.

ls /boot

Il mio output è questo:

luca@DarkKnight:/usr/src/linux$ ls /boot

abi-2.6.20-16-generic

config-2.6.20-16-generic

grub

initrd.img-2.6.21

initrd.img-2.6.17-11-generic.bak

initrd.img-2.6.20-16-generic

initrd.img-2.6.20-16-generic.bak

memtest86+.bin

System.map-2.6.20-16-generic

vmlinuz-2.6.20-16-generic

Quello che ci interessa è il file config-2.6.XX-XX-architettura(versione attuale del vostro kernel).

E se avete più file di configurazione? Non sapete quale prendere? Vi state già incazzando?
No problem, ecco un utile comando che vi dice quale kernel state usando:

uname -r

e saprete cosa mettere al posto delle X in config-XXXXXXXXXXXXXXX…X :)

Come avrete già capito, io sto usando una mrd. di kernel generico, e mi sento profondamente infelice e insoddisfatto. DEVO RICOMPILARE! AAARGHHH! PRESTO! Copiate la configurazione sicuramente funzionante nella nostra directory di lavoro!!! WAAAGH!!!!

cp /boot/config-XXXXXXXXXXX /usr/src/linux/.config

(Avete sostituito le X come vi ho detto prima o ci siete cascati come dei pirla?)

Spostiamoci nella nostra directory di lavoro.
Per vedere se avete copiato bene non basta il comando ls: dovete dirgli di mostrare i file nascosti con l’opzione -a!

cd /usr/src/linux
ls -a

Giusto per darvi un feedback: ecco il contenuto della mia directory

luca@DarkKnight:/usr/src/linux$ ls -a

.        COPYING        fs          Kbuild       Makefile        scripts

..       CREDITS        .gitignore  kernel       mm              security

arch     crypto         include     lib          net             sound

block    Documentation  init        .mailmap     README          usr

.config  drivers        ipc         MAINTAINERS  REPORTING-BUGS

IMPORTANTE: con make oldconfig adattiamo al nuovo kernel il vecchio file di configurazione, ma siccome ci sono delle nuove funzionalità nel nuovo kernel (che frase scioccamente ovvia da dire) durante il processo ci verranno fatte delle domande. E non sono tutte banali…

Vai! (NB: non eseguo il comando con sudo, nè come root)
make oldconfig

Vediamo cosa ha chiesto a me.

Support for prefetching swapped memory (SWAP_PREFETCH) [Y/n/?] (NEW) Y

Questa domanda è stata causata dall’applicazione della patch Con Kolivas. Ovviamente la risposta sarà Y (era default perché la lettera Y è maiuscola: potevamo premere invio direttamente)

Tickless System (Dynamic Ticks) (NO_HZ) [N/y/?] (NEW) ?This option enables a tickless system: timer interrupts will

only trigger on an as-needed basis both when the system is

busy and when the system is idle.

Ecco, questa è una domanda complicata. Dovete sapere che il sistema ogni tanto guarda se “qualcosa” (driver della scheda audio, per esempio) richiede attenzione.
A quale frequenza compie questo controllo? Ubuntu Feisty Desktop mi pare che lo faccia 1000 volte al secondo (1000 Hz), altri lo fanno 250 volte al secondo (250 Hz).
Però quando il processore non ha nulla da fare? Perché dovrebbe sempre stare all’erta? Non possiamo far controllare “dinamicamente” se i driver chiedono attenzione? Su un sito che spiegava l’argomento ho letto che questo, in un computer portatile, portava a allungare di un’ora la vita della batteria.
Quindi se state facendo questo lavoro su un portatile oppure siete ai ferri corti con l’ENEL, potete rispondere Y qui.

Io che faccio Ingegneria Elettronica mi sento in dovere di rispondere Y anche se per tutto il resto consumo come uno Sputnik… Per chi invece è abituato ad andare con i piedi di piombo, la risposta giusta è N.

Se rispondete Y e non fate errori in altre parti il PC funziona, ma non so dire se va più lento o più veloce…

High Resolution Timer Support (HIGH_RES_TIMERS) [N/y/?] (NEW) ?This option enables high resolution timer support. If your

hardware is not capable then this option only increases

the size of the kernel image.

Voi sareste interessati a comprare un orologio atomico per avere l’ora esatta, o vi accontentate di millisecondo più millisecondo meno?
Questa è un’opzione che secondo me serve per sviluppare applicazioni real-time, io sul mio desktop voglio massimizzare il throughput e del real-time me ne occuperò quando farò la tesi.
Se non avete capito cosa ho detto rispondete N senza problemi, è la scelta migliore per il desktop e evita di appesantire il kernel :)

High Memory Support

  1. off (NOHIGHMEM)

> 2. 4GB (HIGHMEM4G)

  3. 64GB (HIGHMEM64G)

choice[1-3]: 2

Ho 2GB di RAM… le spiegazioni in questo caso credo siano inutili :)

Memory split

> 1. Default 896MB lowmem (3G/1G user/kernel split) (VMSPLIT_3G) (NEW)

  2. 2GB lowmem (2G/2G user/kernel split) (VMSPLIT_2G) (NEW)

  3. 3GB lowmem (1G/3G user/kernel split) (VMSPLIT_1G) (NEW)

choice[1-3?]: ?Select the desired split between kernel and user memory.

If the address range available to the kernel is less than the

physical memory installed, the remaining memory will be available

as "high memory". Accessing high memory is a little more costly

than low memory, as it needs to be mapped into the kernel first.

Note that increasing the kernel address space limits the range

available to user programs, making the address space there

tighter.  Selecting anything other than the default 3G/1G split

will also likely make your kernel incompatible with binary-only

kernel modules.

If you are not absolutely sure what you are doing, leave this

option alone!

Eh, ancora un po’ e ci minaccia di morte :| premete INVIO silenziosamente e scappate! :|

Timer frequency

  1. 100 HZ (HZ_100)

  2. 250 HZ (HZ_250_NODEFAULT) (NEW)

  3. 300 HZ (HZ_300)

> 4. 1000 HZ (HZ_1000)

  5. 1500 HZ (HZ_1500) (NEW)

  6. 2000 HZ (HZ_2000) (NEW)

  7. 3000 HZ (HZ_3000) (NEW)

  8. 4000 HZ (HZ_4000) (NEW)

  9. 5000 HZ (HZ_5000) (NEW)

  10. 7500 HZ (HZ_7500) (NEW)

  11. 10000 HZ (HZ_10000) (NEW)

choice[1-11?]: ?Allows the configuration of the timer frequency. It is customary

to have the timer interrupt run at 1000 Hz but 100 Hz may be more

beneficial for servers and NUMA systems that do not need to have

a fast response for user interaction and that may experience bus

contention and cacheline bounces as a result of timer interrupts.

Note that the timer interrupt occurs on each processor in an SMP

environment leading to NR_CPUS * HZ number of timer interrupts

per second.Laptops may also show improved battery life.

Beh, mi sembra chiaro: se avete un desktop mettetelo a 1000Hz o superiore (tanto i valori superiori sono equivalenti a 1000), se avete un laptop/server mettetelo a valori più bassi. Il laptop per risparmiare energia, il server per non essere stordito da troppe richieste :P (la spiegazione tecnica non è esattamente quella ma sinceramente me ne sbatto le palle, voglio ricompilare non programmare!).
Vah, faccio il cretino, scelta 11 (quelli seri mettano la 4).

Procfs interface (deprecated) (ACPI_PROCFS) [Y/n/?] (NEW) ?Procfs interface for ACPI is made optional for back-compatible.

As the same functions are duplicated in sysfs interface

and this proc interface will be removed some time later,

it's marked as deprecated.

( /proc/acpi/debug_layer && debug_level are deprecated by

  /sys/module/acpi/parameters/debug_layer && debug_level.

  /proc/acpi/info is deprecated by

  /sys/module/acpi/parameters/acpica_version )

Buh? Funzioni duplicate? Deprecato? E allora diamo N dai, tanto sai che me ne frega dell’acpi sul desktop… (utenti laptop e prudenti: rispondete Y)

Removable Drive Bay (EXPERIMENTAL) (ACPI_BAY) [N/m/?] (NEW) ?This driver adds support for ACPI controlled removable drive

bays such as the IBM ultrabay or the Dell Module Bay.

Avete qualcosa che si può togliere dal pc senza dover prendere il cacciavite o la mazza da baseball? No? Allora N

Legacy Removable Bay Support (ACPI_IBM_BAY) [Y/n/?] (NEW) ?Allows the ibm_acpi driver to handle removable bays.  It will allow

disabling the device in the bay, and also generate notifications when

the bay lever is ejected or inserted.

If you are not sure, say Y here.

Sono sicuro di non avere nulla targato IBM nel mio PC. Però che spiegazioni del cazzo che dai… ci credo che ricompilare il kernel sembra un incubo! N

VIA C7 Enhanced PowerSaver (EXPERIMENTAL) (X86_E_POWERSAVER) [N/m/y/?] (NEW) ?This adds the CPUFreq driver for VIA C7 processors.

If in doubt, say N.

..anche la VIA fa processori? duh! Beh, io ho il Pentium4… N

Transformation migrate database (EXPERIMENTAL) (XFRM_MIGRATE) [N/y/?] (NEW) ?A feature to update locator(s) of a given IPsec security

association dynamically.  This feature is required, for

instance, in a Mobile IPv6 environment with IPsec configuration

where mobile nodes change their attachment point to the Internet.

If unsure, say N.

Come se mi portassi il desktop in giro nello zaino. Comunque di default è N, quindi…

PF_KEY MIGRATE (EXPERIMENTAL) (NET_KEY_MIGRATE) [N/y/?] (NEW) n

Guarda prima e non mi rompere i coglioni… N

SANE protocol support (EXPERIMENTAL) (NF_CONNTRACK_SANE) [N/m/?] (NEW) ?SANE is a protocol for remote access to scanners as implemented

by the 'saned' daemon. Like FTP, it uses separate control and

data connections.

With this module you can support SANE on a connection tracking

firewall.

To compile it as a module, choose M here.  If unsure, say N.

Sarebbe interessante sapere come faccio a usare uno scanner in Cina senza poter mettere dentro lo scanner il disegno che ho fatto in Italia. Penso che userò il fax :D Negativo! N

"TCPMSS" target support (NETFILTER_XT_TARGET_TCPMSS) [N/m/?] (NEW) ?This option adds a `TCPMSS' target, which allows you to alter the

MSS value of TCP SYN packets, to control the maximum size for that

connection (usually limiting it to your outgoing interface's MTU

minus 40).

This is used to overcome criminally braindead ISPs or servers which

block ICMP Fragmentation Needed packets.  The symptoms of this

problem are that everything works fine from your Linux

firewall/router, but machines behind it can never exchange large

packets:

      1) Web browsers connect, then hang with no data received.

      2) Small mail works fine, but large emails hang.

      3) ssh works fine, but scp hangs after initial handshaking.

Workaround: activate this option and add a rule to your firewall

configuration like:

iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN

               -j TCPMSS --clamp-mss-to-pmtu

To compile it as a module, choose M here.  If unsure, say N.

Questa è una chiara dimostrazione della potenza di Linux. Però non ho un firewall/router Linux e Tiscali si sta comportando bene… N

MH match support (IP6_NF_MATCH_MH) [N/m/?] (NEW) n

Chissene…

Asus Laptop Extras (EXPERIMENTAL) (ASUS_LAPTOP) [N/m/?] (NEW) n

Sony Laptop Extras (SONY_LAPTOP) [N/m/y/?] (NEW) n

Non è un laptop, e sarebbe bello che tu lo potessi capire da solo

Cardbus IDE support (Delkin/ASKA/Workbit) (BLK_DEV_DELKIN) [N/m/y/?] (NEW) nIf you have a PnP (Plug and Play) compatible EIDE card and

would like the kernel to automatically detect and activate

it, say Y here.

PNP EIDE support (BLK_DEV_IDEPNP) [N/y/?] (NEW) n

No.

IT8213 IDE support (BLK_DEV_IT8213) [N/m/y/?] (NEW) ?This driver adds support for the ITE 8213 IDE controller.

A prima vista non so rispondere… interroghiamo il computer:

luca@DarkKnight:~$ lshw | grep IDE

WARNING: you should run this program as super-user.

             description: IDE interface

             product: 82801EB/ER (ICH5/ICH5R) IDE Controller

             configuration: driver=PIIX_IDE latency=0

                description: IDE Channel 0

                description: IDE Channel 1

             description: IDE interface

Chiaramente mi serve il controller Intel 82801EB/ER, non quella mrd lì… N

Toshiba TC86C001 support (BLK_DEV_TC86C001) [N/m/y/?] (NEW) n

Come prima.

Silan SC92031 PCI Fast Ethernet Adapter driver (EXPERIMENTAL) (SC92031) [N/m/y/?] (NEW) ?This is a driver for the Fast Ethernet PCI network cards based on

the Silan SC92031 chip (sometimes also called Rsltek 8139D). If you

have one of these, say Y here.

To compile this driver as a module, choose M here: the module

will be called sc92031.  This is recommended.

Ormai avrete capito la procedura in caso di incertezza:

luca@DarkKnight:~$ lspci | grep Ethernet
02:05.0 Ethernet controller: Marvell Technology Group Ltd. 88E8001 Gigabit Ethernet Controller (rev 13)

…quindi la risposta è N

Chelsio Communications T3 10Gb Ethernet support (CHELSIO_T3) [N/m/y/?] (NEW) n

Averla, una connessione da 10Gb……….

Ormai dovreste aver imparato il metodo… ecco l’unica risposta YES che ho dato da fiero possessore di scheda nVidia:

Say Y here if you want to control the backlight of your display.

Support for backlight control (FB_NVIDIA_BACKLIGHT) [Y/n/?] (NEW) Y

E alla fine è uscito il messaggio:

#

# configuration written to .config

#

È stata dura, ma finalmente siamo pronti per togliere altra roba dal nostro kernel!

Vai alla quarta parte!

2 thoughts on “Kernel Patching & Recompiling-3

  1. LuCa scrive:

    …veramente la particella era di Sodio, non di Iodio…

    Bel blog, è già finito nei preferiti, continua così…
    LuCa

  2. sevencapitalsins scrive:

    D U H !

    Modificato, grazie :)

Lascia un commento

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...

%d blogger cliccano Mi Piace per questo: