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 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650
|
The Linux Plug-and-Play HOWTO
David S.Lawyer bf347@lafn.org
v0.07, novembre 1999
Un aiuto per districarsi e gestire i dispositivi Plug-and-Play. Come
far s che il proprio sistema Linux supporti il Plug-and-Play.
Traduzione di Giovanni Bortolozzo (borto at pluto.linux.it).
1. Introduzione
1.1. Copyright, Marchi registrati, Liberatoria e Ringraziamenti
1.1.1. Copyright
Copyright (c) 1998, 1999 by David S. Lawyer. Please freely copy and
distribute (sell or give away) this document. For corrections and
minor changes contact the maintainer. Otherwise you may create
derivative works and distribute them provided you:
1. Discuss it with the maintainer (if there is one). 2. Put the
derivative work at the mirrored LDP Internet site (or the like) for
free downloading. 3. License the work in the spirit of this license
or use GPL. 4. Give due credit to previous authors and major
contributors.
1.1.2. Marchi registrati
Se alcune parole sono marchi registrati, il contesto dovrebbe mettere
in chiaro a chi appartengono. Per esempio "MS Windows" (o
semplicemente "Windows") implica che "Windows" appartiene a Microsoft.
1.1.3. Liberatoria
Molte delle informazioni in questo HOWTO sono state ottenute da
Internet, da libri che possono essere obsoleti, ecc. Anche se non ho
l'intenzione di mettervi fuori strada, probabilmente ci sono parecchi
errori in questo documento. Vi invito a farmeli notare. Poich
questa documentazione libera, dovrebbe essere ovvio che n io n gli
autori precendenti possiamo essere ritenuti legalmente responsabili
per qualsiasi errore.
N.d.T.: ovviamente nemmeno il traduttore pu essere ritenuto
legalmente (e nemmeno moralmente) responsabile di eventuali errori.
1.2. Piani Futuri; Come Aiutare
Invito a segnalarmi qualsiasi errore in fatti, opinioni, logica,
battitura, grammatica, chiarezza, link, ecc. Ma per prima cosa, se la
data del documento pi vecchia di un mese, si controlli se si in
possesso dell'ultima versione. Invito inoltre ad inviarmi qualsiasi
informazione che si pensa sia pertinente a questo documento.
Non ho studiato in dettaglio n gli isapnptools n le patch per il
kernel (ma ho in programma di farlo). Non ho ancora ben capito come il
BIOS configura il PnP (dipende dal tipo di BIOS), e neppure come
Windows9x aggiorna la ESCD. Quindi questo HOWTO incompleto e
potrebbe essere inaccurato (mi si faccia sapere cosa c' di errato).
In questo HOWTO qualche volta ho usato ?? per indicare che in realt
non so la risposta.
1.3. Nuove Versioni di Questo HOWTO
Una nuova versione del Plug-and-Play-HOWTO dovrebbe essere disponibile
circa ogni mese per la consultazione e il download nei siti che fanno
da mirror a LDP. Per una lista di tali siti si veda:
<http://metalab.unc.edu/LDP/mirrors.html>. Sono disponibili diversi
formati. Se si vuole semplicemente controllare la data dell'ultima
versione potrebbe essere meglio non usare un mirror, quindi si dia un
occhio a: <http://metalab.unc.edu/LDP/HOWTO/Plug-and-Play-
HOWTO.html>.
N.d.T.: l'ultima (e pi recente) traduzione in italiano di questo
documento reperibile nei mirror di ILDP
<http://www.pluto.linux.it/ildp/> e scaricabile in diversi formati dai
relativi siti ftp.
2. Cosa Dovrebbe Fare il PnP: Allocare "Risorse-Bus"
2.1. Cos' il Plug-and-Play (PnP)?
Semplificando al massimo, il Plug-and-Play dice automaticamente al
software (device driver o gestore (driver) di dispositivo) dove
trovare i diversi pezzi hardware (i dispositivi) quali modem, schede
di rete, schede audio, ecc. Il compito del Plug-and-Play di far
"accoppiare" dispositivi fisici con il software (gestori di
dispositivo) che funziona con essi e di stabilire dei canali di
comunicazione tra ogni dispositivo e il suo gestore. Pi
precisamente, il PnP alloca le seguenti "risorse-bus" sia al driver e
che all'hardware: indirizzi I/O, IRQ, canali DMA (solo per il bus ISA)
e regioni di memoria. Se non si capisce cosa siano queste 4 cose si
leggano le sotto sezioni che seguono. Una volta assegnate queste
risorse-bus (e se installato il gestore corretto) i file di
dispositivo (device file) nella directory /dev/ sono pronti per l'uso.
Questo assegnamento PnP di certe risorse del bus talvolta detto
"configurazione", ma solamente un tipo di configurazione a basso
livello. Anche utilizzando pienamente il PnP, buona parte della
configurazione dei dispositivi fatta da qualche altra cosa. Ad
esempio, per la configurazione dei modem, inviata una "stringa di
inizializzazione" al modem attraverso l'indirizzo di I/O del "canale".
Questa "stringa di inizializzazione" non ha niente a che vedere con il
PnP, sebbene il "canale" usato per inviarla al modem stato allocato
dal PnP. L'impostazione della velocit (e di molti altri parametri)
di una porta seriale fatta inviando messaggi al gestore del
dispositivo ("device driver") da programmi eseguiti dall'utente
(spesso automaticamente all'avvio del sistema). Anche questa
configurazione non ha niente a che spartire con il PnP. Quindi quando
si parla di PnP con "configurazione" si intende solo un certo tipo di
configurazione. Sebbene altra documentazione (come quella per MS
Windows) chiama le risorse-bus semplicemente "risorse", io ho coniato
il termine "risorse-bus" in modo da distringuerle dalla moltitudine di
altri tipi di risorse.
2.2. Come Fa Un Computer per Trovare i Dispositivi (e viceversa)
Un computer consta di una CPU/processore per effettuare la
computazione e di memoria per immagazzinare programmi e dati.
Inoltre, ci sono diversi dispositivi come vari tipi di dischi, una
scheda video, una tastiera, scheda di rete, schede modem, schede
audio, porte seriali e parallele, ecc. C' anche un alimentatore per
fornire energia elettrica, diversi bus sulla scheda madre per
connettere assieme i dispositivi e la CPU, e un case per metterci
tutto dentro.
In tempi antichi quasi tutti i dispositivi avevano la proprio scheda
di interfaccia (scheda a circuito stampato). Oggi, oltre a tali
schede, molti "dispositivi" hanno un piccolo chip montato
permanentemente sulla "scheda madre". Le schede che vengono inserite
nella scheda madre possono contenere pi di un dispositivo. I chip di
memoria sono qualche volta considerati come dispositivi ma non sono
Plug-and-Play nel senso usato in questo HOWTO.
Affinch un computer funzioni correttamente, ogni dispositivo
dev'essere sotto il controllo del suo gestore o "device driver". un
software che parte del sistema operativo (talvolta caricato come
modulo) e che viene eseguito nella CPU. I gestori di dispositivo sono
associati con "file speciali" nella directory /dev (notare che non
sono propriamente dei file). Hanno nomi come hda1 (la prima
partizione sul disco fisso a), ttyS0 (la prima porta seriale), eth1
(la seconda scheda ethernet), ecc. Per rendere le cose pi
complicate, il particolare device driver selezionato, diciamo per
eth1, dipender dal tipo di scheda ethernet che si ha. Quindi eth1
non pu semplicemente essere assegnato ad una qualsiasi gestore di
scheda ethernet. Deve essere assegnato ad un particolare gestore che
funzioner con il tipo di scheda ethernet installata. Per controllare
un dispositivo, la CPU (sotto il controllo del device driver) invia
comandi (e dati) e legge informazioni dai vari dispositivi. Per
poterlo fare ogni driver di dispositivo deve conoscere l'indirizzo del
dispositivo che controlla. La conoscenza di tale indirizzo
equivalente all'impostazione di un canale di comunicazione, anche se
il "canale" fisico in realt il bus dati dentro al PC che
condiviso praticamente da qualsiasi altra cosa presente nel computer.
Il canale di comunicazione in realt un po' pi complesso di come
appena descritto. Un "indirizzo" in realt un intervallo di
indirizzi ed esiste la controparte del canale (nota come interrupt)
che permette ai dispositivi di inviare richieste urgenti di "aiuto" ai
loro gestori.
2.3. Indirizzi I/O, ecc.
I PC hanno 3 spazi di indirizzi: I/O, memoria principale e
configurazione (solo nel bus PCI). Tutti questi 3 tipi di spazi di
indirizzi condividono lo stesso bus indirizzi (address bus)
all'interno del PC. Ma il potenziale di alcune linee dedicate nel bus
del PC segnala in quale "spazio" un indirizzo: I/O, memoria
principale o configurazione. Si veda la sezione ``Indirizzi'' per
maggiori dettagli. I dispositivi sono normalmente localizzati nello
spazio di indirizzi I/O, sebbene in alcuni casi questi allochino pure
dello spazio in memoria principale. Un indirizzo I/O qualche volta
detto semplicemente "I/O", "IO", "i/o" o "io". pure usato il
termine "porta di I/O". Ci sono due passi principali per allocare gli
indirizzi I/O (e altre risorse-bus, come gli interrupt):
1. Impostare l'indirizzo I/O, ecc. sulla scheda (in uno dei suoi
registri)
2. Fare in modo che il gestore del dispositivo sappia qual questo
indirizzo I/O, ecc.
Il precedente processo in due passi qualcosa di simile al problema
in due parti di trovare il numero di casa di qualcuno in una via. Si
deve conoscere il numero di casa e qualcuno deve attaccare un numero
nella facciata della casa in modo che possa essere trovata. Nei
computer, il device driver deve conoscere l'indirizzo e il dispositivo
hardware deve impostare lo stesso indirizzo in uno dei suoi registri.
Entrambe queste cose devono essere fatte, ma alcuni fanno l'errore di
farne solo una e poi si sorprendono quando il computer non riesce a
trovare il dispositivo. Per esempio, provano ad usare "setserial" per
assegnare un indirizzo ad una porta seriale senza realizzare che ci
comunica un indirizzo solamente al driver. Non imposta l'indirizzo
nell'hardware della porta seriale stessa. Se la porta seriale ha in
realt un diverso indirizzo (o adirittura nessuno) e si dice qualcosa
di errato a setserial, allora s che si nei casini.
Un altro vincolo ovvio che un indirizzo deve essere per prima cosa
impostato nella scheda prima che il gestore del dispositivo possa
usarlo. Poich i driver dei dispositivi spesso partono non appena
partito il computer, talvolta tentato di accedere ad una scheda (per
vedere se l, ecc.) prima che l'indirizzo sia stato impostato nella
scheda dal programma PnP di configurazione. In tal caso si vede un
messaggio d'errore che dice che non possibile trovare la scheda
sebbene questa ci sia (ma non ha ancora un indirizzo).
Quanto detto negli ultimi due paragrafi riguardo gli indirizzi I/O si
applica tale e quale alle altre risorse-bus: ``IRQ -- Panoramica'',
``Canali DMA'', e ``Regioni di Memoria''. Cosa siano queste cose
verr spiegato nelle tre sezioni che seguono.
2.4. IRQ -- Panoramica
Dopo aver letto questa sezione si pu leggere ``Interrupt --
Dettagli'' per ulteriori dettagli. Quanto segue intenzionalmente
super semplificato. Oltre agli indirizzi, si deve gestire anche un
numero di interruzione ("interrupt") (come l'IRQ 5), detto numero di
IRQ (Interrupt ReQuest = Richiesta di Interruzione). Si gi detto
prima che il gestore del dispositivo deve conoscere l'indirizzo di una
scheda per poter essere in grado di comunicare con quest'ultima. Ma
cosa dire della comunicazione in senso opposto? Si supponga che il
dispositivo debba comunicare qualcosa al suo gestore con una certa
urgenza. Per esempio, il dispositivo potrebbe aver appena ricevuto un
sacco di byte destinati alla memoria principale e quindi gli serve
chiamare il suo gestore per trasferire questi dati dal suo buffer
praticamente pieno alla memoria principale.
Il dispositivo come pu chiedere aiuto? Non pu usare il bus dati
principali perch sicuramente gi in uso. Invece impone un
particolare potenziale elettrico in una linea di interrupt dedicata
(parte del bus), spesso riservata per quel particolare dispositivo.
Questo segnale detto interrupt ("interruzione"). Ci sono
l'equivalente di 16 linee di questo tipo in un PC e ognuna di queste
comanda (indirettamente) da particolare gestore di dispositivo. Ogni
linea ha un numero di IRQ (Interrupt ReQuest) univoco. Il dispositivo
deve mettere il suo interrupt nella linea corretta e il gestore del
dispositivo deve restare in attesa dell'interruzione sulla linea
corretta. Su quale linea deve mettersi specificato dal numero di
IRQ salvato nel dispositivo. Lo stesso numero di IRQ dev'essere noto
al gestore del dispositivo in modo che questo sappia su quale linea di
IRQ restare in ascolto.
Una volta che il driver del dispositivo riceve l'interrupt (una
chiamata di aiuto) deve capire perch stato generato ed
intraprendere l'azione appropriata per servire l'interrupt. Sul bus
ISA ogni dispositivo ha bisogno di un proprio numero di IRQ univoco.
Nel bus PCI, permessa la condivisione degli IRQ.
2.5. Canali DMA
I canali DMA esistono solo per il bus ISA. DMA sta per "Direct Memory
Access" (Accesso Diretto alla Memoria). il posto dove un
dispositivo ha la possibilit di prendere (rubare) alla CPU il
controllo del bus principale del computer e trasferire i dati
direttamente nella memoria principale. Normalmente la CPU vorrebbe
fare questo trasferimento in due passi: 1. leggendo i dati dallo
spazio di I/O del dispositivo e mettendoli dentro la CPU stessa 2.
scrivendo questi dati dalla CPU alla memoria principale. Con il DMA
si fa solitamente un solo passo inviando i dati direttamente dal
dispositivo alla memoria. Il dispositivo deve avere tale funzionalit
nel suo hardware e quindi non tutti i dispositivi possono fare un DMA.
Mentre in esecuzione il DMA la CPU non pu fare molto in quanto il
bus principale usato per il trasferimento DMA.
Il bus PCI non ha in realt nessun DMA. Ha piuttosto qualcosa di
ancora migliore: il bus mastering. Funziona in maniera simile al DMA
e qualche volta chiamato DMA (per esempio, i dischi fissi chiamati
"UltraDMA"). Permette ad un dispositivo di diventare temporaneamente
il padrone del bus (bus master) e di trasferire i dati in maniera
analoga a quanto fa la CPU quando ne ha lei il potere. Non usa nessun
numero di canale in quanto l'organizzazione del bus PCI tale che
l'hardware PCI sa quale dispositivo ha attualmente il controllo del
bus e quali dispositivo lo sta chiedendo di diventare il prossimo bus
master. Per il bus PCI non c' quindi allocazione dei canali DMA.
Quando un dispositivo nel bus ISA vuole fare un DMA invia una
richiesta DMA usando una linea dedicata per la richiesta di DMA in
modo analogo ad una richiesta di interrupt. In realt il DMA potrebbe
essere gestito usando interrupt ma ci introdurrebbe alcuni ritardi,
cosicch pi veloce da fare utilizzando un tipo particolare di
interrupt detto DMA-request. Come le interruzioni, le richieste DMA
sono numerate in modo da identificare quale dispositivo sta facendo la
richiesta. Questo numero chiamato DMA-channel (canale DMA). Poich
tutti i trasferimenti DMA usano il bus principale (e solo uno pu
essere attivo in un determinato istante) in realt usano tutti lo
stesso canale, ma il numero del "canale DMA" serve per identificare
chi sta usando il "canale". Nella scheda madre esistono dei registri
hardware che contengono lo stato attuale di ogni "canale". Quindi per
poter effettuare una richiesta DMA, il dispositivo deve conoscere il
suo numero di canale DMA che deve essere salvato in un registro nel
dispositivo fisico.
2.6. Intervalli di Memoria
Ad alcuni dispositivi assegnato dello spazio di indirizzi nella
memoria principale. spesso "memoria condivisa" (shared memory) o
"I/O mappato in memoria" (memory mapped I/O). Altre volte la
memoria ROM stessa del dispositivo. Quando si parla delle risorse-bus
si usa spesso semplicemente il termine "memoria". Quindi un
dispositivo pu anche usare uno spazio di indirizzi di I/O.
Quando di installa una scheda di questo tipo, in effetti si sta
inserendo un modulo di memoria per la memoria principale. Questa
memoria pu essere sia ROM (Read Only Memory, Memoria a Sola Lettura)
che memoria condivisa. Questa memoria pu servire come mezzo di
"trasferimento" diretto di dati tra il dispositivo e la memoria
principale. Non veramente un trasferimento in quanto il dispositivo
mette i dati nella propria memoria che "casualmente" la memoria
principale. Sia la scheda che il gestore del dispositivo devono sapere
dov' questa memoria. L'indirizzo di memoria solitamente molto alto
in modo da non entrare in conflitto con gli indirizzi pi bassi dei
chip di memoria del computer.
La ROM diversa. come un programma (forse un gestore di
dispositivo) che sar usato con il dispositivo. Idealmente, dovrebbe
funzionare con Linux e non solo con Windows ?? Pu essere necessario
che venga "oscurato" (shadowed), intendendo con ci che viene copiato
nei propri chip di memoria principale in modo da funzionare pi
velocemente. Un volta "oscurato" non pi a sola lettura.
2.7. "Risorse" sia al Dispositivo che al Gestore
I gestori di dispositivo devono quindi essere in qualche modo
"collegati" all'hardware che controllano. Questo fatto fornendo le
risorse-bus (I/O, Memoria, IRQ e DMA) sia al dispositivo fisico che al
software di gestione. Per esempio, una porta seriale usa solo 2 (delle
4 possibili) risorse: un IRQ e un indirizzo I/O. Entrambi questi
valori deve essere comunicati sia al gestore del dispositivo che al
dispositivo fisico stesso. Al gestore (e al suo dispositivo) dato
anche un nome (come ttyS1) nella directory /dev. L'indirizzo e il
numero di IRQ sono salvati dal dispositivo in registri della scheda (o
in un chip nella scheda madre). Nel caso di schede con i ponticelli
(jumper), queste informazioni sono sempre salvate nell'hardware del
dispositivo (sulla scheda, ecc.). Ma nel caso del PnP, i dati dei
registri spesso vengono persi quanto il PC viene spento, cosicch le
informazioni sulle risorse devono essere forniti di nuovo ad ogni
dispositivo ogni volta che il PC viene riacceso.
2.8. Il Problema
L'architettura di un PC fornisce solo in numero limitato di IRQ,
canali DMA, indirizzi I/O e regioni di memoria. Se ci fossero solo
alcuni dispositivi e tutti questi avessero risorse-bus standardizzate
(come indirizzi I/O e numeri IRQ unici) non ci sarebbero problemi a
collegare i gestori di dispositivo ai dispositivi stessi. Ogni
dispositivo avrebbe delle risorse fisse e non andrebbe in conflitto
con qualsiasi altro dispositivo nel computer. Non ci sarebbero due
dispositivi che vorrebbero avere gli stessi indirizzi, non ci
sarebbero conflitti di IRQ, ecc. Ogni driver potrebbe quindi essere
programmato con indirizzi, IRQ, ecc. univochi gi codificati
all'interno del programma. La vita sarebbe pi semplice.
Ma cos non . Non solo oggi ci sono cos tanti dispositivi che i
conflitti sono frequenti, e qualche volta uno ha necessit di avere
anche pi di uno dello stesso tipo. Per esempio qualcuno potrebbe
avere pi di un disco fisso, un po' di porte seriali, ecc. Per queste
ragioni i dispositivi devono possedere un minimo di flessibilit in
modo che possano essere impostati a un qualsivoglia indirizzi, IRQ,
ecc. siano necessari per evitare i conflitti. Ma alcuni IRQ e
indirizzi, come quello del clock e della tastiera, sono piuttosto
standard. Questi non hanno bisogno di tale flessibilit.
A parte il problema nel conflitto nell'allocazione delle risorse-bus,
c' anche un problema nel caso si commetta un errore nel dire al
device driver quali sono le risorse-bus. Per esempio, si supponga di
aver messo IRQ 4 in un file di configurazione quando in realt il
dispositivo impostato all'IRQ 5. Questo un altro tipo di errore
nell'allocazione delle risorse-bus.
L'allocazione delle risorse-bus, se fatta correttamente, stabilisce i
canali di comunicazione tra l'hardware fisico e i relativi device
driver. Per esempio, se un determinato intervallo di indirizzi I/O
(risorsa) allocato sia al gestore di dispositivo che ad un pezzo di
hardware, allora in questo modo si stabilito un canale di
comunicazione unidirezionale tra loro. Il driver pu inviare comandi
ed informazioni al dispositivo. In realt un po' pi che
unidirezionale, in quanto il driver pu ottenere informazioni dal
dispositivo leggendone i suoi registri. Ma il dispositivo in questo
modo non pu inizializzare una qualsiasi comunicazione. Per
inizializzarla il dispositivo ha bisogno di un IRQ in modo da creare
un canale bidirezionali nel quale sia il driver che il dispositivo
possono iniziare una comunicazione.
2.9. Il PnP Trova i Dispositivi Connessi nelle Porte Seriali
Anche i dispositivi esterni connessi alla porta seriale attraverso un
cavo (come i modem esterni) possono essere chiamati Plug-and-Play.
Poich solo la porta seriale stessa ha bisogno di risorse-bus (un IRQ
e un indirizzo I/O) non necessario allora risorse-bus per questo
tipo di dispositivi. Quindi per essi il PnP non in realt
necessario. Comunque, c' una specifica PnP anche per questi
dispositivi seriali esterni.
Un sistema operativo PnP trover questi dispositivi esterni e legger
il loro numero di modello, ecc. Poi pu essere in grado di trovarne
il gestore di dispositivo pi adatto, e quindi non si deve dire ad un
programma applicativo che si ha un certo dispositivo diciamo su
/dev/ttyS1. Poich si in grado di informare manualmente il proprio
programma applicativo (attraverso un file di configurazione, ecc.) su
quale porta seriale presente il dispositivo (ed eventualmente
dicendogli anche qual' il suo numero di modello) in realt non si ha
veramente bisogno di questa caratteristica PnP per le porte seriali.
3. La Soluzione Plug-and-Play (PnP)
3.1. Introduzione al PnP
Il termine Plug-and-Play (PnP) ha diversi significati. In senso lato
semplicemente l'autoconfigurazione che avviene quando uno installa
un nuovo dispositivo e questo si configura da solo. Nel senso usato
in questo HOWTO, la configurazione solo la configurazione delle
risorse-bus PnP e la successiva notifica al gestore del dispositivo.
In senso stretto pure l'impostazione delle risorse-bus in un
dispositivo hardware. Si possono pure intendere le specifiche PnP le
quali (assieme ad altre cose) specificano come vengono letti e scritti
i dati delle risorse PnP nei dispositivi (spesso schede) sul bus ISA.
Le specifiche PCI standard (e non quelle PnP) fanno la stessa cosa per
il bus PCI.
Il PnP mette in corrispondenza i dispositivi con i relativi driver e
specifica i loro canali di comunicazione. Sul bus ISA, prima del
Plug-and-Play le risorse-bus erano impostate sui dispositivi hardware
tramite ponticelli (jumper). Ai driver software erano invece
assegnate tramite file di configurazione (o simili) o interrogando il
dispositivo agli indirizzi dove ci si aspettava risiedesse. Il bus
PCI ha supportato il qualcosa di simile al PnP fin dall'inizio ed
cos stato banale implementarlo per questo bus. Poich le specifiche
del bus PCI non usano il termine PnP, non chiaro se o meno lecito
chiamare PnP il bus PCI (ma supporta nell'hardware quello che a
tutt'oggi detto PnP).
3.2. Come Funziona (semplificato)
Quanto segue una panoramica oltremodo semplificata del funzionamento
del Plug-and-Play. Il programma di configurazione del PnP (a volte un
programma nel BIOS) trova tutti i dispositivi PnP e chiede ad ognuno
di essi di quali risorse-bus hanno bisogno. Controlla poi quali
risorse-bus (IRQ, ecc.) gli possibile distribuire. Naturalmente ci
sono risorse-bus riservate usate dai dispositivi non PnP (legacy) (se
ne nota la presenza) e non d via nessuna di queste risorse
riservate. Usa poi alcuni criteri (non specificati nelle specifiche
PnP) per assegnare le risorse-bus in modo che non ci siano conflitti e
che tutti i dispositivi abbiano (se possibile) quello di cui hanno
bisogno. Dice poi ad ogni dispositivo fisico quali sono le risorse-
bus a lui assegnate e i dispositivi stessi si auto-configurano per
usare solo le risorse-bus assegnate. Poi, in qualche modo, i gestori
(driver) di dispositivo scoprono quali risorse-bus usano i
corrispondenti dispositivi e sono quindi in grado di comunicare
attivamente con i dispositivi che controllano.
Per esempio, si supponga che una scheda necessiti di un interrupt
(numero di IRQ) e di 1 MB di memoria condivisa. Il programma PnP
legge queste richieste dalla scheda. Assegna poi a quest'ultima
l'IRQ5 e 1 MB di memoria nello spazio indirizzi, a partire
dall'indirizzo 0xe9000000. Per non sempre cos semplice, in quanto
la scheda potrebbe specificare che pu usare solo certi numeri di IRQ
(solo nel caso ISA) o che il MB di memoria deve risiedere entro un ben
determinato intervallo di indirizzi. I dettagli sono diversi nel caso
di bus PCI o ISA, e sono maggiormente complessi nel secondo caso.
Esistono alcune scorciatoie che il software PnP potrebbe usare. Una
di mantenere traccia di come sono state assegnate le risorse-bus
nell'ultima configurazione (l'ultima volta che stato usato il
computer) e di riusare queste informazioni. Windows9x e i BIOS PnP
usano questa mentre lo fa il Linux standard. Windows9x salva queste
informazioni nel suo "Registry" sul disco fisso, mentre un BIOS PnP le
salva nella memoria non volatile del PC (detta ESCD); si veda la
sezione ``Il Database ESCD del BIOS'').
Sotto Linux ogni dispositivo a s e non esiste un registro
centralizzato non volatile degli assegnamenti delle risorse. Alcuni
driver di dispositivo salvano l'ultima configurazione che hanno usato
e la usano la prossima volta che viene acceso il computer. Assumono
implicitamente che il resto dell'hardware non abbia bisogno delle
risorse-bus che usano loro.
Se i dispositivi ricordassero la propria configurazione precedente,
allora non ci sarebbe nessun hardware da configurare al successivo
riavvio, per questi sembrano dimenticarsene quando il computer viene
spento. Alcuni contengono una configurazione predefinita (che non
necessariamente l'ultima usata). Quindi il programma di
configurazione PnP deve essere lanciato ogni volta che viene acceso il
PC. Inoltre, se viene aggiunto un nuovo dispositivo, allora
dev'essere configurato. L'allocazione delle risorse-bus a questo
nuovo dispositivo pu comportare il portar via alcune risorse-bus ad
un dispositivo preesistente e l'assegnamento a quest'ultimo di
risorse-bus alternative che possa usare.
3.3. L'Avvio del PC
Quando il PC viene acceso per la prima volta il chip del BIOS esegue
il suo programma per far avviare il computer (il primo passo la
verifica dell'hardware). Se il sistema operativo immagazzinato nel
disco fisso (com' ormai usuale) allora il BIOS deve essere a
conoscenza della presenza del disco fisso. Se il disco fisso PnP
allora il BIOS potrebbe usare i metodi PnP per trovarlo. Inoltre, per
permettere all'utente di configurare manualmente il CMOS del BIOS e di
rispondere a messaggi d'errore nell'avvio del computer, sono pure
necessari uno schermo (una scheda video) e una tastiera. Il BIOS deve
quindi a sua volta configurare questi dispositivi.
Un volta che il BIOS ha identificato il disco fisso, la scheda video e
la tastiera pronto per fare il "boot" (caricare il sistema operativo
dal disco fisso). Se si detto al BIOS che si ha un sistema
operativo PnP, allora dovrebbe avviare il PC e poi lasciare al sistema
operativo la conclusione della configurazione PnP. Diversamente,
(prima del boot) un BIOS PnP probabilmente prover a fare da solo il
resto della configurazione PnP dei dispositivi (ma non dei loro
gestori).
3.4. Bus
ISA il vecchio bus dei PC IBM, mentre PCI il bus pi nuovo e
veloce di Intel. Il bus PCI stato progettato per quello che oggi
viene detto PnP. Rende semplice (se confrontato con il bus ISA)
scoprire come devono essere assegnate le risorse-bus PnP ai
dispositivi hardware. Per vedere che cosa successo si veda il
"file" /proc/pci /proc/bus/pci/devices per i kernel 2.2+), i messaggi
d'avvio sullo schermo (usare Shift+PageUp per tornare su), o si usino
le Utility PCI (per kernel 2.2+).
Nel caso del bus ISA c' un problema reale con l'implementazione del
PnP poich nessuno aveva in mente il PnP quando stato progettato il
bus ISA e praticamente non ci sono indirizzi I/O disponibili per il
PnP da usare per inviare informazioni di configurazione ai dispositivi
fisici. Di conseguenza il modo di gestire il PnP nel bus ISA
complicato. Sull'argomento stato scritto un libro intero (si veda
la sezione ``Libri sul PnP''). Tra le altre cose, si richiede che il
programma di PnP assegni un "handle" (identificativo) temporaneo a
ciascun dispositivo PnP in modo che questi possano essere indirizzati
per la successiva configurazione PnP. L'assegnazione di uno di questi
"handle" detta "isolation" (isolamento). Per i dettagli si veda la
sezione ``Isolamento'' in Appendice.
Probabilmente il bus ISA destinato a scomparire. Quando lo far, il
PnP sar pi semplice in quanto sar pi facile scoprire come il BIOS
ha configurato l'hardware. Ci sar ancora la necessit di accopiare i
gestori di dispositivo con i dispositivi, come pure la necessit di
configurare i dispositivi aggiunti quanti il PC gi funzionante.
Queste necessit saranno soddisfatte se Linux diventa un sistema
operativo PnP.
3.5. Linux Ha Bisogno Di Tener Testa Meglio al PnP
Il PnP (per il bus ISA) stato inventato da Compaq, Intel e Phoenix.
La Microsoft ne stata il principale promotore. Dal punto di vista
di Linux sarebbe stato meglio se il PnP non fosse mai stato
"inventato". Alla fine il bus ISA si sarebbe estinto e avrebbe
prevalso il bus PCI PnP-like cos avremmo avuto a tutti gli effetti un
PnP facile da implementare. Ma che piaccia o no, a tutt'oggi la
maggior parte del nuovo hardware ISA PnP e Linux non ha scelta se
non quella di gestire efficacemente il PnP. Ma il Linux standard
(come quello dei primi del 1999) rende la gestione del PnP complicata
(specialmente sul bus ISA) mentre lo scopo del PnP quello di rendere
le cose pi semplici.
In un certo senso, Linux gi in qualche modo PnP per il bus PCI.
Quando il PC si avvia si possono notare dai messaggi sullo schermo che
alcuni driver di dispositivo di Linux spesso trovano i loro
corrispondenti dispositivi hardware (e le risorse che il BIOS gli ha
assegnato). Ma ci sono situazioni che un sistema operativo PnP
potrebbe gestire meglio: 1. Una deficienza di risorse-bus 2. Pi di
un driver per un dispositivo fisico 3. Un driver attivato che non
riesce a trovare il suo dispositivo fisico. 4. Installazioni a caldo
di un dispositivo .
Gli utenti di Linux non hanno bisogno di investigare i dettagli del
PnP per configurare come si deve i dispositivi PnP ISA. Una soluzione
potrebbe essere una versione standardizzata del kernel di Linux che
supporti il Plug-and-Play su ISA, PCI e altri bus. stata scritta
una patch per il kernel sebbene la maggior parte dei driver non la
supportino. Non parte standard di Linux. Si veda la sezione
``Patch per il Kernel''.
4. Configurazione del BIOS PnP
Quando un computer viene acceso, prima di caricare il sistema
operativo viene eseguito il BIOS. I BIOS pi recenti sono PnP e
configureranno alcuni (o al limite tutti) i dispositivi PnP. In molti
BIOS non c' modo di disabilitare il PnP e quindi bisogna conviverci.
Qui di seguito alcune delle scelte che potrebbero essere presenti nel
men CMOS del proprio BIOS:
``Si ha un sistema operativo PnP?''
``Come devono essere controllate le risorse-bus?''
``Reinizializzare la configurazione?''
4.1. Si ha un sistema operativo PnP?
Se si risponde affermativamente, allora il BIOS PnP inizier la
configurazione PnP del disco fisso, della scheda video e della
tastiera per rendere avviabile il sistema. Ma lascer che il sistema
operativo termini il lavoro di configurazione. Potrebbe fare un
``Isolamento'' nel bus ISA lasciando i dispositivi disabilitati ma
pronti per essere configurati dal sistema operativo. Nel caso di
Linux si dovrebbe dire che non si ha un sistema operativo PnP. Se non
lo si fa il BIOS potrebbe lasciare disabilitati i dispositivi ISA che
non ha configurato ?? Inoltre potrebbero non venir configurati pure i
dispositivi PCI ??
Se si dice al BIOS che non si ha un SO PnP, allora il BIOS far tutta
la configurazione da solo. A meno che non siano stati aggiunti nuovi
dispositivi PnP, dovrebbe usare la configurazione che ha salvato nella
memoria non volatile (ESCD). Si veda la sezione ``Il Database ESCD
del BIOS''. Se l'ultima sessione nel proprio computer stata sotto
Linux, allora non ci dovrebbero essere modifiche nella configurazione.
Si veda la sezione ``Configurare il PnP dal BIOS''. Ma se l'ultima
sessione avvenuta in Windows 9x (che PnP) allora Windows potrebbe
aver modificato l'ESCD. Si suppone lo faccia solo se si "forzata"
una configurazione o si installato un dispositivo legacy. Si veda
la sezione ``Usare Windows per Impostare l'ESCD''. Se si sta usando
isapnp o i programmi delle Utility PCI per la configurazione, questi
saranno eseguiti dopo il BIOS e cambieranno le cose nel modo che gli
si dice.
4.1.1. Interoperabilit con Windows9x
Se si sta usando sia Linux che Windows nello stesso PC, come
rispondere alla domanda del BIOS: "Si ha un SO PnP?" Normalmente si
dovrebbe dire no per Linux standard e s per Windows9x. Ma un sacco
noioso dover reimpostare manualmente il men CMOS ogni volta che si
cambia SO. Una soluzione di impostare il CMOS come non si avesse un
SO PnP, anche se si avvia Windows. Uno si dovrebbe aspettare che
Windows sia in grado di gestire questa situazione nella quale gli
viene presentato l'hardware gi completamente configurato dal BIOS.
Ci si aspetta inoltre che anche se Windows non realizza che l'hardware
gi configurato, lo configuri da se e poi funzioni correttamente.
Ma le cose non sembrano andare cos. Sembra che Windows possa dire ai
suoi driver di dispositivo solo quello che presente nel suo
Registry. Ma la reale configurazione hardware (fatta dal BIOS)
quella salvata nell'ESCD e potrebbe non essere la stessa ==> problemi.
Un modo per renderle uguali di installare (o reinstallare) Windows
quando il BIOS impostato per "nessun SO PnP". Ci dovrebbe
presentare a Windows l'hardware configurato dal BIOS. Se questa
configurazione senza conflitti, Windows teoricamente la manterr e
se la salver nel suo Registry. A questo punto l'ESCD e in Registry
sono sincronizzati. Se questa cosa funziona (e questa e l'ultima
versione dell'HOWTO), fatemelo sapere perch ho ricevuto solamente una
notifica di buon funzionamento.
Un altro metodo di "rimuovere" i dispositivi che causa problemi in
Windows, cliccando su rimuovi in "Gestione Periferiche". Poi si
riavii con "Nessun SO PnP" (lo si imposti nel CMOS all'inizio del
boot). Windows poi reinstaller i dispositivi, teoricamente usando le
impostazioni sulle risorse-bus configurate dal BIOS. Attenzione che
Windows probabilmente potrebbe chiedere di inserire il CD di
installazione di Windows poich talvolta non riesce a trovare i driver
(e altri file simili) anche se ci sono gi. Come prova ho "rimosso"
una scheda NIC che aveva driver compatibili con Novell. Durante il
riavvio, Windows l'ha reistallata come Microsoft networking invece di
Novell. Ci significa che ho dovuto reistallare il Client Novell.
Fatemi sapere eventuali problemi con questo metodo (solo se questa
l'ultima versione di questo HOWTO).
4.2. Come devono essere controllate le risorse?
Questa scelta determina il metodo con cui si vuole siano allocati IRQ
e DMA. Se impostata su "auto", il BIOS far l'allocazione. Se
impostata su "manual", si riserveranno manualmente alcuni IRQ per
usarli con le schede "legacy" (non PnP). Ora il BIOS potrebbe o meno
essere conscio delle schede legacy presenti. Il BIOS verr a
conoscenza delle schede legacy presenti se si eseguir ICU (o simile)
sotto Windows per dirglielo. Se ne a conoscenza, allora si provi ad
usare "auto". Se non le rileva allora si riservino manualmente gli
IRQ necessari per le schede ISA legacy e si lasci quel che resta
dell'allocazione al PnP del BIOS.
4.3. Reinizializzare la configurazione?
Questa scelta canceller la base di dati ESCD del BIOS che contiene
sia il modo in cui configurare i dispositivi PnP che l'elenco delle
configurazioni dei dispositivi legacy (non PnP). Mai fare questa cosa
a meno che non si sia convinti che tale base di dati errata e
dev'essere ricostruita. Da qualche parte affermato che lo si
dovrebbe fare solo se non si riesce ad avviare il proprio computer.
Se il BIOS perde i dati sui dispositivi legacy, allora si dovr
rieseguire ICA sotto DOS/Windows per ristabilire le informazioni.
5. Come Gestire le Schede PnP
5.1. Introduzione alla Gestione delle Schede PnP
Oggigiorno molto delle nuove schede interne sono Plug-and-Play (PnP).
Sebbene esista del software anche sotto Linux per gestire il PnP, non
sempre facile da usare. Esistono i 6 diversi metodi sottoelencati
per tener testa al PnP (ma alcuni potrebbero non essere adatti alla
propria situazione). Quale, o quali, si dovrebbe usare dipende dai
propri scopi. Quello che ora sembra il pi conveniente, a lungo
termine potrebbe rivelarsi essere n il pi facile n il migliore. Un
metodo apparentemente semplice di non far niente e lasciare al BIOS
PnP la configurazione, ma poi si dovranno fare un po' di ricerche per
capire quello che il BIOS ha fatto. Un confronto tra tutti questi
metodi dovrebbe essere scritto da qualcuno che li ha provati tutti.
Potrebbe essere necessario usarne pi di uno per portare a buon fine
il lavoro.
``Disabilitare il PnP'' tramite i ponticelli o software per
DOS/Windows (ma molte schede non offrono questa possibilit);
``Configurare il PnP dal BIOS'' (per il bus PCI si ha bisogno
solamente di un BIOS PCI, altrimenti necessario un BIOS PnP);
``Isapnp'' un programma che si pu sempre usare per configurare i
dispositivi PnP ma solo nel bus ISA
``Le Utility PCI'' per la configurazione del bus PCI;
``Configurazione Tramite Windows'' e successivo avvio di Linux da
Windows/DOS. Da usare come ultima risorsa;
``Applicare una Patch al Kernel'' per trasformare Linux in un
sistema operativo PnP;
``Configurazione Fatta dal Device Driver'', ma pochi lo fanno.
Ognuna delle suddette possibilit imposter le risorse-bus
nell'hardware. Ma solo le ultime due informeranno il gestore del
dispositivo di quanto stato fatto. Solo l'ultima dice tutto al
driver ( il driver). Il modo nel quale viene informato il driver
dipende dal driver stesso e pu essere necessario far qualcosa per
informarlo. Si veda ``Dire al Driver la Configurazione''.
5.2. Disabilitare il PnP ?
Molti dispositivi sono solamente PnP senza la possibilit di
disabilitarlo. Ma per alcuni si potrebbe essere in grado di
disabilitare il PnP tramite ponticelli o eseguendo il programma per
Windows che si ricevuto assieme al dispositivo (configurazione senza
ponticelli). Ci eviter l'onere, spesso complicato, della
configurazione PnP. Non si dimentichi di dire al BIOS che queste
risorse-bus sono riservate. Ci sono inoltre alcune ragioni per le
quali si potrebbe non voler disabilitare il PnP:
1. Se si ha MS Windows nella stessa macchina, allora si vorr
permettere al PnP di configurare diversamente i dispositivi sotto
Windows da come ha fatto sotto Linux.
2. L'intervallo di selezione dei numeri IRQ (o indirizzi di porta)
ecc. potrebbe essere piuttosto limitato finch non si usa il PnP.
3. Si potrebbe avere un device driver di Linux che usa i metodi PnP
per ricercare il dispositivo che controlla.
4. Se si ha, in futuro, la necessit di modificare la configurazione,
pu essere pi semplice farlo se il dispositivo PnP (nessuna
modifica ai ponticelli o esecuzione di un programma per
DOS/Windows).
5. Si hanno (o si avranno) altri dispositivi PnP che devono essere
configurati e quindi si deve comunque fornire il PnP.
Una volta configurati come dispositivi non PnP, non possono essere
configurati n da un qualsiasi software PnP n dal BIOS (finch non si
spostino i ponticelli e/o si usi ancora il software di configurazione
per DOS/Windows).
5.3. Introduzione all'Uso del BIOS per la Configurazione PnP
Se si ha un BIOS PnP, questo pu configurare l'hardware. Ci
significa che il proprio BIOS legge le richieste di risorse da tutti i
dispositivi e li configura (alloca a loro le risorse-bus). quasi un
rimpiazzo di un SO PnP tranne per il fatto che il BIOS non associa i
dispositivi con i loro gestori n dice a quest'ultimi come ha
effettuato la configurazione. Normalmente dovrebbe usare la
configurazione che ha salvato nella sua memoria non volatile (ESCD).
Se trova un nuovo dispositivo e se c' un conflitto, il BIOS dovrebbe
fare le modifiche necessarie alla configurazione e non user
esattamente quello che c'era nell'ESCD.
Il proprio BIOS deve supportare tale configurazione, ma talvolta non
le fa correttamente o completamente. Un vantaggio nell'uso del BIOS
che semplice in quanto nella maggior parte dei casi non c' niente
da impostare (se non dire nel men CMOS del BIOS che non si ha un SO
PnP). Mentre alcuni gestori di dispositivo possono essere in grado di
rilevare automaticamente quello che ha fatto il BIOS, in alcuni casi
sar necessario determinarlo da s (non sempre facile). Si veda la
sezione ``Qual la Mia Configurazione Corrente?''. Un altro
vantaggio che il BIOS fa il suo lavoro prima dell'avvio di Linux
cosicch tutte le risorse-bus sono pronte da usare (e trovate) dal
driver del dispositivo che parte poco dopo.
Secondo la MS solo opzionale (non richiesto) che il BIOS PnP sia in
grado di effettuare la configurazione PnP dei dispositivi (senza
l'aiuto di MS Windows). Ma sembra che la maggior parte dei BIOS fatti
dopo il 1996 ?? possano farlo. Si dovrebbe inviare una nota di
ringraziamento se lo fanno nel modo corretto. Configurano sia il bus
ISA che il bus PCI, ma mi dicono che alcuni BIOS vecchi riescano a
configurare solo il bus PCI. Per saperne di pi sul proprio BIOS, si
cerchi nel Web. Per piacere, non si chieda a me in quanto non ho dati
in proposito. I dettagli del BIOS che si pu voler sapere potrebbero
essere difficili da trovare (o addirittura non disponibili). Alcuni
BIOS hanno minime capacit PnP e provano girano la parte pi difficile
della configurazione alle utility per Windows. Se questo succede si
deve trovare un altro metodo (come le isapnptools) o provare ad
impostare il database ESCD se il BIOS ne ha uno. Si veda la sezione
seguente.
5.3.1. Il Database ESCD del BIOS
Il BIOS mantiene in un database non volatile una configurazione PnP
che prover ad usare. detta ESCD (Extended System Configuration
Data, ovvero Dati di Configurazione Estesa del Sistema). Ancora, la
presenza dell'ESCD opzionale, ma la maggior parte dei BIOS ce
l'hanno. L'ESCD non solo immagazzina la configurazione delle risorse
di tutti i dispositivi PnP ma contiene inoltre le informazioni di
configurazione dei dispositivi non PnP (e se li segna come tali) in
modo da evitare conflitti. I dati dell'ESCD sono solitamente salvati
in un chip e rimangono integri quando viene tolta l'alimentazione, ma
qualche volta sono salvati nel disco fisso??
L'ESCD pensata per mantenere l'ultima configurazione usata, ma se si
usa un programma come isapnp o le utility PCI di Linux (che non
aggiornano l'ESCD) allora l'ESCD non sapr niente di quello che si
fatto e non salver questa configurazione nell'ESCD. Un buon SO PnP
aggiorna l'ESCD cos la si pu usare successivamente per tutti i SO
non PNP (come il Linux standard). MS Windows pu fare questa cosa
solo in casi speciali. Si veda la sezione ``Usare Windows per
Impostare l'ESCD''.
Per usare quanto impostato nell'ESCD ci si assicuri di aver impostato
"Not a PnP OS" ("SO non PnP") o simile nel BIOS. Allora ogni volta
che il BIOS parte (prima che sia caricato il SO Linux) dovrebbe
configurare le cose in questo modo. Se il BIOS rileva una nuova
scheda PnP che non nell'ESCD, allora deve allocare le risorse-bus
alla scheda e aggiornare l'ESCD. Potrebbe anche dover cambiare le
risorse-bus assegnate a una scheda PnP gi esistente e modificare
l'ESCD di conseguenza.
Se ogni dispositivi ha salvato la sua ultima configurazione nel
proprio hardware, non sarebbe necessaria la configurazione
dell'hardware ogni volta che si accende il PC. Ma non funzionano in
questo modo e quindi tutti i dati dell'ESCD devono essere mantenuti
corretti se si usa il BIOS per il PnP. Ci sono alcuni BIOS che non
hanno una ESCD ma hanno un po' di memoria non volatile per
immagazzinare informazioni su quali risorse-bus siano riservate per
l'uso con schede non PnP. Molti BIOS hanno entrambe le cose.
5.3.2. Usare Windows per Impostare l'ESCD
Se il BIOS non imposta l'ESCD nel modo che si vuole (o nel modo in cui
dovrebbe essere) allora sarebbe comodo avere un'utility sotto Linux
per impostare l'ESCD. All'inizio del 1999 non ce n' nessuna. Quindi
uno potrebbe ripiegare nell'uso di Windows (se presente nello stesso
PC) per farlo.
Ci sono tre modi per usare Windows per provare ad impostare/modificare
l'ESCD. Un modo di usare l'utility ICU progettata per DOS o Windows
3.x. Dovrebbe funzionare bene anche per Windows 9x/2k?? Un altro
metodo di impostare manualmente i dispositivi ("forzarli") sotto
Windows 9x/2x cosicch Windows metter queste informazioni nell'ESCD
quando viene normalmente chiuso il sistema. Il terzo solamente per
i dispositivi legagy che non sono plug-and-play. Se a Windows nota
la loro presenza e quali sono le risorse-bus che usano, allora Windows
dovrebbe mettere queste informazioni nell'ESCD.
Se i dispositivi sono configurati automaticamente da Windows (senza
che l'utente gli chieda di "modificare le impostazioni") allora tale
configurazione probabilmente non finir dentro l'ESCD. Naturalmente
Windows potrebbe decidere da s di configurare le cose nello stesso
modo di come sono impostate nell'ESCD, cosicch alla fine sono
identiche ma per una coincidenza.
I Windows 9x sono sistemi operativi PnP e configurano automaticamente
i dispositivi. Mantengono il proprio database PnP ben nascosto nel
Registry (salvato in un file binario di Windows). Nel Registry ci
sono inoltre un sacco di altre cose relative alla configurazione oltre
alle risorse-bus PnP. C' sia una configurazione corrente delle
risorse PnP in memoria che un'altra (forse la stessa) salvata sul
disco fisso. Per vedere quella in memoria (?) sotto Windows98 o per
forzare delle modifiche si usi "Gestione Periferiche".
In Windows98 ci sono due modi per avviare Gestione Periferiche: 1.
Risorse del Computer --> Pannello di Controllo --> Propriet del
Sistema --> Gestione Periferiche. 2. (bottone destro del mouse)
Risorse del Computer --> Propriet --> Gestione Periferiche. Poi in
Gestione Periferiche si selezioni il dispositivo (solitamente un
processo in pi passi se ci sono pi dispositivi della stessa classe).
Poi si clicchi su "Propriet" e poi su "Risorse". Per modificare
manualmente la configurazione si disabiliti "Usa impostazione
automatica" e poi si clicchi su "Cambia Impostazioni". Ora si probi a
modificare l'impostazione, ma Windows potrebbe non permettere la
modifica. Se lo permette, si "forzata" una modifica. Un messaggio
dovrebbe infomarmare che si sta forzando. Se si vogliono mantenere le
impostazioni esistenti mostrate da Windows ma renderle "forzate",
allora si dovr forzare una modifica in qualcosa e poi riforzarla al
suo valore originale.
Per vedere cosa stato "forzato" in Windows98 si veda l'elenco
dell'"hardware forzato": Avvio --> Programmi --> Accessori --> Sistema
--> Informazioni sul Sistema --> Risorse Hardware --> Hardware
Forzato. Quando si "forza" una modifica di risorse-bus in Windows,
dovrebbe mettere tali modificge nell'ESCD (a patto che Windows sia
chiuso correttamente). Dalla finestra "Informazioni del Sistema" si
possono inoltre ispezionare quali IRQ e porte IO sono allocate sotto
Windows.
Anche se Windows non mostra conflitti nelle risorse-bus, potrebbero
essercene sotto Linux. Questo perch Windows potrebbe assegnare
risorse-bus differenti da quello che fa l'ESCD. Nel raro caso in cui
tutti i dispositivi sotto Windows siano legagy oppure siano stati
"forzati", allora le configurazioni di Windows e dell'ESCD dovrebbero
essere identiche.
5.3.3. Aggiungere un Nuovo Dispositivo (sotto Linux o Windows)
Se si aggiunge un nuovo dispositivo PnP e si ha il BIOS impostato a
"nessun SO PnP", allora il BIOS dovrebbe configurarlo automaticamente
e salvare la configurazione nell'ESCD. Se un dispositivo legacy non
PnP (o uno reso tale con i jumper, ecc.) allora ci sono un po' di
opzioni per gestirlo.
Si pu dire direttamente al BIOS (tramite il men di configurazione
CMOS) che certe risorse-bus (come gli IRQ) sono riservate e che non
devono essere allocate dal PnP. Ci non mette queste informazioni
nell'ESCD. Ma ci pu essere una scelta nel men del BIOS che
specifica quando, in caso di conflitto, queste scelte CMOS hanno o
meno priorit su quanto salvato nell'ESCD. Un altro metodo di
eseguire ICU sotto DOS/Windows. Un altro ancora di installare
manualmente il dispositivo sotto Windows 9x/2k e poi assicurarsi che
la sua configurazione sia "forzata" (si veda la sezione precedente).
Se "forzata" Windows dovrebbe aggiornare l'ESCD quando si spegne il
PC.
5.4. Isapnp (parte degli isapnptools)
Sfortunatamente, buona parte della documentazione per gli isapnptools
ancora difficile da comprendere a meno che non si conoscano le basi
del PnP. Questo HOWTO dovrebbe aiutare, come d'altronde aiuta la FAQ
distribuita con il programma. isapnp solo per i dispositivi PnP sul
bus ISA (non PCI). L'esecuzione del programma per Linux "isapnp"
all'avvio del sistema configurer tali dispositivi secondo i valori
delle risorse specificate nel file /etc/isapnp.conf. possibile
creare automaticamente questo file di configurazione, ma poi lo si
deve modificare manualmente per scegliere tra le varie opzioni. Con
isapnp, un driver di dispositivo che sia parte del kernel pu essere
eseguito troppo presto, cio prima che isapnp abbia impostato
indirizzi, ecc. nell'hardware. Ci risulta nel mancato rilevamento
del dispositivo da parte del driver. Il driver prova negli indirizzi
giusti, ma tali indirizzi non sono ancora stati impostati
nell'hardware.
Se la propria distribuzione installa automaticamente gli isapnptools,
allora probabilmente isapnp gi automaticamente eseguito all'avvio.
In questo caso, tutto quel che si deve fare modificare il file
/etc/isapnp.conf come spiegato da "man isapnp.conf". Si noti che
questa cosa equivalente alla configurazione manuale del PnP poich
si fanno decisioni su come configurare il tutto modificando tale file
di configurazione. Se si usa "isapnp" in questo modo e si ha un BIOS
PnP, si dovrebbe dire al BIOS (quando lo si configura) che si ha un
sistema operativo PnP ??
Se si esegue isapnp una volta per configurare i dispositivi ISA PnP,
ma l'esecuzione di isapnp fallisce ogni volta che il computer viene
avviato, allora se si ha MS Windows (95 o 98) sullo stesso PC la cosa
potrebbe essere dovuta al seguente problema: quando si usa MS Windows
(95 o 98), Windows potrebbe configurare diversamente le schede PnP in
modo tale che non funzioneranno correttamente (se non del tutto)
quando si torna in Linux. Si pu usare il programma "pnpdump" per
aiutarsi nella creazione del file di configurazione. Se si usa
"isapnp" in questo modo e si ha un BIOS PnP, sarebbe meglio dire al
BIOS (quando lo si imposta) che non si ha un SO PnP poich si vuole
che il BIOS continui a configurare i dispositivi PCI. Sebbene il BIOS
possa anche configurare i dispositivi ISA, isapnp lo rifar.
5.5. Le Utility PCI
Il nuovo pacchetto delle Utility PCI (= pciutils, incorrettamente
detto "pcitools"), dovrebbe permettere di effettuare manualmente la
configurazione PnP sul bus PCI. "lspci" elenca le risorse-bus, mentre
"setpci" imposta l'allocazione delle risorse nei dispositivi hardware.
5.6. Applicare una Patch al Kernel per Rendere Linux PnP
David Howells ha creato una patch per farlo chiamata "Linux Kernel
Configuration/Resource Manager" (talvolta chiamata semplicemente
Hardware Configuration Manager). La patch potrebbe non essere stata
preparata per l'ultimo kernel. Il kernel risultante si dice sia
stabile ma sono stati segnalati alcuni bachi. Include documentazione,
come ad esempio serial.txt per sapere come comportarsi con la porta
seriale. Fornisce "file" nell'albero /proc cosicch possibile
vedere cosa succede ed in uno di questi possibile inserire comandi
attraverso il comando echo per personalizzare la configurazione. Un
problema che la maggior parte dei gestori di dispositivo non sono
consci delle funzionalit introdotte da questa patch e quindi per la
configurazione si devono usare ancora i tradizionali file di
configurazione, ecc. La pagina web <http://www.astarte.free-
online.co.uk>.
5.7. Configurazione Tramite Windows
Si si ha Windows9x (o 2k) sullo stesso PC, allora semplicemente si
avvii Windows e lo si lasci configurare il PnP. Poi si avvi Linux da
Windows (o da DOS). stato segnalato che Windows cancella tutti gli
IRQ dai registri dei dispositivi PCI. Allora Linux segnala questa
cosa dicendo che trova un IRQ zero. Quindi si potrebbe non essere in
grado di usare questo metodo.
5.8. Configurazione Fatta dal Device Driver
Alcuni gestori di dispositivo useranno i metodi PnP per impostare le
risorse-bus nell'hardware ma solo per i dispositivo che controllano.
Poich la configurazione l'ha fatta il driver, ovviamente quest'ultimo
conosce la configurazione e non necessario fornirgli queste
informazioni.
Il problema in questo caso duplice. difficile incorporare tutto
questo nel driver, e il driver potrebbe prendere le risorse-bus di cui
ha bisogno da altri dispositivi. Rende le cose facili per l'utente,
ma un kernel Linux PnP sarebbe migliore. Si veda ``Linux Ha Bisogno
Di Tener Testa Meglio al PnP''.
5.9. Software e Documentazione sul PnP
homepage degli Isapnptools
<http://www.roestock.demon.co.uk/isapnptools/>
Patch per rendere il kernel Linux PnP <http://www.astarte.free-
online.co.uk>
Progetto PnP driver <http://www.io.com/~cdb/mirrors/lpsg/pnp-
linux.html>
Specifiche sul PnP della Microsoft
<http://www.microsoft.com/hwdev/respec/pnpspecs.htm>
Book: PCI System Architecture, 3rd ed. by Tom Shanley +, MindShare
1995. Tratta le caratteristiche simili al PnP del bus PCI.
Book: Plug and Play System Architecture, by Tom Shanley, Mind Share
1995. Dettagli del PnP sul bus ISA. Solo una concisa panoramica
del PnP sul bus PCI.
6. Dire la Configurazione al Driver
6.1. Introduzione
Come ci fatto dipende dal driver. Alcuni hanno pi di un modo per
scoprire come sono configurati i lori dispositivi fisici. Ad un
estremo c' il caso nel quale si devono codificare permanentemente le
risorse-bus nel kernel e ricompilarlo. All'altro estremo, i driver fa
tutto automaticamente e quindi non si deve fare niente. Potrebbe pure
impostare le risorse-bus nell'hardware usando i metodi PnP.
In mezzo ci sono i casi nei quali si esegue un programma per fornire
le informazioni sulle risorse al driver oppure si mettono tali
informazioni in un file. In alcuni casi i driver potrebbe cercare i
dispositivo agli indirizzi ai quali sospetta che questo risieda. Poi
pu provare a verificare diversi IRQ per vedere quale funziona. Pu o
meno fare queste cose automaticamente. In altri casi il driver pu
usare i metodi PnP per trovare il dispositivo e scoprire come sono
state impostate le risorse-bus, ma non le imposter lui stesso. Pu
pure guardare in alcuni file nella directory /proc.
Pu essere necessario fornire le risorse-bus come parametro al kernel
o a un modulo caricabile. Si veda /usr/lib/modules_help/descr.gz per
un'elenco dei possibili parametri. Il modulo da caricare elencato
in /etc/modules assieme con i propri parametri. In alcuni altri casi
le risorse-bus possono essere date come parametri al kernel. Sono
messe nel file lilo.conf come append="...". Poi dev'essere eseguito
il programma lilo per salvare nel codice di avvio del kernel.
Sebbene ci sia una grande disuniformit su come i driver scoprono le
informazioni sulle risorse-bus, il risultato finale lo stesso. Ci
sono cos tanti dispositivi hardware diversi e driver per essi che
meglio guardare la documentazione per il proprio driver per capire
come si informa sulle risorse-bus e cosa si deve fare per assicurasi
che riceva le informazioni di cui ha bisogno. Nelle sezioni che
seguono sono presentate brevi informazioni su alcuni gestori.
6.2. Il Driver delle Porte Seriali: setserial
Per configurare il gestore della porta seriale standard (non per le
schede multiporta) si usa setserial. Spesso eseguito da uno dei
file di inizializzazione. Nelle versioni pi recenti c' un file
/etc/serial.conf che si pu "editare" semplicemente usando in modo
normale il comando setserial e quel che si imposta usando setserial
salvato nel file di configurazione serial.conf. Il file serial.conf
dovrebbe essere consultato quando il comando setserial eseguito da
un file di inizializzazione. La popria distribuzione potrebbe o meno
aver gi impostato questa cosa.
Ci sono due modi diversi di usare setserial a seconda delle opzioni
che gli si d. Un modo di usarlo per dire manualmente al driver la
configurazione. L'altro di indigare ad un indirizzo specificato e
segnalare se l esiste una porta seriale. Pu pure indigare a questo
indirizzo e provare a rilevare quale IRQ usato per questa porta. Il
driver esegue qualcosa di simile a setserial all'avvio ma rileva gli
IRQ, assegna semplicemente gli IRQ "predefiniti" che potrebbe pure
essere sbagliati. Controlla invece l'esistenza di un aporta. Si veda
il Serial-HOWTO per maggiori dettagli.
6.3. Gestori della Scheda Audio
6.3.1. OSS-Lite
Si deve fornire IO, IRQ e DMA come parametri al modulo oppure
compilare il supporto all'interno del kernel fissando i valori.
Alcune schede PCI saranno rilevate automaticamente (basta guardare in
/proc/pci o equivalenti). La RedHat fornisce un programma "sndconfig"
che rileva le schede PnP ISA e configura automaticamente i moduli da
caricare con le risorse-bus rilevate.
6.3.2. OSS (Open Sound System) e ALSA
Questi rileveranno la scheda tramite i metodi PnP e poi selezioneranno
il driver appropriato e lo caricheranno. Imposteranno anche le
risorse-bus su una scheda PnP ISA. Pu essere necessario intervenire
manualmente per evitare conflitti. Nel driver ALSA, il supporto per
il PnP ISA opzionale e se si vuole si possono usare gli isapnptools.
7. Qual la Mia Configurazione Corrente?
Qui "configurazione" indica l'assegnazione delle risorse-bus PnP
(indirizzi, IRQ e DMA). Per ogni dispositivo questa domanda pu
essere vista da due parti. Da ogni parte dovrebbe avere la stessa
risposta.
1. Qual la configurazione del software di gestione del dispositivo?
ovvero: Il driver come pensa sia configurato l'hardware?
2. Quale configurazione (se esiste) impostata nel dispositivo
hardware?
Naturalmente la configurazione del dispositivo hardware e del suo
driver dovrebbe essere la stessa (e normalmente lo ). Ma se le cose
non vanno per il verso giusto, ci possono essere delle differenze.
Ci significa che il driver ha informazioni incorrette sulla
configurazione reale dell'hardware. E questo pu essere un problema.
Se il software che si usa non spiega adeguatamente cosa c' che non va
(oppure non configura tutto automaticamente) allora bisogna
investigare per capire come sono configurati i dispositivi hardware e
i relativi driver. Sebbene i device driver di Linux dovrebbero "dire
tutto" in alcuni casi non semplice determinare che cosa stato
impostato nell'hardware.
Un altro problema che quando si vede un messaggio di configurazione
sullo schermo, qualche volta non chiaro se la configurazione
riportata quella del driver del dispositivo, del dispositivo stesso
o di entrambi. Se al driver del dispositivo assegnata una
configurazione e poi questo verifica nell'hardware per vedere se
configurato nello stesso modo, allora la configurazione riportata
dovrebbe essere quella sia dell'hardware che del driver.
Ma alcuni driver non lo farlo in quanto possono accettare una
configurazione senza verificarla. Per esempio, "setserial" accetta
una configurazione senza verificarla (anche se gli si dice di rilevare
le risorse-bus). Quindi "setserial" pu solamente dire la
configurazione del driver e non quella dell'hardware.
Alcune informazioni sulla configurazione possono essere ottenute
leggendo i messaggi del BIOS e di Linux che appaiono sullo schermo
quando inizialmente si avvia il computer. Spesso questi messaggi
scorrono troppo velocemente per poterli leggere, ma dopo che si sono
fermati si prema alcune volte Shift+PageUp per vedere quelli passati.
Digitando in qualsiasi momento "dmesg" al prompt della shell verranno
mostrati solo i messaggi del kernel di Linux e si perderanno alcuni
dei pi importanti (tar cui quelli del BIOS). I messaggi di Linux
qualche volta possono mostrare solamente quella che il driver di
dispositivo pensa sia la configurazione, forse specificategli
attraverso un file di configurazione sbagliato.
I messaggi del BIOS mostreranno la configurazione hardware in quel
momento, ma un SO PnP, isapnp o le utility PCI possono successivamente
modificarla. I messaggi del BIOS sono mostrati prima di quelli di
Linux. Come alternativa all'uso alla fine di Shift+PageUp per
leggerli, si provi a congelarli premento il tasto "Pause". Si prema
un qualsiasi altro tasto per riprendere. Ma non appena iniziano ad
apparire i messaggi di Linux gi troppo tardi per usare "Pause" in
quanto non congeler i messaggi di Linux.
7.1. Come Sono Configurati i Miei Driver di Dispositivo?
Per determinarlo ci potrebbe essere un programma che si pu eseguire
da riga di comando (come "setserial" per le porte seriali). La
directory /proc torna molto utile. /proc/ioports mostra gli indirizzi
I/O che usano i driver (o provano ad usare se errati). Tali indirizzi
possono non essere impostati nello stesso modo nell'hardware.
/proc/interrupts mostra solamente gli interrupt correntemente in uso e
molti di quelli che sono stati allocati ai driver non sono mostrati in
quanto non attualmente in uso. Per esempio, anche se il proprio
lettore di dischetti ha un dischetto a suo interno ed pronto
all'uso, il suo interrupt non sar mostrato finch non lo si usa.
Ancora, solo perch qui viene mostrato un interrupt non significa che
esiste nell'hardware. Un traccia evidente che non esiste
nell'hardware si avr se sar mostrato che per questo interrupt sono
avvenute 0 interruzioni. Anche se mostra che alcuni interrupt hanno
ricevuto alcune interruzioni, pu significare che tale interrupt non
esiste nel dispositivo mostrato a fianco, ma esiste piuttosto in
qualche altro dispositivo non in uso, ma che in qualche modo ha
ricevuto un paio di interruzioni. Nel kernel 2.2 l'albero /proc
stato cambiato.
7.2. Come Sono Configurati i Miei Dispositivi Hardware?
facile vedere quali risorse-bus sono state assegnate ad un
dispositivo nel bus PCI: si usi il comando "lspci" oppure per i kernel
precedenti al 2.2. si guardi /proc/pci; per kernel 2.2+
/proc/bus/pci/devices. Per il bus ISA si pu provare ad eseguire
pnpdump --dumpregs ma non una cosa sicura. I risultati possono
essere difficili da decifrare. Non si confonda l'indirizzo della
read-port (porta di lettura) alla quale pnpdump "prova" (e trova
qualcosa) con l'indirizzo I/O del dispositivo trovato. Non sono la
stessa cosa.
I messaggi del BIOS all'avvio del sistema dicono com'era allora la
configurazione. Se ci si affida al BIOS per la configurazione, allora
dovrebbe essere ancora la stessa. I messaggi di Linux possono essere
generati dai driver che hanno controllato per vedere se l'hardware
effettivamente l (e possibilmente verificato IRQ e DMA).
Naturalmente, se il dispositivo funziona correttamente, allora
probabilmente configurato nello stesso modo del driver.
8. Appendice
8.1. Indirizzi
Esistono tre tipi di indirizzi: indirizzi nella memoria principale,
indirizzi I/O e indirizzi di configurazione. Gli indirizzi di
configurazione nel bus PCI costituiscono uno spazio di indirizzi
separato proprio come fanno gli indirizzi I/O. Tranne per il caso
complicato degli indirizzi di configurazione ISA, dove il fatto che un
indirizzo nel bus sia o meno un indirizzo di memoria, un indirizzo di
I/O o un indirizzo di configurazione dipende solo dal potenziale di
tensione in altre linee (tracce) del bus.
8.1.1. Indirizzi di Configurazione del Bus ISA (Read-Port, ecc.)
Nel bus ISA, tecnicamente non c' uno spazio di indirizzi di
configurazione, ma c' un modo speciale con il quale la CPU accede ai
registri di configurazione PnP sulle schede PnP. Per questo scopo
sono allocati 3 indirizzi di I/O. Non sono allocati 3 indirizzi per
ognuna delle schede, ma 3 indirizzi condivisi da tutte le schede.
Questi 3 indirizzi sono chiamati read-port (porta di lettura), write-
port (porta di scrittura) e address-port (posta di indirizzo). Ogni
porta ha la dimensione di un solo byte. Ogni scheda PnP ha molti
indirizzi di configurazione cosicch solamente questi 3 indirizzi non
sono nemmeno sufficienti per i registri di una sola scheda. Per
comunicare con una certa schede, inviato a tutte le schede nella
write-port un numero speciale assegnato alla scheda (handle). Dopo di
che la sola scheda che rimane in ascolto quella con quell'handle.
Allora l'indirizzo del registro di configurazione (di quella scheda)
inviato nella address-port (di tutte le schede -- ma solamente una
in ascolto). La comunicazione successiva inizia con un registro di
configurazione su quella scheda leggendolo dalla read-port oppure
scrivendolo nella write-port.
La write-port sempre a A79 e la address-port sempre a 279 (hex).
La read-port invece non fissata ma impostata da software di
configurazione ad un qualche indirizzo che si suppone non entri in
conflitto con nessun'altra scheda ISA. Se c' un conflitto, cambier
l'indirizzo. Tutte le schede PnP saranno poi "programmate" con questo
indirizzo. Quindi se diciamo si usa isapnp per impostare o verificare
i dati della configurazione si deve conoscere l'indirizzo di questa
read-port.
8.1.2. Intervalli di Indirizzi
Talvolta in questo documento il termine "indirizzi" usato per
intendere un intervallo contiguo di indirizzi. Poich gli indirizzi
sono dati in byte, un indirizzo singolo contiene solamente un byte,
mentre l'I/O e la memoria principale ne hanno bisogno di molti di pi.
quindi spesso usato un intervallo di diciamo 8 byte per gli
indirizzi I/O mentre l'intervallo di indirizzi in memoria principale
allocato ad un dispositivo molto maggiore. Per una porta seriale
(un dispositivo di I/O) sufficiente specificare l'indirizzo di
partenza dell'indirizzo I/O del dispositivo (ad esempio 3F8) in quanto
ben noto che l'intervallo di indirizzi per una porta seriale di
soli 8 byte. L'indirizzo di partenza noto come "base address"
(indirizzo base).
8.1.3. Spazio di Indirizzi
In ISA, per accedere sia allo "spazio" di indirizzi I/O che a quello
di memoria (principale) usato lo stesso bus indirizzi (address bus)
(le linee usate nel bus sono condivise). Come fa un dispositivo a
sapere quando un indirizzo che appare sull'address bus un indirizzo
di memoria o un indirizzo I/O? Beh, ci sono 4 linee dedicate sul bus
che trasportano questa informazione ed altro. Se una ben determinata
di queste 4 linee "attiva", dice che la CPU vuole leggere da un
indirizzo I/O e quindi la memoria principale ignora l'indirizzo sul
bus. Le altre 3 linee servono per scopi analoghi. In breve: esistono
linee di lettura e di scrittura sia per gli indirizzi di memoria
principale che per quelli di I/O (4 linee in tutto).
Nel bus PCI c' la stessa idea di base, che usa sempre 4 linee, ma il
tutto viene fatto in maniera un po' diversa. Invece di essere
"attiva" solo una delle 4 linee, in queste viene posto un numero
binario (16 diverse possibilit). Quattro di questi 16 numeri servono
gli spazi di I/O e di memoria come visto prima. Inoltre c' anche uno
spazio di indirizzi di configurazione che usa altri 2 numeri. Gli
altri 10 numeri extra sono lasciati per altri scopi.
8.1.4. Verifica dell'Intervallo (Test ISA per i Conflitti di Indi
rizzo I/O)
Nel bus ISA, c' un metodo costruito dentro ogni scheda PnP per
verificare che non ci siano altre schede che usano gli stessi
indirizzi. Se due o pi schede usano gli stessi indirizzi I/O,
probabilmente neanche una scheda funzioner bene (se non tutte). Un
buon software di PnP dovrebbe assegnare le risorse-bus in modo da
evitare i conflitti, ma anche in questo caso una scheda legacy
potrebbe nascondersi da qualche parte lo stesso indirizzo.
Il test inizia con una scheda che mette un numero di controllo nei
proprio registri I/O. Successivamente il software PnP lo legge e
verifica di aver letto lo stesso numero di controllo. Se non vero,
qualcosa andato storto (ad esempio un'altra scheda con lo stesso
numero di controllo). Ripete allora lo stesso test con un altro
numero di controllo. Poich in realt verifica l'intervallo di
indirizzi I/O assegnati alla scheda, detto "range check" (verifica
di intervallo). Un nome migliore potrebbe essere verifica dei
conflitti di indirizzo. Se c' un conflitto di indirizzo si ottiene
un messaggio d'errore e lo si deve risolvere per proprio conto.
8.1.5. Comunicare Direttamente Attraverso la Memoria
Tradizionalmente, la maggior parte dei dispositivi I/O usano solamente
la memoria I/O per comunicare con la CPU. Per esempio, la porta
seriale lo fa. Il device driver, in esecuzione nella CPU, vorrebbe
leggere e scrivere dati sia dallo/nello spazio di indirizzi I/O che
dalla/nella memoria principale. Il modo pi veloce si avrebbe se il
dispositivo stesso mettesse i dati direttamente nella memoria
principale. Un modo per farlo usare i ``Canali DMA'' o il "bus
mastering". Un altro modo di allocare al dispositivo un po' di
spazio in memoria principale. In questo modo il dispositivo legge e
scrive direttamente nella memoria principale senza preoccuparsi di DMA
e bus mastering. Tale dispositivo pu usare anche indirizzi I/O.
8.2. Interrupt -- Dettagli
Gli interrupt trasportano un sacco di informazioni, ma solo
indirettamente. Il segnale di interrupt (una tensione in una linea)
dice semplicemente ad un chip chiamato interrupt controller
("controllore delle interruzioni") che un certo dispositivo chiede un
po' di attenzione. L'interrupt controller allora lo segnala alla CPU.
La CPU trova il driver per questo dispositivo e esegue una parte di
esso nota come "interrupt service routine" (routine di servizio
dell'interrupt) o "interrupt handler". Questa "routine" prova a
capire cos' successo e poi si occupa del problema, come il
trasferimento di dati da (o nel) dispositivo. Questo programma
(routine) pu facilmente scoprire cos' successo in quanto il
dispositivo ha dei registri ad un indirizzo noto al software di
gestione (premesso che le informazioni sul numero IRQ e l'indirizzo di
I/O siano impostate correttamente). Questi registri contengono
informazioni sullo stato del dispositivo. Il software legge il
contenuto di questi registri e ispezionandone il contenuto, scopre
cos' successo e intraprende l'azione appropriata.
Quindi ogni device driver ha bisogno di sapere su quale numero di
interrupt (IRQ) restare in ascolto. Nel bus PCI (e per le porte
seriali sul bus ISA a partire dal kernel 2.2) permesso che due (o
pi) dispositivi condividano lo stesso numero IRQ. Quando avviene
tale interrupt, la CPU esegue la routine di servizio dell'interruzione
per tutti questi dispositivi che usano quell'interrupt. La prima cosa
che fa la prima delle routine di controllare per vedere se
l'interrupt effettivamente avvenuto per il suo dispositivo. Se non
c'erano interrupt (falso allarme) la routine termina e parte la
successiva routine di servizio, ecc.
8.3. Interrupt PCI
Gli interrupt PCI sono diversi, ma poich solitamente sono mappati su
IRQ si comportano quasi nello stesso modo. Una differenza sostanziale
che gli interrupt PCI possono essere condivisi. Per esempio l'IRQ5
pu essere condiviso da due dispositivi PCI. Questa funzionalit di
condivisione automatica: non necessario hardware o software
speciale. Si sono avute notizie di situazioni nelle quali questa
condivisione non funzionava, ma solitamente era dovuto a difetti nel
software di gestione del dispositivo. Si suppone che tutti i device
driver per i dispositivi PCI forniscano la condivisione degli
interrupt. Si noti che non possibile condividere lo stesso
interrupt tra il bus ISA e il bus PCI. Comunque, le condivisioni
illegali funzioneranno a patto che i dispositivi in conflitto non
siano in uso nello stesso istante. "In uso" qui significa che un in
esecuzione un programma che "apre" il device nel suo codice C di
programmazione.
necessario conoscere alcuni dettagli del sistema di interrupt PCI
per poter impostare il CMOS del BIOS o i ponticelli nelle vecchie
schede PCI. Ogni scheda PCI ha 4 possibili interrupt: INTA#, INTB#,
INTC# e INTD#. Quindi per un sistema a 7 slot ci possono essere 7 x 4
= 28 diverse linee di interrupt. Ma le specifiche permettono un
numero minore di linee di interrupt. Questo non troppo restrittivo
in quanto gli interrupt possono essere condivisi. Molti bis PCI
sembrano essere fatti con solo 4 linee di interrupt. Chiamiamole
linee (connessioni o tracce) W, X, Y e Z. Supponiamo di progettare
l'interrupt B dello slot 3 come interrupt 3B. Allora la linea W
potrebbe essere usato per condividere gli interrupt 1A, 2B, 3C, 4D,
5A, 6B e 7C. Ci fatto connettendo fisicamente la linea W alla
linee 1A, 2B, ecc. Nello stesso modo la linea X potrebbe essere
connessa alle linee 1B, 2C, 3D, 4A, 5B, 6C e 7D. Poi, all'avvio, il
BIOS mappa le linee X, W, Y e Z su IRQ. Dopodich scrive l'IRQ sul
quale mappato ogni dispositivo dentro un registro hardware presente
su ogni dispositivo. Ora chiunque interroghi il dispositivo pu
trovare quale IRQ usa.
Le summenzionate linee X, W, Y e Z sono etichettate nelle specifiche
PCI come INTA#, INTB#, INTC# e INTD#. Questa notazione PCI ufficiale
pu confondere in quanto ora INTA# ha due possibili significati a
seconda si stia parlando di uno slot o del bus PCI. Per esempio, se
3C mappato su X allora diciamo che l'INTC# dello slot 3 connesso a
INTA# (X) del bus PCI. Notazione piuttosto confusa.
Inoltre c' un altro vincolo. Uno slot PCI deve usare per primo
l'interrupt con la lettera pi bassa. Quindi se una slot usa solo un
interrupt, deve essere INTA#. Se ne usa due devono essere INTA# e
INTB#, ecc. Una scheda in uno slot pu avere su fino ad 8
dispositivi, ma per questi ci sono solo 4 interrupt PCI. Ci va bene
lo stesso in quanto gli interrupt possono essere condivisi in modo
tale che ognuno degli 8 dispositivi (se esistono) pu avere un
interrupt. La lettera dell'interrupt PCI di un dispositivo spesso
fissa e scritta nell'hardware del dispositivo.
Il BIOS assegna IRQ (interrupt) in modo da evitare i conflitti con gli
IRQ che sa sono gi assegnati sul bus ISA. Talvolta nel men CMOS del
BIOS possibile assegnare gli IRQ alle schede PCI (ma non cos
semplice come spiegato sopra). Ci sono situazioni nelle quali Windows
azzera tutti i numeri IRQ delle schede PCI dopo l'impostazione della
mappatura degli IRQ. Se poi qualcuno avvia Linux da Windows ottiene
come risultato che Linux pu trovare solo IRQ nulli e quindi
sbagliati.
Si potrebbe pensare che poich il PCI sta usando gli IRQ (il bus ISA)
potrebbe essere lento, ecc. Non in realt. I chip ISA di controllo
degli interrupt posseggono linee dirette di interrupt che vanno alla
CPU in modo da ottenere attenzione immediata. Mentre i segnali nei
bus ISA di dati e indirizzi devono passare per il bus PCI per ottenere
la CPU, i segnali di IRQ ci vanno direttamente.
8.4. Isolamento
Questa cosa pertinente solo con il bus ISA. L'isolamento
("isolation") un complesso metodo per assegnare un handle temporaneo
(numero identificativo o Card Select Number = CSN) ad ogni dispositivo
PnP presente nel bus ISA. Sebbene esistano modi molto pi efficienti
(ma pi complessi) per fare questa cosa, alcuni dicono che questo un
metodo semplice. usato solo un indirizzo di scrittura per tutte le
scritture PnP a tutti i dispositivi PnP, cosicch quello che viene
scritto in questo indirizzo va a tutti i dispositivi PnP che sono in
ascolto. Questo indirizzo di scrittura usato per inviare
(assegnare) un handle univoco ad ognuno dei dispositivi PnP. Questa
assegnazione richiede che solo un dispositivo sia in attesa quando
inviato (scritto) l'handle in questo indirizzo comune. Tutti i
dispositivi PnP hanno un numero di serie univoco che usano per il
processo di isolamento. Fare l'isolamento qualcosa di simile ad un
gioco. fatto usando l'equivalente di una sola linea del bus che
collega tutti i dispositivi PnP e il programma di isolamento.
Nel primo giro di questo "gioco" tutti i dispositivi PnP sono ascolto
su questa linea e inviano simultaneamente una sequenza di bit nella
linea. I bit permessi sono un "1" (tensione positiva) oppure uno "0
aperto" di nessuna tensione (circuito aperto e tri-state). Ogni
dispositivo PnP inizia semplicemente ad inviare sequenzialmente su
questa linea il suo numero di serie, bit a bit, iniziando con il bit
pi significativo. Se un qualsiasi dispositivo, invia un 1, un 1 sar
sentito sulla linea da tutti gli altri dispositivi. Se tutti i
dispositivi inviano uno "0 aperto" nella linea non si sentir niente.
L'obbiettivo di eliminare (alla fine di questa prima tornata) tutti
i dispositivi tranne quello con il numero di serie pi elevato.
"Eliminato" significa che cessa restare in ascolto all'indirizzo di
scrittura al quale restano in ascolto tutti i dispositivi ancora in
gioco. Ci detto anche "dropping out". (Si noti che tutti i numeri
di serie sono della stessa lunghezza.)
Per prima cosa si consideri solo il bit pi significativo del numero
di serie che viene posto per primo sulla linea da tutti i dispositivi
che non hanno ancora un handle. Se un qualsiasi dispositivo PnP invia
uno 0 (0 aperto) ma sente un 1, questo significa che qualche altro
dispositivo PnP ha un numero di serie pi alto, e quindi
temporaneamente si toglie dal gioco e non ascolta pi finch il giro
non terminato (ovvero quando viene assegnato un handle al vincitore:
il dispositivo con il numero di serie pi alto). Ora i dispositivi
ancora in gioco hanno tutti il medesimo bit pi significativo (un 1),
e quindi, per la partecipazione futura a questo giro, possiamo
trascurare questa cifra e considerare solo la parte restante del
numero di serie. Adesso si torni all'inizio di questo paragrafo e lo
si ripeta finch per tutti i dispositivi non siano stati esaminati
completamente i numeri di serie (si veda sotto per il caso di tutti
0).
Quindi chiaro che il numero di serie pi alto non verr eliminato
dal gioco. Ma cosa succede se le cifre pi significative (anche nel
caso dei numeri di serie ridotti) sono tutte 0? In questo caso
stato inviato uno "0 aperto" nella linea e tutti i partecipanti
rimangono in gioco. Se tutti hanno uno 0 come cifra pi significativa
allora gli 0 sono trascurati come stato fatto nel paragrafo
precedente con gli 1. Il gioco continua inviando la cifra successiva
del numero di serie.
Alla fine di questa tornata (dopo che ogni partecipante rimasto ha
inviato il bit meno significato del numero di serie) rimane solo il
dispositivo PnP con il numero di serie pi elevato. A questo viene
assegnato un handle ed esce permanentemente dal gioco. Poi tutti
quelli scartati precedentemente rientrano in gioco e inizia un nuovo
giro con un partecipante in meno. Alla fine, viene assegnato un
handle a ciascun dispositivo PnP. facile vedere che questo
algoritmo funziona.
Una volta assegnati, gli handle sono usati per indirizzare ogni
dispositivo PnP, sia per potergli inviare una configurazione sia per
leggere le informazioni di configurazione dal dispositivo stesso. Si
noti che questi handle sono usati solo per la configurazione PnP e non
sono usati per le normali comunicazioni con il dispositivo. Quando il
computer viene avviato, tutti gli handle sono stati persi e quindi il
BIOS PnP solitamente opera il processo di isolamento ogni qualvolta si
riavvia il proprio PC.
FINE DEL Plug-and-Play-HOWTO
|