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>.
|