File: Kerneld

package info (click to toggle)
doc-linux-it 2000.01-1
  • links: PTS
  • area: main
  • in suites: woody
  • size: 8,136 kB
  • ctags: 19
  • sloc: perl: 249; makefile: 50; sh: 42
file content (1188 lines) | stat: -rw-r--r-- 39,077 bytes parent folder | download
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
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
  kerneld mini-HOWTO
  Henrik Storner, <storner@osiris.ping.dk>
  v1.7, 19 luglio 1997

  Questo documento spiega come puoi usare la funzione kerneld nei kernel
  di Linux.  L'ultima versione rilasciata di questo documento la puoi
  trovare all'indirizzo  <http://eolicom.olicom.dk/~storner/kerneld-
  mini-HOWTO.html>.  Dopo ogni pubblicazione di questo mini-HOWTO puoi
  trovare degli aggiornamenti nella mia lista disordinata dei cambia
  menti all'indirizzo  <http://eolicom.olicom.dk/~storner/kern.html>.
  Traduzione di Lorenzo Cappelletti, <lency@dei.unipd.it>.

  1.  Ringraziamenti


  Se dovessi trovare delle cose sbagliate in questo documento, ti
  pregherei di farmelo sapere.

  Le seguenti persone hanno contribuito per questo mini-HOWTO in alcuni
  punti:

    Bjorn Ekwall <bj0rn@blox.se>

    Ben Galliart <bgallia@luc.edu>

    Cedric Tefft <cedric@earthling.net>

    Brian Miller <bmiller@netspace.net.au>

    James C. Tsiao <jtsiao@madoka.jpl.nasa.gov>

  Ho apprezzato molto gli incoraggiamenti ed i suggerimenti che mi hanno
  spedito i lettori di questo mini-HOWTO.




  2.  Preliminari



  2.1.  Cos' kerneld ?


  kerneld  una caratteristica introdotta durante lo sviluppo dei kernel
  1.3 da Bjorn Ekwall <mailto:bj0rn@blox.se>.  Viene acclusa con tutti i
  kernel delle versioni 2.0 e 2.1.  Permette ai moduli del kernel
  (cio driver di periferica, driver di rete, filesystem) di venir
  caricati automaticamente quando c' bisogno, invece di doverlo fare
  manualmente con modprobe o insmod.

  E per motivi pi divertenti, nonostante questi non siano (ancora?)
  integrati con il kernel standard:

    pu essere impostato per lanciare un programma, invece del solito
     schermo nero, permettendoti cos di usare ogni programma come uno
     screen-saver;

    similmente al supporto dell'oscuramento dello schermo, puoi anche
     cambiare il beep di console in qualche cosa di completamente
     differente...

  kerneld consiste di due entit separate:

    un supporto nel kernel di Linux che permette di inviare delle
     richieste ad un demone, affinch sappia che un modulo  necessario
     per una certa operazione;

    un demone a livello utente che capisca quali moduli devono essere
     caricati per soddisfare alle richieste del kernel.

  Entrambe le parti dovranno lavorare per far funzionare il supporto
  kerneld.  Non  sufficiente che ne sia configurata una sola.



  2.2.  Perch avrei bisogno di usarlo?


  Ci sono alcune buone ragioni per usare kerneld.  Quelle che menzioner
  sono le mie, gli altri potrebbero volerlo usare per altri motivi.


    Se devi compilare kernel per svariati sistemi che si distinguono di
     poco (differenti tipi di schede di rete, per esempio), puoi
     preparare un singolo kernel e alcuni moduli invece di essere
     costretto a compilare un kernel per ogni sistema.

    I moduli sono pi facili da provare per gli sviluppatori (non c'
     bisogno di ravviare il sistema per caricare e scaricare i driver).
     Questo vale per tutti i moduli, non solo per quelli caricati da
     kerneld.

    Limita l'utilizzo di memoria da parte del kernel, cio hai pi
     memoria disponibile per le applicazioni.  La memoria usata dal
     kernel non  mai trasferita alla memoria di swap, cos se ci sono
     100kB di driver inutilizzati compilati nel kernel, questi sono
     semplicemente RAM sprecata.

    Alcune delle cose che uso (il driver per l'unit a nastro, per
     esempio, o l'iBCS) sono solo disponibili come moduli.  Ma non
     voglio scocciarmi con il loro caricamento e scaricamento ogni volta
     che ne ho bisogno.

    Le persone che curano le distribuzioni Linux non devono compilare
     284 differenti immagini di boot: ogni utente carica i driver di cui
     ha bisogno per il suo hardware.  Questo  usato, per esempio, dalla
     RedHat 4.0 nella sua installazione.

  Certo, ci sono anche ragioni per le quali potresti non volerlo usare
  (potresti preferire un unico file d'immagine per il kernel con tutti i
  tuoi driver compilati staticamente).  In questo caso stai leggendo il
  documento sbagliato.



  2.3.  Dove posso prelevare i componenti necessari?


  Il supporto nel kernel di Linux fu introdotto con Linux 1.3.57.  Se
  hai una versione di kernel precedente, avrai bisogno di aggiornarla se
  vuoi il supporto per kerneld.  Tutti i maggiori siti ftp di Linux
  contengono i sorgenti del kernel.  Ti raccomando di aggiornarti
  all'ultima versione stabile, 2.0, ora a livello di patch 29:

    <ftp://sunsite.unc.edu/pub/Linux/kernel/v2.0/>linux-2.0.29.tar.gz

    <ftp://tsx-11.mit.edu/pub/linux/sources/system/v2.0/>linux-2.0.29.tar.gz

    <ftp://ftp.funet.fi/pub/OS/Linux/PEOPLE/Linus/v2.0/>linux-2.0.29.tar.gz


  Il demone a livello utente  incluso nel pacchetto modules-1.2.8 e con
  il pi aggiornato modules-2.0.  Questi sono normalmente disponibili
  dallo stesso sito in cui avete trovato i sorgenti del kernel, mentre i
  siti ufficiali includono:

    <ftp://sunsite.unc.edu/pub/Linux/kernel/>/modules-2.0.0.tar.gz

    <ftp://tsx-11.mit.edu/pub/linux/sources/sbin/>modules-2.0.0.tar.gz

    <ftp://ftp.funet.fi/pub/OS/Linux/tools/>modules-2.0.0.tar.gz

  NOTA: se vuoi provare a caricare i moduli con gli ultimi kernel 2.1 in
  fase di sviluppo, devi procurarti il pacchetto modutils- (NON
  modules-).  Comunque ``vedi pi avanti'' per i problemi che si possono
  avere con i moduli ed il kernel 2.1.




  3.  Cominciamo a fare sul serio



  3.1.  Come impostare il tutto?


  Primo procurarsi i componenti necessari: un kernel adatto e le ultime
  utility per i moduli.  Poi devi installarle.  Molto semplice:
  decomprimi i sorgenti e lancia make install.  Questo compila e
  installa in /sbin i seguenti programmi: genksysm, insmod, lsmod,
  modprobe, depmod, kerneld.  Ti raccomando di aggiungere le seguenti
  linee ai tuoi script di avvio che effettuano alcune impostazioni
  necessarie ogni volta che Linux viene avviato.  Aggiungi le seguenti
  linee al tuo file /etc/rc.d/rc.S (se utilizzi Slackware) o a
  /etc/rc.d/rc.sysinit (se utilizzi SysVinit, cio Debian, RedHat,
  Caldera):



       # Lancia kerneld - questo deve accadere molto presto nel processo
       # di boot, sicuramente PRIMA che venga avviato fsck sui filesystem,
       # in quanto potrebbe richiedere l'autocaricamento di qualche driver
       if [ -x /sbin/<tt/kerneld/ ]
       then
               /sbin/<tt/kerneld/
       fi

       # I comandi fsck standard vanno qui
       # assieme al comando mount per montare il fs in lettura-scrittura


       # Aggiornamento del file per le dipendenze kernel-moduli
       # Il fs root ora DEVE essere montato in lettura-scrittura
       if [ -x /sbin/depmod ]
       then
               /sbin/depmod -a
       fi




  La prima parte lancia kerneld.

  La seconda parte chiama depmod -a all'avvio.  Il programma depmod
  costruisce una lista di moduli disponibili e analizza le loro inter-
  dipendenze, cos si sa se, per un modulo che sta per essere caricato,
   necessario caricarne un altro prima.

  Nota: nelle recenti versioni di kerneld c' la possibilit di fare il
  link verso le librerie GNU dbm, libgdbm.  Se abiliti questa opzione
  quando compili le utility per i moduli, kerneld non partir se libgdbm
  non  disponibile, caso che potrebbe accadere se hai /usr su una
  partizione separata e fai partire kerneld prima che /usr sia montata.
  La soluzione consigliata  di spostare libgdbm da /usr/lib a /lib o
  linkarla staticamente a kerneld.

  Successivamente decomprimi i sorgenti del kernel, configuralo e
  compilane uno che ti soddisfi.  Se non lo hai mai fatto prima, devi
  definitivamente leggerti il file README che si trova al primo livello
  dei sorgenti di Linux.  Quando lanci make config per configurare il
  kernel, devi prestare attenzione ad alcune domande che appaiono verso
  l'inizio:



       Enable loadable module support (CONFIG_MODULES) [Y/n/?] Y




  Hai bisogno di selezionare il supporto per i moduli caricabili o non
  ci saranno moduli per kerneld da caricare! Rispondi con Yes.



       Kernel daemon support (CONFIG_KERNELD) [Y/n/?] Y




  Anche questo, ovviamente,  necessario. A questo punto molte delle
  cose nel kernel possono essere compilate come moduli. Vedrai domande
  come:


       Normal floppy disk support (CONFIG_BLK_DEV_FD) [M/n/y/?]




  dove puoi rispondere con una M che sta per Modulo. Generalmente
  solo i driver necessari per far partire il sistema (il driver per
  l'hard-disk, il driver per il filesystem principale) dovrebbero essere
  compilati nel kernel; gli altri possono essere compilati come moduli.

  Una volta finito con make config, lancia make dep, make clean, make
  zImage o make zlilo, make modules e make modules_install.

  Uff!

  Il comando make zImage mette la nuova immagine del kernel nel file
  /arch/i386/boot/zImage.  Avrai bisogno di copiarla dove tieni la tua
  immagine di boot o di configurare LILO in seguito.

  Per maggiori informazioni su come configurare, compilare e installare
  il tuo kernel, dai un'occhiata al Kernel-HOWTO
  <http://sunsite.unc.edu/mdw/HOWTO/Kernel-HOWTO.html>, postato
  regolarmente in comp.os.linux.answers e disponibile su sunsite.unc.edu
  in /pub/Linux/docs/HOWTO.



  3.2.  Proviamo kerneld


  Ora fai il reboot con il nuovo kernel.  Quando il sistema  di nuovo
  pronto, puoi lanciare un ps -ax con il quale dovresti vedere una linea
  dedicata a kerneld:



       PID TTY STAT  TIME COMMAND
        59  ?  S     0:01 /sbin/kerneld




  Una delle cose carine con kerneld  che, una volta che hai installato
  il kernel e il demone, poche impostazioni sono ancora necessarie.  Per
  un inizio prova ad usare uno dei driver che hai compilato come modulo
  (in generale tutto funziona senza ulteriori configurazioni).  Io ho
  compilato il driver per il floppy come modulo, cos posso mettere un
  dischetto DOS nel drive e


       osiris:~ $ mdir a:
        Volume in drive A has no label
        Volume Serial Number is 2E2B-1102
        Directory for A:/

       binuti~1 gz       1942 02-14-1996  11:35a binutils-2.6.0.6-2.6.0.7.diff.gz
       libc-5~1 gz      24747 02-14-1996  11:35a libc-5.3.4-5.3.5.diff.gz
               2 file(s)        26689 bytes




  Cos il driver del floppy funziona: viene caricato automaticamente da
  kerneld quando provo ad usare il disco floppy.

  Per vedere, invece, che il modulo del floppy viene effettivamente
  caricato, puoi lanciare /sbin/lsmod che lista tutti i moduli
  attualmente caricati:


       osiris:~ $ /sbin/lsmod
       Module:        #pages:  Used by:
       floppy            11    0 (autoclean)




  L'autoclean sta ad indicare che il modulo verr automaticamente
  rimosso da kerneld dopo che questo non viene usato per pi di un min
  uto.  Cos le 11 pagine di memoria (=44kB, una pagina  4kB) verranno
  utilizzate solo quando accedo al drive del floppy (se non uso il
  floppy per pi di un minuto, verranno liberate).  Alquanto carino, se
  sei a corto di memoria per le tue applicazioni!


  4.  Come fa kerneld  a sapere quale modulo caricare?


  Nonostante kerneld ci venga fornito con informazioni gi pronte sui
  tipi pi comuni di moduli, ci sono situazioni in cui kerneld non sapr
  come trattare una richiesta del kernel.  Questo accade per moduli tipo
  il driver per il CD-ROM o i driver di rete, dove ci sono pi di un
  modulo da poter caricare.
  Le richieste che il demone kerneld riceve dal kernel possono
  appartenere ad uno dei seguenti tipi:

    ``driver di periferica a blocchi''

    ``driver di periferica a caratteri''

    ``formato binario''

    ``disciplinea di linea tty''

    ``filesystem''

    ``periferica di rete''

    servizio di rete (per esempio rarp)

    ``protocollo di rete'' (per esempio IPX)

  kerneld determina quale modulo dovrebbe essere caricato cercando nel
  file di configurazione /etc/conf.modules.  Ci sono due tipi di voci
  possibili in questo file: path (dove si trovano i file dei moduli) e
  alias (quale modulo dovrebbe essere caricato).  Se non hai gi questo
  file, dovresti crearlo con il comando:


       /sbin/modprobe -c | grep -v '^path' > /etc/conf.modules




  Se vuoi aggiungere un'altra direttiva path ai percorsi di default,
  devi anche includere tutti gli altri percorsi di default, in quanto
  una direttiva path in /etc/conf.modules rimpiazzer tutti quelli che
  modprobe conosce per default!

  Normalmente non avrai bisogno di aggiungere alcun percorso, in quanto
  l'insieme di quelli precompilati dovrebbe essere sufficiente per tutte
  le configurazioni normali (ed altre ancora...).  Promesso!

  Diversamente, se vuoi aggiungere un alias o una direttiva option,
  le nuove voci in /etc/conf.modules verranno aggiunte a quelle che
  modprobe gi conosce.  Se devi ridefinire un alias o options, le
  nuove voci in /etc/conf.modules sovrascriveranno quelle precompilate.



  4.1.  Periferiche a blocchi


  Se esegui /sbin/modprobe -c, otterrai una lista di moduli che kerneld
  conosce, e di richieste alle quali questi corrispondono.  Per esempio,
  la richiesta che termina con il caricamento del driver del floppy 
  (per una periferica a blocchi che ha un major number pari a 2):


       osiris:~ $ /sbin/modprobe -c | grep floppy
       alias block-major-2 floppy




  Perch block-major-2?  Perch le periferiche floppy /dev/fd* usano una
  periferica con major di 2 e sono periferiche a blocchi:


  osiris:~ $ ls -l /dev/fd0 /dev/fd1
  brw-rw-rw-   1 root     root       2,   0 Mar  3  1995 /dev/fd0
  brw-r--r--   1 root     root       2,   1 Mar  3  1995 /dev/fd1






  4.2.  Periferiche a caratteri


  Le periferiche a caratteri sono trattate in modo analogo.  Per esempio
  il driver per l'unit a nastro connessa come floppy ha un major di 27:


       osiris:~ $ ls -lL /dev/ftape
       crw-rw----   1 root     disk      27,   0 Jul 18  1994 /dev/ftape




  Per kerneld non conosce per default il driver dell'unit a nastro.
  Infatti non  presente nella lista ottenuta da /sbin/modprobe -c.

  Cos per impostare kerneld affinch carichi il driver per l'unit a
  nastro, si deve aggiungere una linea al file di configurazione di
  kerneld /etc/conf.modules:


       alias char-major-27 ftape






  4.3.  Periferiche di rete


  Puoi anche usare il nome della periferica al posto di impostazioni
  come char-major-xxx o block-major-yyy.  Questo  particolarmente
  utile per i driver di rete. Per esempio un driver per una scheda di
  rete tipo ne2000 abilitata come eth0 verrebbe caricato con


       alias eth0 ne




  Se hai la necessit di passare alcune opzioni al driver (per esempio
  per informare il modulo su quale IRQ la scheda di rete sta usando)
  aggiungi una linea options:


       options ne irq=5




  Questo far in modo che kerneld carichi il driver NE2000 con il
  comando:



  /sbin/modprobe ne irq=5




  Ovviamente le opzioni effettivamente disponibili sono specifiche al
  modulo che caricherai.



  4.4.  Formati degli eseguibili


  I formati binari sono trattati in modo simile. Ogni volta che provi a
  lanciare un programma che kerneld non sa come caricare, kerneld riceve
  una richiesta per binfmt-xxx, dove xxx  il numero determinato dai
  primi byte dell'eseguibile. Cos la configurazione di kerneld per
  supportare il modulo binfmt_aout per gli eseguibili ZMAGIC (a.out) :


       alias binfmt-267 binfmt_aout




  in quanto il magic number (vedi /etc/magic) per file ZMAGIC  267.
  (Se provi a controllare /etc/magic, vedrai il numero 0413, ma
  /etc/magic usa numeri ottali, mentre kerneld li usa decimali, e ottale
  413 = decimale 267).  In realt ci sono tre varianti leggermente
  diverse per gli eseguibili a.out (NMAGIC, QMAGIC and ZMAGIC), cos per
  un pieno supporto del modulo binfmt_aout abbiamo bisogno di:


       alias binfmt-264 binfmt_aout  # eseguibile puro (NMAGIC)
       alias binfmt-267 binfmt_aout  # eseguibile demand-paged (ZMAGIC)
       alias binfmt-204 binfmt_aout  # eseguibile demand-paged (QMAGIC)




  I formati binari a.out, Java e iBCS sono riconosciuti automaticamente
  da kerneld, senza alcuna configurazione.



  4.5.  Disciplinea di linea (slip, cslip e ppp)


  Le disciplinee di linea sono richieste con tty-ldisc-x, dove x
  assume solitamente i valori 1 (per SLIP) o 3 (per PPP).  Entrambi sono
  riconosciuti da kerneld automaticamente.

  A proposito di ppp, se vuoi che kerneld carichi il modulo bsd_comp per
  la compressione dei dati per il ppp, allora devi aggiungere le due
  linee seguenti al tuo /etc/conf.modules:


       alias tty-ldisc-3 bsd_comp
       alias ppp0 bsd_comp







  4.6.  Famiglie di protocolli di rete (IPX, AppleTalk, AX.25)


  Anche alcuni protocolli di rete possono essere caricati come moduli.
  Il kernel domanda a kerneld di una famiglia di protocolli (per esempio
  IPX) con una richiesta del tipo net-pf-x, dove x  un numero che sta
  ad indicare la famiglia voluta.  Per esempio net-pf-3  AX.25, net-
  pf-4  IPX e net-pf-5  AppleTalk (questi numeri sono determinati
  dalle definizioni AF_AX25, AF_IPX, etc. nel file sorgente di Linux
  include/linux/socket.h).


       alias net-pf-4 ipx




  Dai un'occhiata anche alla sezione riguardante i ``problemi comuni''
  per informazioni su come evitare alcuni noiosi messaggi all'avvio
  relativi a famiglie di protocolli indefiniti.



  4.7.  File system


  Le richieste di kerneld per i filesystem sono semplicemente i nomi dei
  filesystem.  Un tipico uso potrebbe essere quello di caricare il
  modulo isofs per i filesystem del CD-ROM, cio per filesystem di tipo
  iso9660:


       alias iso9660 isofs







  5.  Periferiche che richiedono una configurazione speciale


  Alcune periferiche richiedono una configurazione che va leggermente al
  di l del semplice uso di alias del tipo periferica-modulo.

    periferiche a caratteri con major number 10: ``Periferiche varie''

    ``periferiche SCSI''

    ``periferiche che richiedono inizializzazioni speciali''



  5.1.  char-major-10: mouse,watchdog e random


  Le periferiche hardware sono usualmente identificate con il loro major
  number, cos per l'unit a nastro si ha un char-major-27.  Ci
  nonostante, se scorri le voci presenti in /dev che contengono il char-
  major-10, vedrai che queste formano un bel gruppo di periferiche molto
  diverse fra loro:

    mouse di vari tipi (bus mouse, mouse PS/2)


    periferiche watchdog

    la periferica del kernel random

    interfaccia APM (Advanced Power Management)

  Ovviamente queste periferiche sono controllate da altrettanti moduli
  differenti, non da uno solo.  Perci la configurazione di kerneld per
  queste periferiche eterogenee fa uso del major number e del minor
  number:


       alias char-major-10-1 psaux     # per mouse PS/2
       alias char-major-10-130 wdt     # per il watchdog WDT




  Hai bisogno di una versione del kernel 1.3.82 o superiore per poter
  utilizzare questa caratteristica; le versioni precedenti non passano
  il minor number a kerneld, impedendogli di capire quale modulo di
  periferica caricare.



  5.2.  Caricamento di driver SCSI: la voce scsi_hostadapter


  I driver per le periferiche SCSI consistono in un driver per
  l'adattatore SCSI (per esempio un Adaptec 1542) e di un driver per il
  tipo di periferica SCSI che usi (per esempio un hard-disk, un CD-ROM o
  un'unit a nastro).  Tutti questi possono essere caricati come moduli.
  Perci, quando vuoi accedere, per esempio, al lettore di CD-ROM
  connesso alla scheda Adaptec, il kernel e kerneld sanno solo che c'
  bisogno di caricare il modulo sr_mod per supportare il CD-ROM SCSI, ma
  non sanno a quale controller il CD-ROM  connesso n, tanto meno,
  quale modulo caricare per supportare il controller SCSI.

  Per risolvere questo problema puoi aggiungere una voce per il driver
  SCSI al tuo /etc/conf.modules che dica a kerneld quale dei possibili
  moduli per controller SCSI deve caricare:


       alias scd0 sr_mod               # sr_mod per CD-ROM SCSI...
       alias scsi_hostadapter aha1542  # ...necessitano del driver Adaptec




  Questo funziona solo con versioni del kernel 1.3.82 o superiori.

  Il metodo va bene se hai un solo controller SCSI.  Se ne hai pi
  d'uno, le cose diventano un po' pi difficili.

  In generale non puoi lasciare che kerneld carichi un driver per un
  adattatore SCSI se un driver per un altro adattatore SCSI  gi
  installato.  Sei costretto a compilare entrambi i driver direttamente
  nel kernel (non come moduli) o caricare i moduli manualmente.

  Anche se un modo per caricare pi driver SCSI c'.  James Tsiao ha
  avuto questa idea:

       Puoi facilmente fare in modo che kerneld carichi il secondo
       driver scsi impostando le dipendenze in modules.dep a mano.
       Hai bisogno solo di una voce come:

  /lib/modules/2.0.30/scsi/st.o: /lib/modules/2.0.30/scsi/aha1542.o




  per far caricare a kerneld aha1542.o prima che carichi st.o.
  La mia macchina a casa  configurata praticamente come sopra
  e tutto funziona bene per le mie periferiche scsi secon
  darie, inclusa l'unit a nastro, il CD-ROM e periferiche
  scsi generiche. La controparte sta nel fatto che depmod -a
  non pu rilevare automaticamente queste dipendenze, cos
  l'utente ha bisogno di aggiungerle manualmente e non pu
  lanciare depmod -a all'avvio.  Ma, una volta che tutto 
  configurato, kerneld caricher in automatico l'aha1542.o
  senza problemi.


  Dovresti essere conscio che questa tecnica funziona solo se hai tipi
  diversi di periferiche SCSI collegate ai due controller (per esempio
  degli hard-disk su un controller e lettori CD-ROM, unit a nastro o
  periferiche SCSI generiche sull'altro).



  5.3.  Quando caricare un modulo non  abbastanza: la voce 'post-
  install'


  Qualche volta caricare solo il modulo non  abbastanza per far
  funzionare le cose.  Per esempio, se hai compilato la scheda sonora
  come modulo, spesso  conveniente impostare un certo livello per il
  volume.  L'unico problema  che l'impostazione svanisce quando viene
  caricato il modulo un'altra volta. Ecco, in breve, un trucco di Ben
  Galliart <mailto:bgallia@luc.edu>:

       La soluzione definitiva richiesta dall'installazione del
       pacchetto setmix-0.1 <ftp://sun
       site.unc.edu/pub/Linux/apps/sound/mixers/setmix-0.1.tar.gz>.
       E poi aggiungendo le seguenti linee al mio /etc/conf.mod
       ules:


       post-install sound /usr/local/bin/setmix -f /etc/volume.conf





  Questa linea fa in modo che kerneld, dopo che il modulo per l'audio 
  stato caricato, lanci il comando indicato dalla voce post-install
  sound.  Cos il modulo sonoro viene configurato con il comando
  /usr/local/bin/setmix -f /etc/volume.conf.

  Ci pu essere utile anche per altri moduli, per esempio il modulo lp
  pu essere configurato con il programma tunelp aggiungendo:


       post-install lp tunelp <options>




  Affinch kerneld recepisca queste opzioni, hai bisogno di una versione
  di kerneld che sia la 1.3.69f o superiore.


  Nota: una versione recente di questo mini-HOWTO parlava di un'opzione
  pre-remove, che si sarebbe potuta usare per eseguire un comando
  appena prima che kerneld rimuovesse un modulo.  Ci nonostante questa
  opzione non ha mai funzionato e il suo uso  perci scoraggiato (pi
  appropriatamente, questa opzione scomparir in una release futura di
  kerneld). L'intera struttura delle impostazioni per un modulo sta
  subendo alcuni cambiamenti in questo momento e potrebbe essere diversa
  sul tuo sistema quando leggerai questo documento.




  6.  Spiare kerneld


  Se hai provato qualsiasi cosa e non sei proprio capace di immaginare
  cosa il kernel stia chiedendo di fare a kerneld, c' un modo di vedere
  le richieste che kerneld riceve e, da questo, capire cosa deve andare
  in /etc/conf.modules: l'utility kdstat.

  Questo piccolo e grazioso programma fa parte del pacchetto dei moduli,
  ma non viene compilato n installato per default.  Per ottenerlo:


       cd /usr/src/modules-2.0.0/kerneld
       make kdstat




  Poi, per fare in modo che kerneld mostri informazioni su cosa sta
  facendo, lancia


       kdstat debug




  e kerneld comincer a vomitare messaggi sulla console dicendoti di
  cosa sta facendo.  Se poi provi ad eseguire il comando che vuoi uti
  lizzare, vedrai comparire le richieste di kerneld; queste possono
  essere messe in /etc/conf.modules utilizzando un sinonimo per il mod
  ulo necessario a completare il lavoro.

  Per fermare la fase di debug, lancia /sbin/kdstat nodebug.




  7.  Usi particolari di kerneld


  Lo sapevo che volevi chiedere come impostare il modulo per lo screen-
  saver...

  La directory kerneld/GOODIES nel pacchetto dei moduli ha un paio di
  patch per il supporto di kerneld di screen-saver e beep della console;
  queste non fanno ancora parte del kernel ufficiale.  Cos avrai
  bisogno di installarle e ricompilare il kernel.

  Per installare una patch si usa il comando patch:




  cd /usr/src/linux
  patch -s -p1 < /usr/src/modules-2.0.0/<tt/kerneld//GOODIES/blanker_patch




  Poi ricompila ed installa il nuovo kernel.

  Quando lo screen-saver viene attivato kerneld eseguir il comando
  /sbin/screen-blanker (questo pu essere uno script di shell che lancia
  il tuo screen-saver favorito).

  Quando il kernel vuole ripristinare lo schermo invia un segnale
  SIGQUIT al processo che sta eseguendo /sbin/screenblanker.  Lo script
  di shell deve poterlo catturare e terminare.  Ricordati di
  ripristinare lo schermo alla modalit testo originale!




  8.  Problemi comuni e cose di cui non capisci il motivo



  8.1.  Perch ottengo il messaggio ``Cannot locate module for net-pf- x
  '' (Non riesco a trovare il modulo per net-pf- x ) quando lancio
  ifconfig?


  Circa alla versione 1.3.80 del kernel, il codice per la gestione delle
  reti fu cambiato per permettere il caricamento di famiglie di
  protocolli (per esempio IPX, AX.25 e AppleTalk) come moduli.  Ci
  caus l'aggiunta di una nuova richiesta di kerneld: net-pf-X, dove X 
  un numero che identifica il protocollo (vedi
  /usr/src/linux/include/linux/socket.h per il significato dei vari
  numeri).  Sfortunatamente ifconfig provoca in modo accidentale questi
  messaggi, cosicch molte persone ottengono un paio di messaggi di log
  quando il sistema viene avviato e viene lanciato ifconfig per
  configurare la periferica loopback.  I messaggi non indicano nulla di
  pericoloso e puoi disabilitarli aggiungendo le linee:


       alias net-pf-3 off      # Dimenticati di AX.25
       alias net-pf-4 off      # Dimenticati di IPX
       alias net-pf-5 off      # Dimenticati di AppleTalk




  a /etc/conf.modules.  Ovviamente, se utilizzi IPX come modulo, non
  devi aggiungere la linea che lo disabiliti.



  8.2.  Dopo la partenza di kerneld  il mio sistema viene messo in
  ginocchio quando attivo una connessione ppp


  Ci sono stati un paio di casi di questo problema.  Sembra essere
  dovuto ad una sfortunata interazione fra kerneld e lo script tkPPP che
  viene usato su alcuni sistemi per impostare e configurare la
  connessione PPP (lo script, apparentemente, si morde la coda mentre
  esegue ifconfig). Questo richiama kerneld per cercare i moduli net-pf-
  x (vedi sopra), tenendo il sistema in sovraccarico e generando,
  eventualmente, un sacco si messaggi del tipo Cannot locate module for
  net-pf-x nel log di sistema.  Non si conosce alcun modo per aggirare
  il problema, se non quello di evitare tkPPP o di cambiarlo usando
  qualche altro modo per tenere sotto controllo la connessione.



  8.3.  kerneld  non carica il mio driver SCSI!


  Aggiungi una voce per il tuo adattatore SCSI al tuo /etc/conf.module.
  Vai a vedere la descrizione della voce ``scsi_hostadapter'' sopra.



  8.4.  modprobe si lamenta che gcc2_compiled non  definito


  Questo  un errore nelle utility dei moduli che si verifica solo con
  le binutils 2.6.0.9 e seguenti, e che  anche documentato nelle note
  per le binutils.  Dacci un'occhiata.  Oppure procurati un
  aggiornamento per le utility dei moduli che porgano rimedio, come per
  esempio modules-2.0.0.



  8.5.  Il driver della mia scheda sonora non si ricorda delle
  impostazioni per il volume, etc.


  Le impostazioni per un modulo sono salvate all'interno del modulo
  stesso quando viene caricato.  Cos, quando kerneld auto-scarica il
  modulo, ogni impostazione che hai fatto viene dimenticata e la volta
  successiva il modulo ritorna alle impostazioni di default.

  Puoi dire a kerneld di configurare un modulo, eseguendo un programma,
  dopo che il modulo  stato auto-caricato.  Vedere la ``sezione sopra''
  per la voce post-install.



  8.6.  Dosemu ha bisogno di alcuni moduli. Come posso fare affinch
  kerneld  li carichi?


  Non puoi.  Nessuna delle versioni di Dosemu (ufficiali o di sviluppo)
  supporta il caricamento dei moduli di Dosemu attraverso kerneld.
  Per, se stai utilizzando un kernel 2.0.26 o successivi, non hai pi
  bisogno di alcun modulo speciale Dosemu. Semplicemente aggiornati alla
  versione 0.66.1.



  8.7.  Perch ottengo un messaggio ``Ouch, kerneld timed out, message
  failed'' (Oops, tempo scaduto per kerneld, messaggio fallito)?


  Quando il kernel invia una richiesta a kerneld, si aspetta di ottenere
  un ricevuto entro un secondo.  Se kerneld non invia questo
  riscontro, il messaggio d'errore viene registrato nel log di sistema.
  La richiesta viene ritrasmessa e dovrebbe arrivare a destinazione.

  Questo di solito capita su sistemi con un carico elevato (poich
  kerneld  un processo eseguito in modalit utente, esso viene
  schedulato come ogni altro processo sul sistema).  In momenti di alto
  carico, pu non riuscire ad inviare per tempo il ricevuto, prima che
  scada il tempo per kernel.

  Se questo accade anche quando il carico  scarso, prova a far
  ripartire kerneld.  Uccidi il processo kerneld e fallo ripartire
  ancora con il comando /usr/sbin/kerneld.  Se il problema persiste,
  dovresti inviare un messaggio con l'errore a <linux-
  kernel@vger.rutgers.edu>, ma ti prego di assicurarti che la tua
  versione di kernel e kerneld sia aggiornata prima di spedire messaggi
  sul problema.



  8.8.  mount non aspetta che kerneld  carichi il modulo per il filesys
  tem


  Ci sono stati un certo numero di casi per i quali il comando mount(8)
  non aspettava che kerneld finisse di caricare il modulo del
  filesystem.  lsmod mostrava che kerneld aveva caricato il modulo e,
  ripetendo il comando mount subito dopo, questo in effetti veniva
  fatto.  Questo sembra fosse dovuto ad un errore nella versione 1.3.9f
  delle utility per i moduli che affliggeva alcuni utenti Debian (pu
  essere eliminato procurandosi una versione successiva delle utility
  per i moduli).



  8.9.  kerneld  fallisce nel caricare il modulo ncpfs


  Hai bisogno di compilare le utility per ncpfs con l'opzione
  -DHAVE_KERNELD.  Vedere il Makefile di ncpfs.



  8.10.  kerneld  fallisce nel caricare il modulo per smbfs


  Stai usando un versione delle utility per smbmount troppo vecchia.
  Procurati l'ultima versione (0.10 o successive) da
  <ftp://tsx-11.mit.edu/pub/linux/filesystems/smbfs/>



  8.11.  Ho compilato tutto come modulo e ora il mio sistema non si
  avvia pi


  8.12.  kerneld  fallisce nel caricare il filesystem principale


  Non puoi rendere modulare tutto: il kernel deve avere abbastanza
  driver compilati normalmente affinch sia capace di fare il mount del
  filesystem principale ed eseguire i programmi necessari ad avviare
  kerneld.  Cos non puoi rendere modulare:

    il driver per l'hard-disk sul quale risiede il filesystem
     principale;

    il driver del filesystem stesso;

    il caricatore del formato binario di init, kerneld e altri
     programmi.

  In effetti questo non  vero.  L'ultimo kernel 1.3.x e tutti i 2.x
  supportano l'uso di un ram-disk iniziale che viene caricato da LILO o
  LOADLIN, ed  possibile caricare moduli da questo disco molto presto
  all'interno del processo di avvio.  Il procedimento per farlo 
  descritto nel file Documentation/initrd.txt contenuto con i sorgenti
  del kernel.



  8.13.  kerneld  non viene caricato all'avvio - si lamenta di libgdbm


  Le versioni pi recenti di kerneld hanno bisogno delle librerie dbm di
  GNU, le libgdbm.so, per girare.  Molte installazione hanno questo file
  in /usr/lib, mentre tu stai probabilmente lanciando kerneld prima che
  il filesystem sia stato montato.  Un sintomo di questo  che kerneld
  non parte durante l'avvio (dai tuoi script rc), ma va bene se lo lanci
  manualmente dopo che il sistema  partito.  La soluzione consiste
  nello spostare l'avvio di kerneld dopo che di /usr ne sia stato fatto
  il mount oppure spostare la libreria gdbm sul filesystem principale,
  per esempio in /lib.



  8.14.  Ottengo un ``Cannot load module xxx '' (Non posso caricare il
  modulo xxx ), ma ho appena riconfigurato il kernel senza il supporto
  per xxx !


  L'installazione Slackware (possibilmente altre) crea un file
  /etc/rc.d/rc.modules che opera un esplicito modprobe su una variet di
  moduli.  Quali moduli esattamente vengano testati dipende dalla
  configurazione originale del kernel.  Hai probabilmente riconfigurato
  il tuo kernel escludendo uno o pi dei moduli che vengono testati in
  rc.modules, cos il messaggio/i di errore.  Aggiorna il tuo rc.modules
  commentando ogni modulo che non usi pi, o cancella rc.modules
  completamente e lascia che kerneld carichi i moduli quando ne ha
  bisogno.


  8.15.  Ho ricompilato il kernel e i moduli, e continuo ad ottenere
  messaggi di simboli non risolti all'avvio


  Probabilmente hai riconfigurato e ricompilato il tuo kernel escludendo
  alcuni moduli.  Hai ancora alcuni vecchi moduli che non utilizzi pi
  sparsi in giro per il directory /lib/modules.  La soluzione pi
  semplice  quella di cancellare la directory /lib/modules/x.y.z e dare
  un altro make modules_install dalla directory dei sorgenti del kernel.
  Nota che questo problema capita solo quando si riconfigura il kernel
  senza cambiamenti di versione.  Se vedi questo errore quando ti stai
  aggiornando ad una versione pi nuova, hai un altro tipo di problema.


  8.16.  Ho installato Linux 2.1 e ora non riesco pi a caricare alcun
  modulo


  Linux 2.1  il kernel attualmente in fase di sviluppo.  Come tale ci
  si pu aspettare che le cose cambino da un momento all'altro.  Una
  delle cose che  cambiata in maniera significativa  il modo con il
  quale vengono trattati i moduli e dove il kernel e i moduli vengono
  caricati in memoria.  Inoltre ora  Richard Henderson che si occupa
  dello sviluppo dei moduli del kernel.

  In breve, se vuoi utilizzare i moduli con un kernel 2.1, devi:

    leggere il file Documentation/Changes e vedere quali pacchetti
     hanno bisogno di essere aggiornati sul tuo sistema

    usare l'ultimo pacchetto modutils, disponibile da
     <ftp://ftp.redhat.com/pub/alphabits/> o dal sito mirror presso
     <ftp://tsx-11.mit.edu/pub/linux/packages/alphabits/>

  Ti raccomando di utilizzare almeno un kernel 2.1.29 se vuoi usare i
  moduli con un kernel 2.1.



  8.17.  E a proposito del collegamento alla rete su richiesta?


  kerneld originariamente aveva qualche supporto per stabilire una
  connessione di rete in dial-up su richiesta; provando a spedire
  pacchetti ad una rete senza essere connessi, faceva lanciare a kerneld
  lo script /sbin/request_route per istituire la connessione PPP o SLIP.

  Questo si rivel essere una cattiva idea. Alan Cox, uno dei famosi nel
  networking di Linux, scrisse sulla mailing list linux-kernel:

       Il materiale su request_route  obsoleto, inefficiente e
       inutile [...].  Inoltre  stato rimosso dalla struttura
       2.1.x.


  Invece di usare lo script request_route e kerneld, voglio vivamente
  consigliarti di installare il pacchetto diald
  <http://www.dna.lth.se/~erics/diald.html> di Eric Schenk.




  9.  Messaggio di copyright



  This document is Copyright (c) Henrik Storner, 1996, 1997.

  Unless otherwise stated, Linux HOWTO documents are copyrighted by
  their respective authors. Linux HOWTO documents may be reproduced and
  distributed in whole or in part, in any medium physical or electronic,
  as long as this copyright notice is retained on all copies. Commercial
  redistribution is allowed and encouraged; however, the author would
  like to be notified of any such distributions.

  All translations, derivative works, or aggregate works incorporating
  any Linux HOWTO documents must be covered under this copyright notice.
  That is, you may not produce a derivative work from a HOWTO and impose
  additional restrictions on its distribution. Exceptions to these rules
  may be granted under certain conditions; please contact the Linux
  HOWTO coordinator at the address given below.

  In short, we wish to promote dissemination of this information through
  as many channels as possible. However, we do wish to retain copyright
  on the HOWTO documents, and would like to be notified of any plans to
  redistribute the HOWTOs.


       L'unica licenza valida  quella originale in lingua inglese.
       Di seguito ne trovate una traduzione abbastanza fedele che
       per non ha alcun valore.



  Questo HOWTO  di Henrik Storner (1996-97) ed  distribuito, come gli
  altri HOWTO di Linux, sotto i termini descritti qui di seguito.
  Finch non diversamente asserito, i documenti HOWTO di Linux sono
  propriet dei rispettivi autori. I documenti degli HOWTO di Linux
  possono essere riprodotti e distribuiti in tutto o in parte, con ogni
  mezzo fisico o elettronico, finch questo avviso di copyright 
  mantenuto su tutte le copie. La distribuzione commerciale  permessa e
  incoraggiata; comunque all'autore piacerebbe essere avvisato di ogni
  distribuzione di questo tipo.

  Ogni traduzione, lavoro derivato o comprendente ogni documento degli
  HOWTO di Linux deve essere coperto sotto questo avviso di copyright.
  Cio non potete produrre un lavoro derivato da un HOWTO e imporre
  restrizioni aggiuntive sulla sua distribuzione. Eccezioni a queste
  regole possono essere garantite sotto certe condizioni; contattate il
  coordinatore degli HOWTO di Linux all'indirizzo indicato sotto.

  In breve vogliamo promuovere la distribuzione di queste informazioni
  attraverso quanti pi canali possibile. Ci nonostante vogliamo che
  rimanga il copyright sui documenti HOWTO e vorremmo venir avvisati di
  ogni progetto per la ridistribuzione degli HOWTO.

  Se avete domande contattate Tim Bynum, il coordinatore degli HOWTO di
  Linux, all'indirizzo di posta elettronica <linux-
  howto@sunsite.unc.edu>.