File: kernel.sgml

package info (click to toggle)
debian-reference 2.24
  • links: PTS
  • area: main
  • in suites: lenny
  • size: 20,088 kB
  • ctags: 35
  • sloc: xml: 70,510; sh: 616; makefile: 352; perl: 221; sed: 3
file content (394 lines) | stat: -rw-r--r-- 14,512 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
<!-- CVS revision of this document "# Revision is not used here.#" -->
<!-- CVS revision of original english document "1.65" --> 

<chapt id="kernel">Il kernel Linux su Debian
<p>
Debian ha i suoi modi per la ricompilazione del kernel e dei relativi moduli.
Vedere anche <ref id="kernel-details">.

<sect id="kernel-compile">Ricompilare il kernel
<p>
Utilizzare <prgn>gcc</prgn>, <prgn>binutils</prgn> e <prgn>modutils</prgn> da
Debian <tt>unstable</tt> può essere di aiuto nel compilare l'ultimissimo
kernel Linux.  Vedere <file>&f-kernel-readme;</file>, in particolare la parte
finale, per le informazioni ufficiali.  
<p> Dato che la compilazione del
kernel è qualcosa in continua evoluzione, è un soggetto difficile da trattare,
persino lo sviluppatore più ammirato può fare confusione: 
<taglist compact>
<tag>Manoj Srivastava ha scritto: 
<item><tt>--initrd</tt> richiede una patch cramfs solo per Debian.  
<tag>Herbert Xu ha scritto: 
<item>No, non ne ha bisogno, tutto quello che serve per usare un filesystem 
diverso da CRAMFS è di impostare MKIMAGE in <file>/etc/mkinitrd/mkinitrd.conf</file>.  
</taglist> 
<p>
Siate accorti, e fate affidamento sul <file>&f-kernel-readme;</file> di Manoj
e Kent.  Accertatevi di ottenere l'ultima versione di unstable del pacchetto
<package>kernel-package</package> se state per compilare la versione più
recente del kernel.  
<p> 
<tt>initrd</tt> non serve per un kernel compilato
solo per una macchina.  Io lo uso perchè voglio che sia quasi lo stesso di
quello fornito da kernel-image.  Se usate <tt>initrd</tt>, leggetevi<manref
name="mkinitrd" section="8"> e <manref name="mkinitrd.conf" section="5">.
Vedere anche <url id="&bug-initrd;">.
<p>

<sect1 id="kernel-debian">Il metodo Debian standard
<p>
Controllate anche i rapporti sui bachi per <package>kernel-package</package>
<prgn>gcc</prgn>, <prgn>binutils</prgn> e <prgn>modutils</prgn>.
Usatene le versioni più recenti, se necessario.
<p>
La compilazione di un proprio kernel dai sorgenti in un sistema Debian
richiede una cura speciale.  
Per compilare più "kernel-images", utilizzate il nuovo 
<tt>--append_to_version</tt> con <prgn>make-kpkg</prgn>.
<example>
# apt-get install debhelper modutils kernel-package libncurses5.dev
# apt-get install kernel-source-<var>2.4.18</var> # usate la versione più recente
# apt-get install fakeroot
# vi /etc/kernel-pkg.conf    # inserisco il mio nome ed email
$ cd /usr/src                # la directory di compilazione
$ tar -bzip2 -xvf kernel-source-<var>2.4.18</var>.tar.bz2
$ cd kernel-source-<var>2.4.18</var>    # se è il vostro sorgente
$ cp /boot/config-<var>2.4.12-386</var>.config 
        # usa il config corrente come default
$ make menuconfig            # personalizzate a vostro piacimento
$ make-kpkg clean            # deve essere eseguito (per: man make-kpkg)
$ fakeroot make-kpkg --append_to_version -<var>486</var> --initrd \
        --revision=<var>rev.01</var> kernel_image \
	modules_image # modules_image è per pcmcia.cs*, ecc.
$ cd ..
# dpkg -i kernel-image*.deb pcmcia-cs*.deb # install
</example>
<tt>make-kpkg kernel_image</tt> esegue in realtà <tt>make oldconfig</tt> ed <tt>make dep</tt>
Se non usate initrd, non mettete  <tt>-initrd</tt>.
<p>
Se si vogliono i moduli da pcmcia-cs o nessun modulo pcmcia, si deve selezionare 
"General setup &mdash;&gt;" 
e "PCMCIA/CardBus support &mdash;&gt;" in <tt>make
menuconfig</tt> ed impostando la configurazione come
"&lt;&nbsp;&gt; PCMCIA/CardBus support" (cioè, deselezionate la casella).
<p>
Su una macchina SMP, impostate CONCURRENCY_LEVEL in accordo con 
<manref name="kernel-pkg.conf" section="5">.
</sect1>

<sect1 id="kernel-classic">Il metodo classico
<p>
Scaricate i sorgenti originali da:
<list compact>
<item>Linux:     <url id="&linuxsrc;">
<item>pcmcia-cs: <url id="&pcmciasrc;">
</list>
oppure utilizzate i sorgenti equivalenti da debian ed eseguite i
seguenti comandi:
<example>
# cd /usr/src
# tar xfvz linux-<var>versione</var>.tar.gz
# rm -rf linux
# ln -s linux-<var>versione</var> linux
# tar xfvz pcmcia-cs-<var>versione</var>.tar.gz
# ln -s pcmcia-cs-<var>versione</var> pcmcia
# cd linux
# make menuconfig
... configurate a vostro piacimento ...
# make dep
# make bzImage
... modifiche per lilo / grub ...
... muovete /usr/src/linux/arch/i386/boot/bzImage in boot ...
... /sbin/lilo o qualunque altra cosa serva per grub
# make modules; make modules_install
# cd ../pcmcia
# make config
# make all
# make install
... aggiungete i nomi dei moduli richiesti a /etc/modules
# shutdown -r now
... fate il boot con il nuovo kernel ...
</example>
</sect1>

<sect1 id="kernel-headers">I Kernel header
<p>
Molti programmi "normali" non hanno bisogno dei kernel header, anzi, possono corrompersi
se li utilizzate direttamente; dovrebbero invece essere compilati rispetto agli headers con
cui <strong><prgn>glibc</prgn> è stato compilato</strong>, ovvero le versioni contenute 
in <file>/usr/include/linux</file> e <file>/usr/include/asm</file>
del sistema &debian;.
<p>
Per cui non ponete i collegamenti simbolici alle directory in <file>/usr/src/linux</file>
da <file>/usr/include/linux</file> e <file>/usr/include/asm</file>,
come diversamente suggerito in alcuni documenti ormai obsoleti.
<p>
Se avete <strong>bisogno</strong> di kernel header particolari per qualche applicazione
kernel-specifica, modificate il(i) makefile 
in modo da includere nei percorsi dei puntatori a 
<file><var>dir-del-particolare-kernel-header</var>/include/linux</file> e
<file><var>dir-del-particolare-kernel-header</var>/include/asm</file>.
</sect1>

</sect>

<sect id="kernel-modules">Kernel 2.4 modulare
<p>
I nuovi kernel debian 2.4 forniti dai pacchetti kernel-image-2.4.<var>NN</var> 
sono altamente modularizzati. Per farli
funzionare come avete deciso, dovrete essere sicuri che i moduli siano
stati attivati.  
<p> 
Sebbene abbia molti esempi per <file>/etc/modules</file> nella sezione
seguente da utilizzare come correzione rapida, so che il modo giusto per
correggere questi problemi correlati ai moduli è di fornire un alias per il
dispositivo in un file contenuto in <file>/etc/modutils/</file>, essendoci
abbastanza alias disponibili con i kernel attuali. Alcuni moduli possono
essere auto attivati dai programmi di riconoscimento hardware, tipo
<package>discover</package>. Vedere anche <ref id="hdetect-x"> 
<p> 
Vedere <ref id="modules"> e <file>Documentation/*.txt</file> nel sorgente Linux source per informazioni
più accurate.

<sect1 id="kernel-pcmcia">PCMCIA
<p>
<file>/etc/modules</file> deve contenere i seguenti driver, affinchè PCMCIA funzioni:
<example>
# Driver ISA PnP
isa-pnp
# Driver PCMCIA di basso livello
# yenta_socket # non sembra essere necessario nel mio caso.
</example>
Il resto viene configurato dagli script PCMCIA (del pacchetto
<package>pcmcia-cs</package>), da <prgn>depmod</prgn> e da <prgn>kmod</prgn>.
Penso che <prgn>isa-pnp</prgn> mi sia stato
necessario perchè il mio laptop è un vecchio ISA-PCMCIA. I modelli più
recenti con CardBus-PCMCIA non lo richiedono.
<p>
Voce del generoso Miquel van Smoorenburg 
<email>miquels@cistron.nl</email>:
<p> 
"Ho semplicemente rimosso tutta la roba correlata con pcmcia dal mio
laptop, qui al lavoro, compreso cardmgr, ecc., ed ho installato un kernel 2.4 con
supporto per cardbus, insieme al nuovo pacchetto <package>hotplug</package> da woody.
<p>
Se avete delle PC card a 32 bit non avete bisogno del pacchetto pcmcia, il 
kernel 2.4 ha i servizi per esse già inseriti. Il driver tulip standard 
dovrebbe funzionare bene con la vostra card dcollegamenti.
<p>
&mdash;Mike."
<p>
Vedere <url id="&pcmcia-howto;" name="Linux PCMCIA HOWTO"> e 
<ref id="trigger-pcmcia">.
</sect1>

<sect1 id="kernel-scsi">SCSI
<p><!-- Osamu: maybe test this section? I do not have SCSI :(  
                                     But this is almost sure :) 
				     I use some of these too now for firewire devices -->
[NON TESTATO]<file>/etc/modules</file> deve contenere i seguenti driver affinchè
SCSI funzioni:
<example>
# SCSI core
scsi_mod
# Driver generico SCSI
sg
# Disco SCSI
sd_mod
# Tutti gli altri moduli hardware necessari
...
</example>
Forse <prgn>depmod</prgn> può prendersi cura di alcuni dei moduli summenzionati.
</sect1>

<sect1 id="kernel-net">Funzioni di rete
<p>
<file>/etc/modules</file> deve contenere i seguenti driver per le funzioni extra di rete:
<example>
# net/ipv-4
ip_gre
ipip

# net/ipv-4/netfilter
# iptable (nell'ordine)
ip_tables
ip_conntrack
ip_conntrack_ftp
iptable_nat
iptable_filter
iptable_mangle
#
ip_nat_ftp
ip_queue
#
ipt_LOG
ipt_MARK
ipt_MASQUERADE
ipt_MIRROR
ipt_REDIRECT
ipt_REJECT
ipt_TCPMSS
ipt_TOS
ipt_limit
ipt_mac
ipt_mark
ipt_multiport
ipt_owner
ipt_state
ipt_tcpmss
ipt_tos
ipt_unclean
#
#ipchains
#ipfwadm
</example>
Quanto sopra non è ottimizzato al meglio. <prgn>depmod</prgn> potrebbe prendersi cura di alcuni dei moduli.
</sect1>

<sect1 id="ext3">Il filesystem EXT3 ( &gt; 2.4.17)
<p>
L'attivazione di un filesystem "journaled" con il tipo EXT3 FS
richiede i seguenti passi, usando un pacchetto kernel-image Debian precompilato
( &gt; 2.4.17):
<example>
# cd /etc; mv fstab fstab.old
# sed 's/ext2/ext3,ext2/g' &lt;fstab.old &gt;fstab
# vi /etc/fstab
... impostate il filesystem di root ad "auto" invece di "ext3,ext2"
# cd /etc/mkinitrd
# echo jbd &gt;&gt;modules
# echo ext3 &gt;&gt;modules
# echo ext2 &gt;&gt;modules
# cd /
# apt-get update; apt-get install kernel-image-<var>2.4.17-686-smp</var>
... installa l'ultimo kernel ed imposta il boot 
    (lilo viene lanciato a questo punto)
# tune2fs -j -i 0 <var>/dev/hda1</var>
# tune2fs -j -i 0 <var>/dev/hda2</var> 
... Per tutti i filesystem EXT2 convertiti a EXT3
# shutdown -r now
</example>
A questo punto il journaling EXT3 è attivato. 
Avere le voci "type" in <prgn>fstab</prgn> come <tt>ext3,ext2</tt> assicura, in caso il
kernel non supportasse EXT3, un tranquillo ritorno ad EXT2
per le partizioni non-root.
<p>
Se avete un kernel 2.4 già installato e non lo volete reinstallare, date gli
              stessi comandi <prgn>apt-get</prgn> di cui sopra e poi:
<example>
# mkinitrd -o /boot/initrd.img-<var>2.4.17-686-smp</var> /lib/modules/<var>2.4.17-686-smp</var>
# lilo
# tune2fs -j -i 0 <var>/dev/hda1</var>
# tune2fs -j -i 0 <var>/dev/hda2</var>
... per tutti i filesystem EXT2 convertiti a EXT3
# shutdown -r now
</example>
A questo punto il journaling EXT3 è attivato. 
<p>
Qualora <file>/etc/mkinitrd/modules</file> non fosse stato impostato al lancio di
<prgn>mkinitrd</prgn> e si volessero aggiungere alcuni moduli al boot:
<example>
... al prompt di initrd per entrare in shell (entro 5 sec.), premete INVIO
# insmod jbd
# insmod ext3 # modprobe ext3 si prende cura di tutto
# insmod ext2
# ^D
... continuate il boot
</example>
Sui messaggi al boot (<prgn>dmesg</prgn>), potrà apparire "cramfs: wrong magic",
messaggio noto per essere inoffensivo. Questo problema è stato risolto in Sarge
(10/2002).  Vedere <url id="&bug-ext3;"> ed il
<url id="&howtoext3;" name="EXT3 File System mini-HOWTO"> oppure
<file>&f-howtoext3;</file> per ulteriori informazioni.
<p>
Alcuni sistemi hanno sperimentato dei gravi blocchi del kernel, quando EXT3
è attivato (fino al 2.4.17) ma, per quanto mi riguarda, non ho avuto problemi.
</sect1>

<sect1 id="ss-rtl8139">Supporto nel kernel 2.4 per Realtek RTL-8139
<p>
Per qualche motivo, il modulo per RTL-8139 non si chiama più rtl8139, ma 8139too. 
All'aggiornamento del kernel da 2.2 a 2.4, dovrete modificare a mano <file>/etc/modules</file> 
per inserire il nuovo nome del modulo.
</sect1>

<sect1 id="parport">Supporto per la porta parallela 
<p> 
In <package>kernel-image-2.4.*</package>, il supporto per la porta parallela è
fornito come modulo. Attivatelo con: 
<example> 
# modprobe lp 
# echo lp >> /etc/modules 
</example> 
Vedere <file>Documentation/parport.txt</file> nel sorgente Linux.  

</sect1>
</sect>

<sect id="proc-sys">Mettere a punto il kernel tramite il filesystem proc
<p>
Il comportamento del kernel Linux può essere modificato al volo usando il 
filesystem proc.
<p>
Per le informazioni di base sulle modifiche ai parametri del kernel attraverso
il filesystem <file>/proc</file>, leggete <file>Documentation/sysctl/*</file>
nella directory Linux.
<p>
Potete vedere alcuni esempi di manipolazione dei parametri del kernel in
<file>/etc/init.d/networking</file> e <ref id="killecn">.
<p>
Vedere <manref name="sysctl.conf" section="5"> su come impostare la
configurazione del kernel all'avvio attraverso <file>/proc</file>, con lo script 
<file>/etc/init.d/procps.sh</file> generalmente lanciato da
<file>/etc/rcS.d/S30procps.sh</file>.

<sect1 id="many-files">Troppi file aperti 
<p> 
Il kernel può dare un messaggio del tipo "Too many open files" (troppi file aperti).  
Ciò è dovuto al basso valore predefinito (8096) per <tt>file-max</tt>. Per risolvere il problema,
date il seguente comando da root (oppure mettetelo in uno script di inizio in <file>/etc/rcS.d/*</file>.  
<example> 
# echo "65536" >/proc/sys/fs/file-max # per i kernel 2.2 e 2.4 
# echo "131072" >/proc/sys/fs/inode-max # solo per kernel 2.2 
</example> 
oppure mettete quanto segue in <file>/etc/sysctl.conf</file> per avere una
modifica permanente:
<example>
file-max=65536   # per kernel 2.2 e 2.4 
inode-max=131072 # solo per 2.2 
</example>

<sect1 id="bdflush">Intervalli di flush del disco rigido
<p>
Potete modificare gli intervalli di flush mediante il filesystem proc. Quanto 
segue riduce gli intervalli dai cinque secondi predefiniti ad un secondo.
<example>
# echo "40 0 0 0 100 30000 60 0 0"  &gt; /proc/sys/vm/bdflush
</example>
Ciò può avere un minimo impatto negativo nella performance I/O. Però assicura
il contenuto dei file, tranne che per l'ultimo secondo, più breve dei cinque
predefiniti. Questo è vero anche per i filesystem journaled.
</sect1>

<sect1 id="over-commit">Vecchie macchine lente e con poca memoria
<p>
Per alcuni vecchi sistemi con poca memoria, può ancora essere utile abilitare
l'over-commit della memoria tramite il filesystem proc.
<example>
# echo 1 &gt; /proc/sys/vm/overcommit_memory
</example> 
</sect1>

</sect>
<sect id="udev">Il kernel 2.6 con udev 
 <p>
Udev è un rimpiazzo dinamico per <file>/dev</file>.
 I nomi dei device devon essere molto corti.
 Devfs, usato nel kernel 2.4, è obsoleto.
 <p> 
 Potete abilitarlo installando il kernel Debian 2.6
 <package>kernel-image-2.6.<var>NN</var></package> con
 il pacchetto <package>udev</package>. 
 </sect>
 
</chapt>