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 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 2221 2222 2223 2224 2225 2226 2227 2228 2229 2230 2231 2232 2233 2234 2235 2236 2237 2238 2239 2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 2291 2292 2293 2294 2295 2296 2297 2298 2299 2300 2301 2302 2303 2304 2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 2315 2316 2317 2318 2319 2320 2321 2322 2323 2324 2325 2326 2327 2328 2329 2330 2331 2332 2333 2334 2335 2336 2337 2338 2339 2340 2341 2342 2343 2344 2345 2346 2347 2348 2349 2350 2351 2352 2353 2354 2355 2356 2357 2358 2359 2360 2361 2362 2363 2364 2365 2366 2367 2368 2369 2370 2371 2372 2373 2374 2375 2376 2377 2378 2379 2380 2381 2382 2383 2384 2385 2386 2387 2388 2389 2390 2391 2392 2393 2394 2395 2396 2397 2398 2399 2400 2401 2402 2403 2404 2405 2406 2407 2408 2409 2410 2411 2412 2413 2414 2415 2416 2417 2418 2419 2420 2421 2422 2423 2424 2425 2426 2427 2428 2429 2430 2431 2432 2433 2434 2435 2436 2437 2438 2439 2440 2441 2442 2443 2444 2445 2446 2447 2448 2449 2450 2451 2452 2453 2454 2455 2456 2457 2458 2459 2460 2461 2462 2463 2464 2465 2466 2467 2468 2469 2470 2471 2472 2473 2474 2475 2476 2477 2478 2479 2480 2481 2482 2483 2484 2485 2486 2487 2488 2489 2490 2491 2492 2493 2494 2495 2496 2497 2498 2499 2500 2501 2502 2503 2504 2505 2506 2507 2508 2509 2510 2511 2512 2513 2514 2515 2516 2517 2518 2519 2520 2521 2522 2523 2524 2525 2526 2527 2528 2529 2530 2531 2532 2533 2534 2535 2536 2537 2538 2539 2540 2541 2542 2543 2544 2545 2546 2547 2548 2549 2550 2551 2552 2553 2554 2555 2556 2557 2558 2559 2560 2561 2562 2563 2564 2565 2566 2567 2568 2569 2570 2571 2572 2573 2574 2575 2576 2577 2578 2579 2580 2581 2582 2583 2584 2585 2586 2587 2588 2589 2590 2591 2592 2593 2594 2595 2596 2597 2598 2599 2600 2601 2602 2603 2604 2605 2606 2607 2608 2609 2610 2611 2612 2613 2614 2615 2616 2617 2618 2619 2620 2621 2622 2623 2624 2625 2626 2627 2628 2629 2630 2631 2632 2633 2634 2635 2636 2637 2638 2639 2640 2641 2642 2643 2644 2645 2646 2647 2648 2649 2650 2651 2652 2653 2654 2655 2656 2657 2658 2659 2660 2661 2662 2663 2664 2665 2666 2667 2668 2669 2670 2671 2672 2673 2674 2675 2676 2677 2678 2679 2680 2681 2682 2683 2684 2685 2686 2687 2688 2689 2690 2691 2692 2693 2694 2695 2696 2697 2698 2699 2700 2701 2702 2703 2704 2705 2706 2707 2708 2709 2710 2711 2712 2713 2714 2715 2716 2717 2718 2719 2720 2721 2722 2723 2724 2725 2726 2727 2728 2729 2730 2731 2732 2733 2734 2735 2736 2737 2738 2739 2740 2741 2742 2743 2744 2745 2746 2747 2748 2749 2750 2751 2752 2753 2754 2755 2756 2757 2758 2759 2760 2761 2762 2763 2764 2765 2766 2767 2768 2769 2770 2771 2772 2773 2774 2775 2776 2777 2778 2779 2780 2781 2782 2783 2784 2785 2786 2787 2788 2789 2790 2791 2792 2793 2794 2795 2796 2797 2798 2799 2800 2801 2802 2803 2804 2805 2806 2807 2808 2809 2810 2811 2812 2813 2814 2815 2816 2817 2818 2819 2820 2821 2822 2823 2824 2825 2826 2827 2828 2829 2830 2831 2832 2833 2834 2835 2836 2837 2838 2839 2840 2841 2842 2843 2844 2845 2846 2847 2848 2849 2850 2851 2852 2853 2854 2855 2856 2857 2858 2859 2860 2861 2862 2863 2864 2865 2866 2867 2868 2869 2870 2871 2872 2873 2874 2875 2876 2877 2878 2879 2880 2881 2882 2883 2884 2885 2886 2887 2888 2889 2890 2891 2892 2893 2894 2895 2896 2897 2898 2899 2900 2901 2902 2903 2904 2905 2906 2907 2908 2909 2910 2911 2912 2913 2914 2915 2916 2917 2918 2919 2920 2921 2922 2923 2924 2925 2926 2927 2928 2929 2930 2931 2932 2933 2934 2935 2936 2937 2938 2939 2940 2941 2942 2943 2944 2945 2946 2947 2948 2949 2950 2951 2952 2953 2954 2955 2956 2957 2958 2959 2960 2961 2962 2963 2964 2965 2966 2967 2968 2969 2970 2971 2972 2973 2974 2975 2976 2977 2978 2979 2980 2981 2982 2983 2984 2985 2986 2987 2988 2989 2990 2991 2992 2993 2994 2995 2996 2997 2998 2999 3000 3001 3002 3003 3004 3005 3006 3007 3008 3009 3010 3011 3012 3013 3014 3015 3016 3017 3018 3019 3020 3021 3022 3023 3024 3025 3026 3027 3028 3029 3030 3031 3032 3033 3034 3035 3036 3037 3038 3039 3040 3041 3042 3043 3044 3045 3046 3047 3048 3049 3050 3051 3052 3053 3054 3055 3056 3057 3058 3059 3060 3061 3062 3063 3064 3065 3066 3067 3068 3069 3070 3071 3072 3073 3074 3075 3076 3077 3078 3079 3080 3081 3082 3083 3084 3085 3086 3087 3088 3089 3090 3091 3092 3093 3094 3095 3096 3097 3098 3099 3100 3101 3102 3103 3104 3105 3106 3107 3108 3109 3110 3111 3112 3113 3114 3115 3116 3117 3118 3119 3120 3121 3122 3123 3124 3125 3126 3127 3128 3129 3130 3131 3132 3133 3134 3135 3136 3137 3138 3139 3140 3141 3142 3143 3144 3145 3146 3147 3148 3149 3150 3151 3152 3153 3154 3155 3156 3157 3158 3159 3160 3161 3162 3163 3164 3165 3166 3167 3168 3169 3170 3171 3172 3173 3174 3175 3176 3177 3178 3179 3180 3181 3182 3183 3184 3185 3186 3187 3188 3189 3190 3191 3192 3193 3194 3195 3196 3197 3198 3199 3200 3201 3202 3203 3204 3205 3206 3207 3208 3209 3210 3211 3212 3213 3214 3215 3216 3217 3218 3219 3220 3221 3222 3223 3224 3225 3226 3227 3228 3229 3230 3231 3232 3233 3234 3235 3236 3237 3238 3239 3240 3241 3242 3243 3244 3245 3246 3247 3248 3249 3250 3251 3252 3253 3254 3255 3256 3257 3258 3259 3260 3261 3262 3263 3264 3265 3266 3267 3268 3269 3270 3271 3272 3273 3274 3275 3276 3277 3278 3279 3280 3281 3282 3283 3284 3285 3286 3287 3288 3289 3290 3291 3292 3293 3294 3295 3296 3297 3298 3299 3300 3301 3302 3303 3304 3305 3306 3307 3308 3309 3310 3311 3312 3313 3314 3315 3316 3317 3318 3319 3320 3321 3322 3323 3324 3325 3326 3327 3328 3329 3330 3331 3332 3333 3334 3335 3336 3337 3338 3339 3340 3341 3342 3343 3344 3345 3346 3347 3348 3349 3350 3351 3352 3353 3354 3355 3356 3357 3358 3359 3360 3361 3362 3363 3364 3365 3366 3367 3368 3369 3370 3371 3372 3373 3374 3375 3376 3377 3378 3379 3380 3381 3382 3383 3384 3385 3386 3387 3388 3389 3390 3391 3392 3393 3394 3395 3396 3397 3398 3399 3400 3401 3402 3403 3404 3405 3406 3407 3408 3409 3410 3411 3412 3413 3414 3415 3416 3417 3418 3419 3420 3421 3422 3423 3424 3425 3426 3427 3428 3429 3430 3431 3432 3433 3434 3435 3436 3437 3438 3439 3440 3441 3442 3443 3444 3445 3446 3447 3448 3449 3450 3451 3452 3453 3454 3455 3456 3457 3458 3459 3460 3461 3462 3463 3464 3465 3466 3467 3468 3469 3470 3471 3472 3473 3474 3475 3476 3477 3478 3479 3480 3481 3482 3483 3484 3485 3486 3487 3488 3489 3490 3491 3492 3493 3494 3495 3496 3497 3498 3499 3500 3501 3502 3503 3504 3505 3506 3507 3508 3509 3510 3511 3512 3513 3514 3515 3516 3517 3518 3519 3520 3521 3522 3523 3524 3525 3526 3527 3528 3529 3530 3531 3532 3533 3534 3535 3536 3537 3538 3539 3540 3541 3542 3543 3544 3545 3546 3547 3548 3549 3550 3551 3552 3553 3554 3555 3556 3557 3558 3559 3560 3561 3562 3563 3564 3565 3566 3567 3568 3569 3570 3571 3572 3573 3574 3575 3576 3577 3578 3579 3580 3581 3582 3583 3584 3585 3586 3587 3588 3589 3590 3591 3592 3593 3594 3595 3596 3597 3598 3599 3600 3601 3602 3603 3604 3605 3606 3607 3608 3609 3610 3611 3612 3613 3614 3615 3616 3617 3618 3619 3620 3621 3622 3623 3624 3625 3626 3627 3628 3629 3630 3631 3632 3633 3634 3635 3636 3637 3638 3639 3640 3641 3642 3643 3644 3645 3646 3647 3648 3649 3650 3651 3652 3653 3654 3655 3656 3657 3658 3659 3660 3661 3662 3663 3664 3665 3666 3667 3668 3669 3670 3671 3672 3673 3674 3675 3676 3677 3678 3679 3680 3681 3682 3683 3684 3685 3686 3687 3688 3689 3690 3691 3692 3693 3694 3695 3696 3697 3698 3699 3700 3701 3702 3703 3704 3705 3706 3707 3708 3709 3710 3711 3712 3713 3714 3715 3716 3717 3718 3719 3720 3721 3722 3723 3724 3725 3726 3727 3728 3729 3730 3731 3732 3733 3734 3735 3736 3737 3738 3739 3740 3741 3742 3743 3744 3745 3746 3747 3748 3749 3750 3751 3752 3753 3754 3755 3756 3757 3758 3759 3760 3761 3762 3763 3764 3765 3766 3767 3768 3769 3770 3771 3772 3773 3774 3775 3776 3777 3778 3779 3780 3781 3782 3783 3784 3785 3786 3787 3788 3789 3790 3791 3792 3793 3794 3795 3796 3797 3798 3799 3800 3801 3802 3803 3804 3805 3806 3807 3808 3809 3810 3811 3812 3813 3814 3815 3816 3817 3818 3819 3820 3821 3822 3823 3824 3825 3826 3827 3828 3829 3830 3831 3832 3833 3834 3835 3836 3837 3838 3839 3840 3841 3842 3843 3844 3845 3846 3847 3848 3849 3850 3851 3852 3853 3854 3855 3856 3857 3858 3859 3860 3861 3862 3863 3864 3865 3866 3867 3868 3869 3870 3871 3872 3873 3874 3875 3876 3877 3878 3879 3880 3881 3882 3883 3884 3885 3886 3887 3888 3889 3890 3891 3892 3893 3894 3895 3896 3897 3898 3899 3900 3901 3902 3903 3904 3905 3906 3907 3908 3909 3910 3911 3912 3913 3914 3915 3916 3917 3918 3919 3920 3921 3922 3923 3924 3925 3926 3927 3928 3929 3930 3931 3932 3933 3934 3935 3936 3937 3938 3939 3940 3941 3942 3943 3944 3945 3946 3947 3948 3949 3950 3951 3952 3953 3954 3955 3956 3957 3958 3959 3960 3961 3962 3963 3964 3965 3966 3967 3968 3969 3970 3971 3972 3973 3974 3975 3976 3977 3978 3979 3980 3981 3982 3983 3984 3985 3986 3987 3988 3989 3990 3991 3992 3993 3994 3995 3996 3997 3998 3999 4000 4001 4002 4003 4004 4005 4006 4007 4008 4009 4010 4011 4012 4013 4014 4015 4016 4017 4018 4019 4020 4021 4022 4023 4024 4025 4026 4027 4028 4029 4030 4031 4032 4033 4034 4035 4036 4037 4038 4039 4040 4041 4042 4043 4044 4045 4046 4047 4048 4049 4050 4051 4052 4053 4054 4055 4056 4057 4058 4059 4060 4061 4062 4063 4064 4065 4066 4067 4068 4069 4070 4071 4072 4073 4074 4075 4076 4077 4078 4079 4080 4081 4082 4083 4084 4085 4086 4087 4088 4089 4090 4091 4092 4093 4094 4095 4096 4097 4098 4099 4100 4101 4102 4103 4104 4105 4106 4107 4108 4109 4110 4111 4112 4113 4114 4115 4116 4117 4118 4119 4120 4121 4122 4123 4124 4125 4126 4127 4128 4129 4130 4131 4132 4133 4134 4135 4136 4137 4138 4139 4140 4141 4142 4143 4144 4145 4146 4147 4148 4149 4150 4151 4152 4153 4154 4155 4156 4157 4158 4159 4160 4161 4162 4163 4164 4165 4166 4167 4168 4169 4170 4171 4172 4173 4174 4175 4176 4177 4178 4179 4180 4181 4182 4183 4184 4185 4186 4187 4188 4189 4190 4191 4192 4193 4194 4195 4196 4197 4198 4199 4200 4201 4202 4203 4204 4205 4206 4207 4208 4209 4210 4211 4212 4213 4214 4215 4216 4217 4218 4219 4220 4221 4222 4223 4224 4225 4226 4227 4228 4229 4230 4231 4232 4233 4234 4235 4236 4237 4238 4239 4240 4241 4242 4243 4244 4245 4246 4247 4248 4249 4250 4251 4252 4253 4254 4255 4256 4257 4258 4259 4260 4261 4262 4263 4264 4265 4266 4267 4268 4269 4270 4271 4272 4273 4274 4275 4276 4277 4278 4279 4280 4281 4282 4283 4284 4285 4286 4287 4288 4289 4290 4291 4292 4293 4294 4295 4296 4297 4298 4299 4300 4301 4302 4303 4304 4305 4306 4307 4308 4309 4310 4311 4312 4313 4314 4315 4316 4317 4318 4319 4320 4321 4322 4323 4324 4325 4326 4327 4328 4329 4330 4331 4332 4333 4334 4335 4336 4337 4338 4339 4340 4341 4342 4343 4344 4345 4346 4347 4348 4349 4350 4351 4352 4353 4354 4355 4356 4357 4358 4359 4360 4361 4362 4363 4364 4365 4366 4367 4368 4369 4370 4371 4372 4373 4374 4375 4376 4377 4378 4379 4380 4381 4382 4383 4384 4385 4386 4387 4388 4389 4390 4391 4392 4393 4394 4395 4396 4397 4398 4399 4400 4401 4402 4403 4404 4405 4406 4407 4408 4409 4410 4411 4412 4413 4414 4415 4416 4417 4418 4419 4420 4421 4422 4423 4424 4425 4426 4427 4428 4429 4430 4431 4432 4433 4434 4435 4436 4437 4438 4439 4440 4441 4442 4443 4444 4445 4446 4447 4448 4449 4450 4451 4452 4453 4454 4455 4456 4457 4458 4459 4460 4461 4462 4463 4464 4465 4466 4467 4468 4469 4470 4471 4472 4473 4474 4475 4476 4477 4478 4479 4480 4481 4482 4483 4484 4485 4486 4487 4488
|
The Linux Modem-HOWTO
David S.Lawyer
<mailto:bf347@lafn.org>
Aiuto per selezionare, connettere, configurare, risolvere problemi e
comprendere i modem in un PC. Vedere il Serial-HOWTO per dispositivi
seriali multiporta.
1. Introduzione
1.1. Modem DSL, Cable e ISDN in altri HOWTO
Questo documento riguarda i modem convenzionali per PC, principalmente
modem sul bus ISA (sebbene la maggior parte del contenuto si possa
applicare anche al bus PCI)
modem DSL: vedere il mini-howto ADSL
Cable-Modems-HOWTO (un tempo un mini-Howto di LDP)
<http://www.cs.unm.edu/~vuksan/linux/Cable-Modem.html>
ISDN Howto (non un HOWTO di LDP)
<http://sdb.suse.de/sdb/en/html/isdn.html>: driver per "Modem"
ISDN. La maggior parte delle informazioni correlate sono in
tedesco.
1.2. Non compresi: Modem PCMCIA, PPP
Per i modem sul bus PCMCIA vedere il PCMCIA-HOWTO: dispositivi PCMCIA
seriali e modem. Questo HOWTO non tratta PPP (usato per connettersi ad
Internet via modem) o programmi di comunicazione. Mostra per come
usare programmi di comunicazione per verificare che il vostro modem
funzioni bene e possa eseguire delle chiamate telefoniche. Se volete
usare un modem per connettervi ad Internet allora dovete impostare
PPP. C' parecchia documentazione per PPP (incluso un PPP-HOWTO) ma
potrebbe essere obsoleta o non applicabile alla vostra situazione.
Parte di questa potrebbe essere trovata in /usr/doc/ppp o simile.
1.3. Copyright, Liberatoria, Marchi registrati e Crediti
1.3.1. Copyright (in lingua originale)
Copyright (c) 1998-99 di David S. Lawyer Please freely copy and
distribute (sell or give away) this document. You may create
derivative works and distribute it provided:
1. For a translation just let the maintainer know about it.
2. For a non-translation, discuss it with the maintainer (if it is
being maintained). If after due deliberation no agreement with the
maintainer can be reached, then you may proceed with the derivative
work without the maintainer's approval.
3. Send your derivative work to the LDP (or the like) for posting on
the Internet. If not the LDP, then let the LDP know where it is
available.
4. License the derivative work in the spirit of this license or use
GPL.
5. Give due credit to previous authors and major contributors.
1.3.2. Liberatoria
Sebbene 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 io
non posso essere ritenuto legalmente responsabile per qualsiasi
errore.
1.3.3. Marchi registrati
Se certe parole sono dei marchi registrati, il contesto dovrebbe
mettere in evidenza a chi appartengono. Per esempio "MS Windows" (o
semplicemente "Windows") implica che "Windows" appartiene a Microsoft
(MS). "Hayes" un marchio registrato dalla Microcomputer Products
Inc. Uso "winmodem" per indicare qualsiasi modem che richiede MS-
Windows e non nel senso di un marchio.
1.3.4. Crediti
Quanto segue solamente una rozza approssimazione di come stata
creata la versione 0.0 di questo documento: circa 1/3 del materiale
qui presente stato preso tale quale dal Serial HOWTO versione 1.11
di Greg Hankins <mailto:gregh@cc.gatech.edu> (con il suo permesso).
Circa un'altro terzo stato preso sempre dal Serial HOWTO e
revisionato. Il restante terzo stato creato ex-novo dall'autore
David S. Lawyer <mailto:bf347@lafn.org>.
1.4. Contattare l'Autore
Per favore non mandatemi e-mail chiedendomi quale modem acquistare o
se un certo modem funzioner sotto Linux. Cercate nella vasta lista in
``Evitare: winmodem''. Inoltre, per favore non chiedetemi come
configurare un modem a meno che abbiate gi scorso questo HOWTO e non
ci siate ancora riusciti.
Per favore fatemi sapere circa qualsiasi errore in fatti, opinioni,
logica, grammatica, chiarezza, link, ecc. Ma per prima cosa, se la
data pi vecchia di un mese, controllate di avere l'ultima versione.
Per cortesia inviatemi qualsiasi altra informazione che pensate possa
appartenere a questo documento.
1.5. Nuove versioni di questo HOWTO
Nuove versioni del Modem-HOWTO escono ogni mese o quasi visto che la
situazione dei modem va rapidamente cambiando (e visto che sto ancora
imparando). I vostri problemi potrebbero essere risolti nell'ultima
versione. Sar disponibile da consultare e/o scaricare nei siti mirror
di LDP. Per una lista di tali siti vedere
<http://sunsite.unc.edu/LDP/mirrors.html>. Se volete solo controllare
velocemente la data dell'ultima versione potreste non volere usare un
sito mirror, cos controllate:
<http://sunsite.unc.edu/LDP/HOWTO/Modem-HOWTO.html>.
1.6. Cos' un Modem ?
Un modem un dispositivo che consente di inviare segnali digitali
attraverso una normale linea telefonica non predisposta per segnali
digitali. Se le linee telefoniche fossero tutte digitali un modem non
sarebbe necessario. Esso consente al proprio computer di connettersi e
comunicare con il resto del mondo. Quando si usa un modem, in genere
si usa un programma di comunicazione, un browser web (che include un
programma di comunicazione) per utilizzare il modem ed immettersi
nella linea telefonica. Utenti esperti possono fare in modo che altri
utenti siano in grado di connettersi tramite linea telefonica al loro
computer ed usarlo. Questa procedura si chiama "dial-in".
Ci sono due tipi principali di modem per un PC: esterni ed interni.
Quelli esterni si collocano all'esterno del PC mentre quelli interni
sono inseriti all'interno e non si vedono. I modem esterni si
collegano al PC tramite una "porta seriale" situata nel retro del PC.
Il modem interno una scheda che si inserisce dentro al computer ed
ha una "invisibile" porta seriale incorporata. Per un confronto pi
dettagliato vedere ``Esterno contro Interno''. Quindi quando si
dispone di un modem interno, si dispone anche di una porta seriale
dedicata (detta porta pu quindi essere usata solo con il modem e non
con qualsiasi altro dispositivo tipo un altro modem od una stampante).
In Linux, le porte seriali sono chiamate ttyS0, ttyS1, etc. (e
corrispondono in genere rispettivamente a COM1, COM2, etc. in
Dos/Windows).
Non si deve confondere la porta seriale con l'"Universal Serial Bus"
(USB) che usa uno speciale connettore modulare e potrebbe essere usato
con i modem in futuro. Vedere ``Modem e Porte seriali: Nozioni di
base'' per ulteriori dettagli sui modem e le porte seriali.
I modem spesso includono la capacit di inviare fax (Fax Modem).
Vedere ``Fax'' per una lista di software per i fax. I "Voice" modem
possono funzionare come una segreteria telefonica e gestire voicemail.
Vedere ``Voicemail''.
1.7. Installazione rapida
1.7.1. Installazione di modem esterni
Con un cavo passante o modem, connettere il modem ad una porta seriale
del PC. Assicurarsi di conoscere il nome della porta seriale: nella
maggior parte dei casi COM1 ttyS0, COM2 ttyS1 ecc. Potrebbe
essere necessario consultare il men delle impostazioni del BIOS per
determinarlo. Collegare il cavo di alimentazione per dare corrente al
modem. Vedere ``Per tutti i modem'' per successive istruzioni.
1.7.2. Modem interni (su bus ISA )
(Per il bus PCI vedere ``Bus PCI non ancora ben supportati'' e ``Modem
PCI''.) Se il modem dice che funzioner solo sotto MS Windows, siete
sfortunati. Se si hanno gi due porte seriali, rendete il modem quale
terza porta seriale (ttyS2 = COM3). Cercare un numero di IRQ libero
da usare. Nel passato IRQ5 era spesso non usato ma oggi IRQ 5 usato
anche dalle schede audio. Poi impostare i ponticelli ("jumper") (o
simili) del modem interno all'IRQ libero e all'indirizzo di IO 3E8
(ttyS2).
"O simili" (nella frase precedente) pu essere un poco pi difficile.
Se il modem ha un Plug and Play (PNP) per il bus ISA, possiamo ovviare
usando il programma "isapnp" che incluso negli "isapnptools". Vedere
"man isapnp" o la FAQ per esso. Vedere anche "Plug-and-play HOWTO".
Con un BIOS PnP, dovreste essere in grado di dire al men di
impostazione del CMOS che non avete un sistema operativo PNP e
successivamente il BIOS potrebbe impostare un corretto IRQ e indirizzo
di I/O nella scheda del modem. Una volta credevo che se si configurava
il modem sotto Windows 9x, allora Windows sarebbe stato gentile ed
avrebbe messo le informazioni di configurazione (IRQ ed indirizzo IO)
nella memoria flash del BIOS, cos che sarebbero potute essere usate
dal BIOS ogniqualvolta si faccia partire Linux. Ma potrebbe non
accadere questo, quindi provate a farlo solo come ultima risorsa.
Potreste provare ad usare l'utilit ICU sotto Windows. Potrebbe
esserci anche il modo di disabilitare PnP usando del software (sotto
Windows) provvisto con il modem.
Infine si deve anche cercare il file dove viene lanciato "setserial"
ed aggiungere una riga che potrebbe essere qualcosa come: "setserial
/dev/ttyS2 irq5". Eccetto che per setserial v2.15 e successivi
potreste (se la vostra distribuzione ve lo consente) semplicemente
lanciare "setserial" da riga di comando ed il risultato sar salvato
in un file di configurazione. Vedere ``Cos' setserial'' per maggiori
informazioni. Vedere la successiva sottosezione ``Per tutti i Modem''
per ulteriori istruzioni per una veloce installazione
1.7.3. Per tutti i modem
Collegare il modem alla linea telefonica. Poi lanciare un programma di
comunicazione tipo minicom ed aprire il menu di configurazione per la
porta seriale. Assegnare una velocit di trasmissione (baud rate)
alcune volte maggiore del bit rate del proprio modem. Vedere ``Tabella
delle velocit'' per la velocit ideale da usare. Fornire il nome
completo della porta seriale tipo /dev/ttyS1. Impostare il controllo
di flusso hardware (RTS/CTS). Ora occorre salvare le impostazioni ed
uscire da minicom. Poi rilanciare minicom, digitare AT per vedere se
il vostro modem l e risponde con OK. Poi portarsi nell'elenco dei
numeri da selezionare (dial directory) (o menu) e comporre un numero.
2. Modem e porte seriali: nozioni di base
Non occorre capire le fondamenta per usare ed installare un modem. Ma
esserne a conoscenza pu aiutare a capire cosa c' che non va quando
sorgono dei problemi. Dopo avere letto questa sezione, se si vuole
approfondire, conviene consultare la sezione ``Come funzionano i
modem'' in questo documento (ancora incompleta). Maggiori dettagli
sulla porta seriale (inclusa la maggior parte di questa sezione) potr
essere trovata in Serial-HOWTO.
2.1. Il Modem converte da digitale ad analogico (e viceversa)
La maggior parte delle principali linee telefoniche sono gi digitali
ma le linee che portano presso la vostra abitazione (o posto di
lavoro) sono generalmente analogiche, il che vuol dire che sono state
predisposte per trasmettere un'onda elettrica che l'esatta replica
dell'onda sonora generata dalla vostra voce. Un'onda elettrica di
questo tipo chiamata "analogica". Se vista in un oscilloscopio
sembra una curva sinusoidale di varia frequenza ed ampiezza. Un
segnale digitale assume invece una forma squadrata. Ad esempio 3 v
(volt) potrebbe essere un bit con valore 1, e 0 v potrebbe
corrispondere ad un bit di valore 0. Per la maggior parte delle porte
seriali (usate dai modem esterni) +12 v equivale ad un bit 0, e -12 v
ad un bit 1 (alcune porte hanno valori di + o - 5 v).
Per inviare dati dal proprio computer attraverso la linea telefonica,
il modem acquisisce il segnale digitale dal computer e lo converte in
"analogico". Lo fa prima creando un'onda sinusoidale analogica, quindi
"MODulandola". Visto che il risultato rappresenta comunque un dato
digitale, potrebbe anche chiamarsi segnale digitale invece che
analogico. Ma assomiglia ad un segnale analogico e quasi tutti lo
chiamano analogico. Dall'altro capo della linea telefonica un altro
modem "DEModula" questo segnale recuperando il segnale puro digitale
originale. Mettete insieme l'inizio delle due parole sopracitate:
"mod" e "dem" ed ecco l'origine della parola "modem" (ovviamente
dovete togliere una delle due "d"). Un "modem" quindi un MODulatore-
DEModulatore. Per sapere cos' la modulazione occorre consultare la
sezione ``La modulazione in dettaglio''.
2.2. Cos' una porta seriale?
2.2.1. Introduzione alla seriale
La porta seriale un dispositivo di I/O (Input/Output).
Visto che i modem hanno una porta seriale frapposta tra loro ed il
computer, necessario conoscere la porta seriale cos come il modem.
La porta seriale un dispositivo di IO (Inupt/Output). La maggior
parte dei PC hanno due porte seriali. Ciascuna ha un connettore a 9
pin (talvolta a 25 pin) sul retro del computer. I programmi per
computer possono inviare dati (byte) al pin di trasmissione (output) e
ricevere dati dal pin di ricezione (input). Gli altri pin servono per
controlli e per la messa a terra.
La porta seriale molto di pi che un semplice connettore. Essa
converte i dati da paralleli a seriali e cambia la rappresentazione
elettrica dei dati. All'interno del computer, i bit di dati scorrono
parallelamente (usando diversi cavi allo stesso tempo). Il flusso
seriale uno scorrere di dati attraverso un solo cavo (cos come sul
pin di trasmissione e ricezione del connettore seriale). Perch la
porta seriale possa creare un flusso di questo tipo, deve convertire i
dati da paralleli (all'interno del PC) a seriali (e viceversa).
La maggior parte dell'elettronica della porta seriale si trova in un
chip del computer (o in una sezione di un chip) conosciuto come UART.
Per maggiori dettagli sugli UART consultare la sezione ``Cosa sono gli
UART? In che modo influenzano le prestazioni?'' Ma potreste volere
prima finire questa sezione, cos da poter meglio capire come l'UART
si pone all'interno dello schema globale delle cose.
2.2.2. Pin e cavi
I vecchi PC usavano connettori a 25 pin ma in realt se ne usano circa
9, per cui la maggior parte dei connettori attuali sono di soli 9 pin.
Ognuno dei quali generalmente connesso ad un cavo. Oltre ai due cavi
usati per ricevere e trasmettere i dati, un altro pin (cavo) la
messa a terra. Il voltaggio di ogni cavo misurato in relazione al
cavo di terra. Quindi il numero minimo di cavi da usare per una
trasmissione bilaterale di dati 3. possibile anche fare a meno del
segnale di terra ma con degradate prestazioni e talvolta con errori.
Ci sono altri cavi che servono per effettuare solo dei controlli
(invio di segnali) e non per inviare byte. Tutti questi segnali
potrebbero essere condivisi da un unico cavo, ma, al contrario, esiste
un cavo separato dedicato ad ogni tipo di segnale. Alcuni (o tutti)
questi cavi di controllo sono chiamati "linee di controllo del modem".
Questi cavi di controllo sono impostati (on) a +12 volt oppure nello
stato negativo (off) a -12 v. Uno di questi cavi segnala al computer
di interrompere l'invio di dati attraverso la porta seriale. Al
contrario, un altro cavo segnala al dispositivo connesso alla porta
seriale di interrompere l'invio di dati al computer. Se il
dispositivo connesso un modem, altri cavi possono segnalare al modem
di appendere la comunicazione o dire al computer che la connessione
alla linea telefonica stata effettuata o che il telefono sta
squillando (cio qualcuno sta tentando di connettersi). Vedere il
Serial-HOWTO: Pinout and Signals per ulteriori dettagli
2.2.3. Il modem interno contiene una porta seriale
Per un modem interno non si sono connettori a 9 pin, ma il
comportamento quasi esattamente come se i cavi summenzionati
esistessero. Invece di un segnale a 12 volt attraverso un cavo che
porta lo stato di una linea di controllo del modem, il modem interno
usa semplicemente un bit di stato nella propria memoria (un registro)
per determinare lo stato di questo cavo "virtuale". La porta seriale
dei modem interno vista dal computer proprio come una porta seriale
reale. Ivi inclusi anche i limiti di velocit che si possono impostare
nelle porte seriali ordinarie come ad esempio 115200 bit per secondo.
Sfortunatamente per Linux molti modem interni attuali non funzionano
esattamente in questo modo ma invece usano un software MS Windows che
li aiuta a svolgere il proprio compito. Essi non funzionaneranno
sotto Linux. Vedere ``Modem interni da evitare: Winmodem, ecc. ''.
2.3. Indirizzi IO & IRQ
Poich il computer deve comunicare con ciascuna porta seriale, il
sistema operativo deve sapere che ciascuna porta seriale esiste e dove
essa si trovi (il suo indirizzo di I/O). Esso deve anche conoscere
quale cavo (numero di IRQ) deve usare la porta seriale per richiedere
i servizi della CPU del PC. Quindi ogni dispositivo di porta seriale
deve immagazzinare nella propria memoria non volatile sia l'indirizzo
di I/O che il suo Interrupt reQuest Number: IRQ. Vedere ``Interrupt''.
Il bus PCI non funziona esattamente in questo modo visto che il bus
PCI ha il suo proprio sistema di interrupt. Ma, visto che il BIOS che
riconosce il PCI imposta i chip per mappare questi interrupt PCI come
IRQ, praticamente si comporta proprio come descritto qui sopra ad
eccezione del fatto che la condivisione degli interrupt concessa (2
o pi dispositivi possono usare lo stesso numero di IRQ).
Gli indirizzi I/O non sono uguali agli indirizzi di memoria. Quando un
indirizzo I/O viene immesso nel bus indirizzi (address bus) del
computer, un altro cavo viene elettrificato. Questo dice sia alla
memoria principale di ignorare l'indirizzo, che a tutti i dispositivi
che hanno indirizzi I/O (come le porte seriali) di controllare
quell'indirizzo per vedere se combacia con quello del dispositivo. Se
c' corrispondenza, allora il dispositivo di I/O legge il dato sul bus
dati.
2.4. Nome: ttyS0, ttyS1, ecc.
Le porte seriali sono etichettate come ttyS0, ttyS1, ecc.
(generalmente corrispondenti a COM1, COM2, ecc. in DOS/Windows). La
directory /dev ha un file speciale per ogni porta. Digitate "ls
/dev/ttyS*" per vederli. Il fatto che possa esistere (ad esempio) un
file ttyS3, non significa necessariamente che esista anche una
corrispondente porta seriale fisica. Quale di questi nomi (ttyS0,
ttyS1, ecc.) si riferisca a quale porta seriale viene determinato come
segue. Il driver seriale (software) mantiene una tabella che mostra
quale indirizzi I/O corrisponde a quale ttyS. Questa mappatura di nomi
(tipo ttyS1) riferita a indirizzi I/O (e IRQ) pu essere sia impostata
che verificata dal comando "setserial". Vedere ``Cos' Setserial''.
Questo non imposta gli indirizzi di IO e di IRQ sull'hardware stesso
(che impostato invece dai ponticelli o tramite software plug-and-
play). Quindi quale porta fisica corrisponda ad esempio a ttyS1
dipende sia da quello che il driver della seriale pensa (tramite
setserial) che da quello che impostato nell'hardware. Se viene fatto
un errore, la porta fisica potrebbe non corrispondere ad alcun nome
(tipo ttyS2) e quindi con pu essere usata. Vedere ``Dispositivi di
porta seriale /dev/ttyS2, ecc.'' per ulteriori dettagli.
2.5. Interrupt
I byte entrano dalla linea telefonica al modem, sono converiti da
analogico a digitale dal modem, quindi passati attraverso la porta
seriale verso la loro destinazione all'interno del vostro computer.
Quando la porta seriale riceve un certo numero di byte (potrebbe
essere impostata a 1, 4, 8 o 14) nel suo buffer FIFO, segnala alla CPU
di recuperarli inviando un segnale elettrico noto come interrupt su di
certo cavo generalmente usato solo da quella porta. Quindi il FIFO
attende un certo numero di byte quindi genera un interrupt.
Comunque questo interrupt potrebbe anche essere inviato se c' un
inaspettato ritardo mentre si attende l'arrivo del prossimo byte
(conosciuto come timeout). Quindi se i byte sono ricevuti lentamente
(come ad esempio se qualcuno digita su una tastiera di terminale)
potrebbe essere generato un interrupt per ogni byte ricevuto. Per
alcuni chip UART la regola questa: se si possono ricevere 4 byte di
seguito, ma nessuno di questi 4 arriva, allora la porta smette di
aspettare altri byte ed invia un interrupt per recuperare i byte
attualmente nel FIFO. Naturalmente, se il FIFO vuoto, non verr
inviato nessun interrupt.
Ogni interrupt (all'interno del computer) contraddistinto da un
numero (IRQ) e la porta seriale deve sapere quale conduttore usare per
inviare il segnale. Ad esempio, ttyS0 normalmente usa l'IRQ n. 4
conosciuto come IRQ4 (o IRQ 4). Una lista di questi interrupt ed
altro pu essere trovata in "man setserial" (cercare "Configuring
Serial Ports"). Gli interrupt sono inviati ogniqualvolta la porta
seriale necessiti di ricevere l'attenzione della CPU. importante
fare questo periodicamente poich il buffer all'interno della porta
seriale pu trattenere solo 16 (1 nelle vecchie porte seriali) byte in
arrivo. Se la CPU non riesce a rimuovere prontamente i byte ricevuti,
poi non esiste pi spazio libero per gli altri che stanno arrivando ed
il piccolo buffer potrebbe sovraccaricarsi generando una perdita di
byte di dati.
Per un modem esterno non c' nessun modo (tipo controllo di flusso)
per interrompere il flusso abbastanza rapidamente da prevenire questo.
Per un modem interno il buffer FIFO a 16 byte si trova sulla stessa
scheda ed un buon modem non ci andr a scrivere se questo pieno.
Quindi un buon modem interno non sovraccaricher il buffer da 16 byte
ma potrebbe avere bisogno di usare ``Controllo di flusso da modem a
modem'' per evitare che il modem stesso vada in sovraccarico. Questo
rappresenta un vantaggio del modem interno rispetto ad un esterno.
Gli interrupt sono inviati anche quando la porta seriale ha appena
mandato 16 dei suoi byte dal piccolo buffer di trasmissione verso il
cavo esterno. In questo modo si fa spazio per 16 successivi byte da
inviare all'esterno. L'interrupt notifica alla CPU il fatto cos che
si possano immettere ulteriori byte nel piccolo buffer di trasmissione
per essere inviati. Ancora, quando una linea di controllo del modem
cambia il proprio stato, viene inviato un interrupt. I buffer sopra
menzionati sono tutti buffer hardware. La porta seriale ha anche degli
ampi buffer nella memoria principale. Questo verr spiegato pi tardi.
Gli interrupt veicolano molte informazioni ma solo indirettamente.
L'interrupt propriamente detto semplicemente dice ad un chip chiamato
interrupt controller che una certa porta seriale necessita attenzione.
L'interrupt controller poi invia il segnale alla CPU. La CPU attiva
uno speciale programma per servire la porta seriale. Il programma
viene chiamato routine di servizio di interrupt (interrupt service
routine) che parte del software del dispositivo seriale. Esso cerca
di scoprire cosa successo alla porta seriale, quindi svolge il
compito come ad esempio il trasferimento di byte da (per) il buffer
hardware della porta. Questo programma pu facilmente scoprire cosa
accaduto poich la porta seriale ha dei registri che puntano indirizzi
di I/O conosciuti dal software del driver seriale. Questi registri
contengono informazioni sullo stato della porta seriale. Il software
legge questi registri e ispezionandone il contenuto, scopre cosa
accaduto, quindi esegue l'azione appropriata.
2.6. Compressione di dati (da parte del Modem)
Prima di continuare con le nozioni di base sulla porta seriale,
occorre capire una certa cosa fatta dal modem: la compressione dei
dati. In alcuni casi questo compito in realt svolto dal software
gestito dalla CPU del computer ma, sfortunatamente, al momento attuale
questo software funzione solamente in ambiente MS Windows. Ci
occuperemo quindi del caso in cui il modem stesso esegue la
compressione poich questo quello che accade cos che il modem possa
funzionare in ambiente Linux.
Per inviare dati pi velocemente attraverso le linee telefoniche uno
potrebbero comprimere (codificare) i dati usando uno schema di
codifica personalizzato, che esso stesso dipende dai dati. Il dato
codificato pi piccolo dell'originale (meno byte) e pu essere
inviato attraverso Internet in minore tempo. Questo processo
chiamato "compressione di dati".
Se scaricate file da Internet, essi sono probabilmente gi compressi e
non possibile per il modem tentare di comprimerli ulteriormente. Il
vostro modem pu riconoscere che quelli che stanno transitando sono
dati gi compressi ed astenersi dal tentare di comprimerli ancora. Se
state ricevendo dati che sono stati gi compressi dall'altro modem, il
vostro modem li decomprimer e creer molti pi byte di quelli che
sono stati spediti attraverso la linea telefonica. Quindi il flusso di
dati dal vostro modem all'interno del vostro computer sar maggiore di
quello dalla linea telefonica verso di voi. Il rapporto di questo
flusso viene chiamato rapporto di compressione. Rapporti di
compressione superiori a 4 sono possibili, ma non molto probabili.
2.7. Correzione d'errore
Analogamente alla compressione dati, i modem potrebbero essere
impostati per eseguire una correzione d'errore. Sebbene questo
comporti un abbassamento del flusso di byte/secondo, il fatto che
questa correzione d'errore tolga i bit di inizio e fine in realt
accresce il flusso di bit/secondo.
Per l'interfaccia della porta seriale con il mondo esterno, ogni byte
composto da 8 bit ha 2 ulteriori bit aggiunti ad esso: un bit di
inizio e un bit di stop. Senza la correzione di errore, questi bit di
inizio e stop extra generalmente passano attraverso il modem verso la
linea telefonica. Ma quando la correzione d'errore attivata, questi
bit extra sono eliminati e i byte di 8 bit sono composti in pacchetti.
Questo pi efficiente e genera un flusso di bit/secondo pi alto a
dispetto del fatto che c' qualche ulteriore byte aggiunto per
l'intestazione dei pacchetti e per la correzione degli errori
2.8. Flusso di dati (velocit)
I dati (byte che rappresentano caratteri, immagini, ecc.) passano dal
vostro computer al vostro modem, quindi all'esterno verso la linea
telefonica (e viceversa). I rapporti di flusso (come ad esempio 56k
(56000) bit/secondo) sono chiamati (non correttamente) "velocit". Ma
quasi tutti dicono "velocit" al posto di "rapporto di flusso". Se non
c' compressione di dati il rapporto di flusso dal computer al modem
dovrebbe essere circa lo stesso di quello che passa attraverso la
linea telefonica.
In realt ci sono due differenti velocit da considerare al vostro
capo della linea telefonica.
La velocit della linea telefonica stessa (velocit DCE) da modem-
a-modem
La velocit dalla porta seriale del vostro computer al vostro modem
(velocit DTE)
Quando si compone un numero per connettersi ad un altro modem
all'altro capo della linea telefonica, il vostro modem spesso
visualizza un messaggio tipo "CONNECT 28800" oppure "CONNECT 115200".
Cosa significa?. B, potrebbe essere sia la velocit DCE che quella
DTE. Se essa maggiore di quella delle specifiche del modem, allora
deve trattarsi della velocit da-modem-a-computer (DTE). Questo
l'esempio di "CONNECT 115200" mostrato in precedenza. 28800 deve
trattarsi invece della velocit da-modem-a-modem (DCE) visto che la
porta seriale non ha questa velocit. Si potrebbe configurare il modem
perch possa visualizzare entrambe le velocit. Alcuni modem
visualizzano entrambe le velocit e visualizzano la velocit da modem-
a-modem come (ad esempio): CARRIER 28800
Se avete un modem interno non vi aspettereste che ci sia un limite di
velocit DTE dal vostro modem al vostro computer visto che il modem
risiede all'interno del computer ed praticamente una parte di esso.
Ma questo limite c' visto che il modem contiene al suo interno una
porta seriale dedicata.
importante capire che la velocit media spesso minore di quella
specificata, specialmente nella corta linea DTE (dal computer a
modem). Attese (o tempi morti) generano una minore velocit media.
Queste attese possono essere lunghe attese di forse un secondo a causa
del ``Controllo di flusso''. Di contro le attese possono anche essere
molto brevi (tempi morti) corrispondenti a diversi micro-secondi che
separano la fine di un byte e l'inizio dell'altro. In pi, i modem
passano a velocit inferiori se le condizioni della linea telefonica
sono meno che perfette. Per una discussione riguardo quale sia la
migliore velocit DTE vedere la sezione ``Quale velocit dovrei
usare''.
2.9. Controllo di flusso
Il controllo di flusso la capacit di fermare il flusso dei byte in
un cavo. Deve anche provvedere a fare ripartire il flusso senza
perdere byte. Il controllo di flusso necessario ai modem per
consentire un salto nei rapporti di velocit.
2.9.1. Esempio di controllo di flusso
Ad esempio, consideriamo il caso in cui voi connettiate il vostro
modem esterno a 36.6k tramite un corto cavo alla vostra porta seriale.
Il modem invia e riceve byte attraverso la linea telefononica e 36.6k
bit per secondo (bps). Non esegue nessuna compressione dati o
correzione di errore. Voi avete impostato la velocit della porta
seriale a 115,200 bit/secondo (bps) e state inviando dati dal vostro
computer alla linea telefonica. Quindi il flusso dal vostro computer
al vostro modem attraverso il corto cavo di 115.2k bps. In ogni caso
il flusso da modem verso la linea telefonica solo di 33.6k. Visto
che il flusso di dati (115.2k) sta entrando nel modem pi velocemente
del flusso di dati in uscita, il modem deve conservare il flusso in
eccesso (115.2k -33.6k = 81.6k) in uno dei suoi buffer. Questo buffer
andrebbe fatalmente in sovraccarico (esaurirebbe lo spazio a
disposizione) a meno che il flusso a 115.2k venga interrotto.
Ecco che il controllo di flusso viene in soccorso. Quando il buffer
del modem quasi pieno, il modem invia un segnale di stop alla porta
seriale. La porta seriale passa il segnale di stop al device driver ed
il flusso a 115.2k bps viene fermato. Intanto il modem continua ad
inviare dati a 33.6k bps recuperando i dati precedentemente accumulati
nei suoi buffer. Visto che ora non sta arrivando niente nel buffer,
il livello di byte inizia a diminuire. Quando non sono rimasti che
pochi byte nel buffer, il modem invia un segnale di partenza alla
porta seriale ed il flusso a 115.2k dal computer al modem riprende. In
effetti, il controllo di flusso crea un rapporto di flusso medio (in
questo caso 33.6k) che significativamente inferiore a quello in
entrata di 115.2k bps. Questo il controllo di flusso "start-stop".
Quello di cui sopra un semplice esempio di flusso di controllo per
il flusso da computer al modem, ma esiste anche il controllo di flusso
usato nella direzione opposta: dal modem (od altro dispositivo) al
computer. Ogni direzione di flusso coinvolge 3 buffer: 1. quello nel
modem 2. quello nel chip UART (detto FIFO) 3. nella memoria
principale, gestito dal driver seriale. Il controllo di flusso
protegge alcuni buffer dal rischio di sovraccarico. I piccoli buffer
UART FIFO non sono protetti in questo modo ma dipendono invece da una
veloce risposta agli interrupt che essi generano. FIFO significa
"First In First Out" (il primo che entra il primo che esce) e
rappresenta quindi il modo in cui vengono gestiti i byte. Tutti e 3 i
buffer usano la regola FIFO ma solo uno di essi si identifica anche
con questo nome. Questa l'essenza del controllo di flusso ma ci sono
ancora ulteriori dettagli.
Non dovreste averne bisogno spesso del controllo di flusso nella
direzione modem - PC. Per un complesso esempio di un caso dove
richiesto vedere "Complex Flow Control Example" nel Serial-HOWTO. Ma
se non avete una velocit impostata tra il modem ed il computer
(velocit della porta seriale) sufficientemente alta, allora dovrete
rallentare il flusso dal modem al PC. Per fare questo dovete fermare
l'incombente flusso di byte dalla linea telefonica. Il vostro modem
deve dire all'altro modem di interrompere l'invio. Vedere ``Controllo
di flusso da-modem-a-modem''
2.9.2. Controllo di flusso hardware contro il controllo di flusso
software
Se possibile, meglio usare il flusso di controllo "hardware" che usa
due linee dedicate di controllo del modem per inviare i segnali di
"stop" e "start". I modem moderni usano quasi sempre il controllo di
flusso hardware tra il modem e la porta seriale
Il controllo di flusso software usa le linee principali di ricezione e
trasmissione per inviare i segnali di start e stop. Usa i caratteri di
controllo ASCII DC1 (start) e DC3 (stop) a questo scopo. Essi sono
semplicemente inseriti nel regolare flusso di dati. Il controllo di
flusso software non solo pi lento nel reagire ma anche non consente
l'invio di dati binari a meno di prendere speciali preacauzioni. Visto
che probabile che dati binari possano contenere DC1 e DC3,
particolari accorgimenti devono essere presi per distinguere tra un
DC3 che significa uno stop del controllo di flusso ed un DC3 che
parte del codice binario. La stessa cosa per DC1. Per far funzionare
il controllo di flusso software con i dati binari occorre il supporto
sia del modem (hardware) che del software.
2.9.3. Sintomi della mancanza di un controllo di flusso
Conoscere la teoria del controllo di flusso pu essere di uso pratico.
Per esempio usavo il mio modem per accedere ad Internet e tutto
sembrava funzionare bene. Ma dopo alcuni mesi ho provato ad inviare
un grosso file dal mio PC al ISP ottenenendo un grande numero di
errori e ritrasmissioni (ma alla fine con Kermit sono riuscito a
spedire un grosso file dopo parecchi tentativi). La ricezione
nell'altra direzione (dal ISP a me) funzionava bene. Il problema
risult essere nella disabilitazione del controllo di flusso. Il
buffer del mio modem si sovraccaricava durante l'invio di grossi file
visto che nessun segnale di "stop" era mai inviato al computer per
interrompere l'invio di dati al modem. Non c'erano problemi nella
direzione dal modem al mio computer visto che la capacit (diciamo
115.2k) era sempre superiore del flusso attraverso la linea
telefonica. La risoluzione consistette nell'abilitare il controllo di
flusso inserendo un comando di attivazione del controllo di flusso
nella stringa di inizializzazione del modem (avrebbe dovuto essere
abilitato per default ma qualcosa era andato storto).
2.9.4. Controllo di flusso da-modem-a-modem
Questo il controllo di flusso dei dati inviati attraverso le linee
telefoniche tra due modem. In pratica, esso esiste solo quando
attivata la correzione di errori. In verit, anche senza correzione di
errore possibile attivare il controllo di flusso software tra modem,
ma esso potrebbe interferire con l'invio di dati binari cos non viene
usato spesso.
2.10. Il percorso del flusso di dati; Buffer
Sebbene sia stato detto molto in proposito, tra cui il controllo di
flusso, un paio di buffer FIFO a 16 byte nelle porte seriali
(nell'hardware) ed un paio di buffer pi ampi all'interno del modem,
esistono ancora un altro paio di buffer. Essi sono degli ampi buffer
(forse di 8k) nella memoria principale conosciuti anche come buffer di
porta seriale. Quando un programma applicativo invia byte alla porta
seriale (e al modem), essi vengono posti prima nel buffer di
trasmissione della porta seriale nella memoria principale. La coppia
consiste in questo buffer di trasmissione ed in quello di ricezione
per il flusso di byte dalla parte opposta.
Il device driver seriale estrae diciamo 16 byte dal buffer di
trasmissione, un byte alla volta e li mette nel buffer di trasmissione
da 16 byte della porta seriale per la trasmissione. Una volta in
questo buffer, non c' modo di impedire che essi vengano trasmessi.
Essi sono poi inviati al modem che dispone anch'esso di un buffer di
dimensioni adeguate (diciamo 1k). Quando il device driver (che riceve
ordini dal controllo di flusso) interrompe il flusso dei byte in
uscita dal computer, interrompe in realt il flusso di byte in uscita
dall'ampio buffer di trasmissione della memoria principale. Anche dopo
che questo accaduto ed il flusso verso il modem stato fermato, un
programma applicativo pu continuare a spedire i byte presenti nel
buffer da 8k fino a che esso non si riempie.
Quando pieno, il programma applicativo non pu inviargli ulteriori
byte (un istruzione di scrittura "write" in un blocco di programma in
C) e l'applicazione si interrompe temporaneamente ed attende fino a
che si libera un poco di spazio nel buffer. Quindi uno stop
esercitato dal controllo di flusso in definitiva capace di fermare
il programma che sta inviando i byte. Anche se questo programma si
interrompe il computer non smette necessariamente di elaborare.
Potrebbe passare ad eseguire altri processi mentre sta aspettando
causa lo stop del controllo di flusso. Quello suindicato era un
esempio ultrasemplificato visto che un'altra alternativa quella di
fare s che il programma applicativo stesso faccia qualcosa d'altro
mentre sta attendendo di "scrivere"
2.11. I comandi del modem
I comandi al modem sono inviati ad esso dal programma di comunicazione
attraverso lo stesso conduttore usato per inviare dati. I comandi sono
delle brevi stringhe ASCII. Esempi sono "AT&K3" per abilitare il
controllo di flusso hardware (RTS/CTS) tra il computer ed il modem; e
"ATDT5393401" serve per comporre il numero 5393401. Notate che tutti i
comandi sono prefissati da "AT". Alcuni comandi come l'attivazione del
controllo di flusso aiutano a configurare il modem. Altri comandi come
il comporre un numero fanno veramente qualcosa. Ci sono circa un
centinaio di differenti possibili comandi. Quando il vostro software
di comunicazione parte, lancia una stringa di inizializzazione "init
string" composta da comandi al modem per configurarlo. Tutti i comandi
sono inviati sulla linea ordinaria dei dati prima che il modem
componga un numero (o riceva una chiamata).
Una volta che il modem connesso ad un altro modem (modo on-line),
tutto quello che il vostro computer manda al vostro modem va
direttamente verso l'altro modem e non interpretato dal modem come
un comando. C' un modo per "fuggire" da questo modo operativo e
tornare al modo comandi dove tutto quello che viene inviato al modem
viene interpretato come un comando. Il computer invia semplicemente
"+++" con un determinato periodo di tempo prima e dopo questo "+++".
Se lo spazio temporale corretto, il modem si pone in modo comandi.
Un altro modo di fare questo tramite un segnale ad una certa linea
di controllo del modem.
Ci sono svariate liste dei comandi modem su Internet. La sezione
``Siti Web'' ha dei collegamenti ad un paio di questi siti. Diversi
modelli e marche di modem non usano esattemente lo stesso gruppo di
comandi. Cos quello che va bene per un modem potrebbe non andare bene
per un altro. Alcuni comandi comuni (non si garantisce che funzionino
su tutti i modem) sono elencati in questo HOWTO nella sezione ``Altri
comandi modem''
2.12. Software seriale: il modulo del device driver
Il device driver per la porta seriale il software che fa funzionare
la porta seriale. Viene ora fornito come modulo seriale. Questo modulo
viene generalmente caricato automaticamente se necessario. Il kernel
2.2+ far questo. Nei kernel precedenti, dovete avere kerneld in
esecuzione per far s che i moduli si autocaricano su richiesta.
Altrimenti il modulo seriale necessita di essere esplicitamente
elencato in etc/modules. Prima che i moduli divenissero popolari con
Linux, il driver seriale era generalmente costruito all'interno del
kernel. Se esso ancora incorporato nel kernel (potreste avere
selezionato questa opzione quando avete compilato il kernel) non
lasciate che il modulo seriale venga caricato. Se lo fate finirete con
avere due driver, viene rilevato che non potete usare le porte seriali
ed otterrete un errore "I/O error" se tentate di aprirle.
Quando il modulo seriale caricato, visualizza un messaggio sullo
schemo circa l'esistenza di porte seriali (spesso mostrando un IRQ
errato). Ma una volta che il modulo usato da setserial per dire al
device driver qual' l'IRQ corretto, allora dovreste vedere una
seconda schermata con il corretto IRQ, ecc. Vedere ``Cos' Setserial''
per ulteriori informazioni su setserial.
Si potrebbe modificare il driver modificando il codice sorgente del
kernel. La maggior parte del driver seriale si trova nel file
serial.c. Per dettagli inerenti la scrittura di programmi per la porta
seriale vedere Serial-Programming-HOWTO (attualmente in fase di
revisione da parte di Vern Hoxie).
3. Configurare i Modem (inclusa la porta seriale)
Se volete usare il modem solo in ambiente MS Windows/Dos, allora
potete installare praticamente qualsiasi modem e tutto andr bene. In
un ambiente Linux non in genere cos facile a meno di usare un modem
esterno. Tutti i modem esterni dovrebbero funzionare bene (anche se
sono etichettati come "Plug and Play"), Ma anche la maggior parte dei
nuovi modem interni sono Plug-and-Play (PnP) ed hanno porte seriali
PnP. Potreste avere bisogno di usare il programma Linux "isapnp" per
configurarle. Vedere il Plug-and-Play HOWTO per ulteriori
informazioni.
3.1. Configurazione: introduzione
Visto che ogni modem ha associata una porta seriale ci sono due parti
da configurare in un modem:
Configurazione del modem stesso: eseguita dal programma di
comunicazione
Configurazione della porta seriale del modem: eseguita solo in
parte dal programma di comunicazione
La maggior parte delle configurazioni di cui sopra (ma non
necessariamente la maggior parte dello sforzo) sono svolte dal
programma di cumunicazione che si usa con il modem come ad esempio
minicom o seyon o dal PPP (in genere richesto se si usa un web
browser). Se usate il modem per rendere disponibile il vostro
computer dall'esterno, allora il programma getty che usate per
presentare a chi si collega il prompt di login, sar di aiuto nella
configurazione. Vale a dire che per configurare il modem (e la
maggior parte della porta seriale) dovete configurare il programma di
comunicazione (o PPP o getty).
Notate che non tutta la configurazione della porte seriale fatta dal
programma di comunicazione (o getty). La restante parte di
configurazione piuttosto semplice a dirsi (ma talvolta difficile a
farsi). Consiste principalmente nell'impostazione dell'indirizzo IO
della porta e del suo numero di IRQ. In effetti, il plug-and-play
potrebbe impostare questi valori senza che voi dobbiate fare nulla. Ma
c' un serio problema: Linux (almeno fino ad inizio 1999) non supporta
il plug-and-play molto bene. Questo pu essere un difficile problema
per voi. La prossima sezione riguarda la configurazione della porta
seriale.
4. Configurare la porta seriale
4.1. Bus PCI non ancora supportati
Il driver seriale del kernel 2.2 non contiene un supporto per il bus
PCI. Ma gli attuali kernel 2.3 e 2.4 finalmente supporteranno alcune
schede seriali PCI (e schede modem). La maggior parte delle schede
PCI necessitano di uno speciale supporto nel driver. Il driver legge
il numero identificativo memorizzato nella scheda per determinare come
(o se) supportare la scheda. Se avete una scheda PCI che siete
convinti non sia un winmodem ma non funziona comunque, allora potreste
essere d'aiuto per tentare di creare un driver per essa. Per fare
questo dovrete contattare il curatore del serial driver, Theodeore
(Ted) Y. Ts'o.
Inviategli tramite posta elettronica una copia dell'output di "lspci
-vv" con complete informazioni circa il modello ed il costruttore del
modem PCI (o della porta seriale). Egli cercher di approntarvi un
driver di prova che potrebbe fare al caso vostro. Dovrete
recuperarlo, compilarlo e possibilmente ricompilare il vostro kernel.
Poi dovrete testare il driver per vedere se funziona bene e fare una
relazione dei risultati a Ted Ts'o. Se siete disposti a fare tutto
quanto sopradescritto (e questa l'ultima versione di questo HOW-TO)
allora inviategli quanto richiesto a: <mailto:tytso@mit.edu>.
I modem PCI sono ben standardizzati. Alcuni usano la memoria
principale per l'I/O con il PC (ISA usa lo spazio di indirizzo di I/O
per questo). Alcuni richiedono particolari abilitazioni dell'IRQ.
L'output di "lspci" pu aiutare a determinare se pu essere
supportato. Se i dettagli non sono troppo complessi, potrei cercarli e
metterli qui in una successiva revisione.
4.2. Introduzione alla configurazione
Nella maggior parte dei casi, la configurazione viene eseguita
automaticamente e voi non dovete fare nulla. Ma talvolta dovete
configurare (o semplicemente volete controllare la configurazione). Se
questo il caso, dovete per prima cosa sapere qualcosa circa le due
parti necessarie per configurare la porta seriale sotto Linux.
La prima parte (configurazione a basso livello) assegnare un
indirizzo IO, un IRQ ed un nome (tipo ttyS2). Questa coppia IO-IRQ
deve essere impostata nell'hardware e deve anche essere passata al
driver seriale. Potremo chiamare questa parte in breve come
configurazione di "io-irq". setserial viene usato per informare il
driver. I metodi PnP, i jumper, ecc, sono usati per impostare
l'hardware. Dettagli saranno forniti successivamente. Se dovete
configurare ma non comprendete alcuni dettagli poi facile avere dei
guai.
La seconda parte (configurazione ad alto livello) consiste
nell'assegnare una velocit (tipo 38.4K bit/secondo), selezionare il
controllo di flusso, ecc. Questo viene spesso fatto dai programmi di
comunicazione come PPP, minicom, o da getty (che potreste lanciare
sulla porta cos che altri possano collegarsi attraverso di essa).
Questa configurazione di alto livello pu essere fatta anche con il
programma stty. stty anche utile per vedere lo stato corrente se
avete dei problemi e per reimpostare l'interfaccia del terminale
vicino al "normale" digitando qualcosa tipo ''stty sane''. Vedere
anche il Serial-HOWTO sezione: "Stty". Quando Linux parte, viene
compiuto un tentativo per rilevare e configurare (a basso livello)
alcune porte seriali. Quello che accade esattamente dipende dal vostro
BIOS, hardware, distribuzione di Linux, ecc. Se le porte seriali
funzionano bene, potrebbe non esserci bisogno di effettuare ulteriori
configurazioni. I programmi applicativi tendono spesso ad eseguire una
configurazione di alto livello, cos per questo possono pensarci loro.
Con le porte seriali Plug-and-Play (spesso inserite in un modem
interno), la situazione diventa pi complessa. Ecco i casi in cui
occorre eseguire una configurazione a basso livello (impostare gli
indirizzi IRQ e IO):
Volete usare pi di due porte seriali
Installazione di una nuova porta seriale (come nel caso di un modem
interno)
Avete problemi con la porta seriale(i)
Per i kernel 2.2+ dovreste essere capaci di usare pi di due porte
seriali senza configurare a basso livello, condividendo gi interrupt
ma questo potrebbe essere altrettanto complicato che configurare a
basso livello. Vedere ``Condivisione di interrupt e i Kernel 2.2+''
La configurazione a basso livello (impostare gli indirizzi IRQ e IO)
sembra causare pi problemi (rispetto a quella ad alto livello),
sebbene per la maggioranza sia completamente automatica e nessuna
configurazione si debba effettuare. Quindi la quasi totalit di questa
sezione verte su questo argomento. A meno che il driver seriale sappia
il corretto indirizzo IRQ e IO la porta probabilmente non funzioner
per niente. Probabilmente non sar neanche individuata da Linux. Anche
se essa fosse trovata, potrebbe lavorare in modo estremamente lento se
l'IRQ sbagliato. Vedere ``Estremamente lento: il testo appare sullo
schermo lentamente e dopo lunghi ritardi''.
Nel mondo Wintel, l'indirizzo IO ed IRQ sono chiamati "risorse" e
quindi siamo configurando certe risorse. Ricapitolando, la
configurazione a basso livello consiste nell'impostare due valori (un
numero di IRQ e un indirizzo IO) in due posti:
1. nei registri di memoria dell'hardware della porta seriale stessa
2. nel device driver (spesso lanciando "setserial" in fase di boot)
Potreste dare un occhiata ai messaggi di avvio (fase di boot). Essi
sono in genere corretti. Ma se state avendo problemi, c' una buona
probabilit che alcuni di questi messaggi non mostrino la corretta
configurazione dell'hardware (e d'altronde non sono deputati a farlo).
Vedere ``Indirizzi I/O e IRQ: Messaggi in fase di boot''.
4.3. Errori comuni commessi nel riconfigurare a basso livello
Ecco alcuni degli errori pi comuni che possono compiere:
comando setserial: Viene lanciato (senza l'opzione "autoconfig") e
si pensa che abbia controllato l'hardware (non l'ha fatto).
messaggi di setserial: Essi vengono visualizzati sullo schermo in
fase di boot ed erroneamente si crede che il risultato mostri come
l'hardware sia veramente configurato.
/proc/interrupts: Quando il loro dispositivo seriale non in uso
essi non vedono l i suoi interrupt ed erroneamente concludono che
la porta seriale non pu essere trovata (o che non abbia un
interrupt impostato).
/proc/ioports: Si pensa che questa mostri la configurazione
dell'hardware mentre mostra solo gli stessi dati (che possono anche
essere errati) di setserial.
4.4. Indirizzi I/O e IRQ: Messaggi in fase di boot
In molti casi le vostre porte verranno automaticamente configurate a
basso livello in fase di boot (ma non sempre correttamente). Per
vedere cosa sta succedendo, guardate i messaggi di avvio sullo
schermo. Non trascurate di controllare i messaggi del BIOS prima che
Linux venga caricato (nessun esempio mostrato qui). Usate shift-PagSu
per vedere i messaggi dopo che sono passati sullo schermo. Il comando
dmesg potrebbe esser usato ogniqualvolta si voglia vedere alcuni
messaggi ma spesso ne mancano di importanti. Ecco un esempio di
messaggi in fase di boot (cos come nel tardo 1999). Notate che ttyS00
lo stesso di dev/ttyS0.
Per prima cosa vedete quello che stato rilevato (ma l'irq solo un
ipotesi):
Serial driver version 4.27 with no serial options enabled
ttyS00 at 0x03f8 (irq = 4) is a 16550A
ttyS01 at 0x02f8 (irq = 3) is a 16550A
ttyS02 at 0x03e8 (irq = 4) is a 16550A
Pi tardi potete vedere quello che era stato salvato, ma anche questo
non necessariamente corretto:
Loading the saved-state of the serial devices...
/dev/ttyS0 at 0x03f8 (irq = 4) is a 16550A
/dev/ttyS1 at 0x02f8 (irq = 3) is a 16550A
/dev/ttyS2 at 0x03e8 (irq = 5) is a 16550A
Notate che qui vi un leggero disallineamento: il primo messaggio
mostra ttyS2 a irq=4 mentre il secondo lo mostra a irq=5. Potreste
anche avere solo il primo messaggio. In molti casi l'ultimo messaggio
quello corretto. Ma se state avendo problemi il messaggio potrebbe
fuorviarvi. Prima di leggere la spiegazione di tutta questa
complessit nel resto di questa sezione, potreste semplicemente
provare ad usare la vostra porta seriale e vedere se tutto va bene. Se
il caso, potrebbe non essere essenziale leggere oltre.
Il secondo messaggio deriva dal programma setserial che viene lanciato
in fase di boot. Mostra quella che il device driver pensa sia la
corretta configurazione. Ma questo potrebbe essere sbagliato. Ad
esempio l'irq potrabbe essere in realt impostato a irq=8
nell'hardware (entrambi i messaggi sono sbagliati). irq=5 esiste
perch qualcuno ha incorrettamente impostato questo valore nel file di
configurazione (o cose del genere). Il fatto che Linux talvolta
prenda degli IRQ sbagliati dipende dal fatto che non verifica gli IRQ.
Semplicemente assume quelli "standard" (primo messaggio) o accetta
quello che gli si dice quando viene configurato (secondo messaggio).
Nessuno di questi necessariamente corretto. Se il driver seriale ha
l'IRQ sbagliato, la porta seriale molto lenta o non funziona per
niente.
Il primo messaggio il risultato di Linux che verifica le porte
seriali. Se una porta viene mostrata in questa fase essa esiste ma il
suo irq potrebbe essere sbagliato. Linux non controlla gli IRQ perch
il farlo non a prova di errore. Esso assume che gli IRQ sono come
mostrato perch questi sono i valori "standard". Potreste controllare
manualmente con setserial usando l'opzione autoconfig ma non si
garantisce che sia esatto.
I dati mostrati nei messaggi del BIOS (che vedete per primi) quello
che impostato nell'hardware. Se la porta seriale Plug-and-Play PnP
allora possibile che isapnp venga lanciato e modifichi queste
impostazioni. Cercate dei messaggi in questo senso dopo che Linux
partito. L'ultimo messaggio relativo alla porta seriale mostrato
nell'esempio di cui sopra dovrebbe coincidere con i messaggi del BIOS
(che possibile siano stati modificati da isapnp). Se sono diversi
allora dovreste aver bisogno di cambiare le impostazioni nell'hardware
della porta od usare setserial per dire al driver quello che
attualmente impostato nell'hardware.
Inoltre, se avete porte seriali Plug-and-Play (PnP), Linux non le
trover a meno che l'IRQ e l'IO siano stati impostati all'interno
dell'hardware dal software PnP. Questa una comune ragione per la
quale i messaggi di avvio non mostrano una porta seriale che
fisicamente esiste. L'harware del PC (un BIOS PnP) potrebbe
automaticamente configurare a basso livello questo. La configurazione
PnP sar spiegata pi avanti.
4.5. Quali sono l'indirizzo IO e l'IRQ correnti della mia porta seri
ale?
La sezione precedente indica come tentare di fare questo guardando i
messaggi di avvio. Un titolo alternativo per questa sezione potrebbe
essere "Altri modi di scoprire i vostri indirizzi IO e IRQ). Se
disponete di informazioni sufficienti, allora potrebbe non essere
necessario leggere questa sezione. Se no allora ci sono alcuni altri
modi per scoprirli.
Ci sono davvero due risposte alla domanda "Quali sono i miei IRQ e
IO?" 1. Quello che il device driver pensa che sia impostato (questo
quello che setserial imposta e mostra). 2. Quello che in realt
impostato nell'hardware. Potrebbe essere gli stessi. Se state avendo
problemi (ed anche il programma di comunicazione non funziona)
potrebbe significare che questi due valori non sono impostati allo
stesso modo. In altre parole, questo significa che il driver ha
informazioni sbagliate circa la porta seriale fisica. Se il driver ha
l'IO sbagliato tenter di inviare dati ad una porta seriale
inesistente o ancora peggio, ad un dispositivo esistente che non una
porta seriale. Se ha l'IRQ sbagliato il driver non ricever le
richieste di interrupt dalla porta seriale, causando un possibile
sovraccarico del buffer della porta seriale e in una risposta molto
lenta. Vedere ``Estremamente lento: il testo appare sullo schermo
lentamente e dopo lunghi ritardi''. Se ha tipo sbagliato di UART
potrebbero esserci problemi. Per determinare se la coppia di IRQ-IO
identica dovreste cercare le risposte alle domande poste nelle
seguenti due sottosezioni:
4.5.1. Cosa pensa il device driver?
Questo facile da scoprire. Basta guardare ai messaggi di avvio o
digitare "setserial -g /dev/ttyS*". Se tutto a posto, allora quello
che vedrete sar impostato anche nell'hardware. Ci sono alcuni
ulteriori modi di trovare queste informazioni guardando dei "file"
nella directory /proc. Una ragione importante per comprendere questi
ulteriori modi per avvisarvi che essi mostrano solo quello che il
device driver pensa che sia. Alcuni vedono certi "file" nella
directory /proc ed erroneamente pensano che quello che vedono sia
quello che impostato nell'hardware ma non necessariamente cos.
/proc/ioports mostrer gli indirizzi di IO che i driver stanno usando.
/proc/interrupts mostra gli IRQ che sono stati usati dai driver dei
processi attualmente in esecuzione (che hanno dispositivi aperti).
Notate che in entrambi i casi di cui sopra potete solo vedere quello
il driver pensa che sia e non necessariamente quello che veramente
impostato nell'hardware. /proc/interrupts mostra anche quanti
interrupt sono stati invocati (spesso migliaia) per ogni dispositivo).
Potete ricavare un indizio da questo perch se vedete un gran numero
di interrupt invocati significa che c' un qualche hardware da qualche
parte che sta usando quell'interrupt. Talvolta il vedere solo pochi
interrupt non significa che quell'interrupt sia stato fisicamente
generato da una qualche porta seriale. Quindi se non vedete quasi
interrupt per una porta che state cercando di usare, quell'interrupt
potrebbe non essere stato impostato dall'hardware ad questo implica
che il driver sta usando l'interrupt sbagliato. Per vedere
/proc/interrupt per controllare su di un programma che state
attualmente eseguendo (tipo "minicom") dovete mantenere il programma
in esecuzione mentre controllate. Per fare questo cercate di saltare
in una shell senza uscire dal programma.
4.5.2. Cos' impostato nell'hardware della mia porta seriale?
Come scoprire quali indirizzi IO e IRQ sono realmente impostati nel
dispositivo hardware? Forse i messaggi del BIOS vi danno alcune
informazioni prima che Linux inizi il caricamento. Usate il tasto
shift-PagSu per risalire attraverso i messaggi di avvio e cercate i
primissimi che provengono dal BIOS. Questa era la situazione prima che
Linux partisse. Setserial non pu modificarla ma isapnp o pciutils s.
Un metodo brutale cercare la rilevazione con setserial usando
l'opzione "autoconfig". Avrete bisogno di indovinare gli indirizzi
per poterli poi verificare. Vedere ``Cos' Setserial''. Per una porta
seriale PCI, guardate in /proc/pci o in /proc/bus/pci/devices. Se la
vostra porta seriale Plug-and-Play leggete le successive due
sottosezioni.
Per una porta impostata tramite jumper, ecco come essi sono impostati.
Se la porta non Plug-and-Play (PnP) ma stata impostata usando un
programma DOS, allora impostata secondo quanto deciso da chi ha
lanciato quel programma.
4.5.3. Cosa impostato nell'hardware della mia porta seriale?
Le porte PnP non mantengono la loro configurazione nell'hardware
quando viene spento il PC. Questo in contrasto con i jumper (non-
PnP) che restano immutati anche quando si spegne la corrente. Se avete
una porta ISA PnP, potrebbe raggiungere lo stato nella quale non abbia
alcun indirizzo IRQ e IO e sia effettivamente disabilitata. Dovrebbe
essere ancora possibile trovare la porta usando il programma pnpdump.
Per il Plug-and-Play (PnP) sul bus ISA si potrebbe tentare con il
programma pnpdump (che parte di isapnptools). Se usate l'opzione
--dumpregs dovrebbe informarvi circa gli effettivi indirizzi IO e IRQ
impostati nella porta.
Riguardo alle porte PnP controllarne la configurazione sotto
DOS/Windows potrebbe non essere di molto aiuto. Windows mantiene le
sue informazioni di configurazione nel suo Registro che non viene
usato da Linux. Potrebbe fornire la memoria non volatile del BIOS di
alcune informazioni ma potrebbe non essere in sicrono con quelle della
configurazione corrente di Windows nel Registro ??. Se lasciate che un
BIOS PnP faccia una configurazione automatica quando lanciate Linux
(ed avete detto al BIOS che non avete un sistema operativo PnP quando
fate partire Linux), allora Linux dovrebbe usare una qualsivoglia
configurazione si trovi nella memoria non volatile del BIOS.
4.6. Scegliere gli IRQ seriali
Se avete un vero Plug-and-Play impostato dove sia il sistema operativo
che il BIOS PnP configurano tutti i vostri dispositivi, non
sceglierete i vostri IRQ. PnP determina quello che pensa sia meglio e
li assegna. Ma se usate gli strumenti di Linux per il Plug-and-Play
(isapnp e pcitools) allora dovete essere voi a sceglierli. Se gi
conoscete quale IRQ volete usate potete saltare questa sezione a meno
che non vogliate sapere che l'IRQ O ha un uso speciale (vedere il
paragrafo seguente).
4.6.1. L'IRQ 0 non un IRQ
Sebbene IRQ 0 sia in realt il timer (nell'hardware), esso ha uno
speciale significato nell'impostare una porta seriale con setserial.
Esso dice al driver che non c' un interrupt per quella porta ed il
driver allora user metodi di polling. piuttosto inefficiente ma pu
essere tentato se c' un conflitto di interrupt o degli interrupt sono
male impostati. Il vantaggio di assegnarlo che non avete bisogno di
sapere quale interrupt impostato nell'hardware. Dovrebbe essere
usato solo come espediente temporaneo fino a che non siate in grado di
trovare un vero interrupt da usare.
4.6.2. Condivisione di interrupt e i Kernel 2.2+
La regola generale che ogni dispositivo dovrebbe usare un IRQ unico
e non condividerlo. Ma ci sono situazioni dove la condivisione
permessa come nella maggior parte delle schede multi-porta. Anche
quando permesso, potrebbe essere non molto efficiente visto che ogni
volta che viene invocato un interrupt condiviso, occorre effettuare un
controllo per determinare da dove proviene. Sebbene quindi sia
possibile, meglio attribuire ad ogni dispositivo il proprio
interrupt.
Per i kernel precedenti il 2.2, gli IRQ seriali potevano essere
condivisi tra di loro solo per la maggioranza delle schede multiporta.
A partire dal kernel 2.2 gli IRQ seriali possono talvolta essere
condivisi tra tutte le porte seriali. Per far s che la condivisione
funzioni nel kernel 2.2 esso deve essere compilato con
CONFIG_SERIAL_SHARE_IRQ e l'hardware della porta seriale deve
supportare la condivisione (cos che se due seriali mettono due
diversi voltaggi nello stesso cavo di interrupt, solo il voltaggio che
significa "questo un interrupt" prevarr). Quindi anche se avete il
2.2, meglio evitare la condivisione.
4.6.3. Quale IRQ scegliere?
L'hardware seriale spesso ha solamente un numero limitato di IRQ che
possono essere impostati. Inoltre voi non volete dei conflitti di IRQ.
Cos non che ci sia molta scelta. Il vostro PC di norma dovrebbe
avere impostato ttyS0 e ttyS2 all'IRQ 4 e ttyS1 e ttyS3 all'IRQ 3.
/proc/interrupts mostrer quali IRQ sono usati da programmi
attualmente in esecuzione. meglio non usare uno di questi. Prima che
l'IRQ 5 venisse usato per le schede audio, era spesso usato per una
porta seriale.
Ecco come Greg (l'autore originale di Serial-HOWTO) ha impostato i
suoi in /etc/rc.d/rc.serial. rc.serial un file (uno script di shell)
che viene lanciato in avvio (potrebbe avere un percorso diverso). Per
versioni di "setserial" superiori a 2.15 non pi fatto in questo
modo, ma questo esempio mostra la scelta di IRQ.
/sbin/setserial /dev/ttyS0 irq 3 # il mio mouse seriale
/sbin/setserial /dev/ttyS1 irq 4 # il terminale dumb Wyse
/sbin/setserial /dev/ttyS2 irq 5 # il mio modem Zoom
/sbin/setserial /dev/ttyS3 irq 9 # il mio modem USR
Assegnazioni di IRQ standard:
IRQ 0 Timer channel 0 (Potrebbe significare "no interrupt".
Vedi sotto)
IRQ 1 Tastiera
IRQ 2 Cascade per il controller 2
IRQ 3 porta seriale 2
IRQ 4 porta seriale 1
IRQ 5 porta parallela 2, scheda audio
IRQ 6 Floppy
IRQ 7 porta parallela 1
IRQ 8 Real-time clock
IRQ 9 Rediretto a IRQ2
IRQ 10 non assegnato
IRQ 11 non assegnato
IRQ 12 non assegnato
IRQ 13 coprocessore matematico
IRQ 14 controller 1 di dischi fissi
IRQ 15 controller 2 di dischi fissi
Non esiste la "Cosa Giusta" da fare quando si scelgono gli interrupt.
Semplicemente assicuratevi che esso non sia usato dalla scheda madre,
o da qualsiasi altra scheda. 2, 3, 4, 5, 7, 10, 11, 12 o 15 sono
scelte possibili. Notate che IRQ 2 la stessa cosa di IRQ 9. Potete
invocare sia 2 che 9, il driver seriale molto comprensivo. Se avete
una scheda seriale molto vecchia potrebbe essere incapace di usare gli
IRQ 8 e superiori.
Accertatevi di non usare gli IRQ 1, 6, 8, 13 o 14!. Questi sono usati
dalla vostra scheda madre. La farete molto scontenta se gli "rubate" i
suoi IRQ. Quando avete finito, ricontrollate /proc/interrupts mentre
i programmi che usano gli interrupt sono in esecuzione ed assicuratevi
che non vi siano conflitti.
4.7. Scegliere gli indirizzi -- Conflitti della scheda video con
ttyS3
L'indirizzo IO delle schede video IBM 8514 (ed altre simili) 0x?2e8
dove ? 2, 4, 8 o 9. Questo pu causare conflitto (ma non dovrebbe se
la porta seriale ben concepita) con l'indirizzo IO di ttyS3 in
0x02e8 se la porta seriale ignora lo 0 esadecimale iniziale (molte lo
fanno). Queste sono cattive notizie se tentate di usare ttys3 a
quell'indirizzo di IO.
Nella maggioranza dei casi dovreste usare l'indirizzo predefinito se
possibile. Gli indirizzi mostrati rappresentano il primo indirizzo in
un intervallo di 8 byte. Ad esempio 3f8 comprende in realt 3f8-3ff.
Ogni dispositivo seriale (cos come altri tipi di dispositivi che
usano indirizzi IO) abbisogna del proprio univoco intervallo di
indirizzi. Non dovrebbero esserci confilitti. Ecco gli indirizzi
predefiniti per le porte seriali:
ttyS0 indirizzo 0x3f8
ttyS1 indirizzo 0x2f8
ttyS2 indirizzo 0x3e8
ttyS3 indirizzo 0x2e8
4.8. Impostare gli indirizzi IO e IRQ nell'hardware (per lo pi per
PnP)
Dopo che impostato nell'hardware non dimenticate di assicurarvi che
sia anche impostato nel driver usando setserial. Per porte seriali
non-PnP essi sono impostati sia nell'hardware da jumper o facendo
girare un programma DOS ("senza jumper") per impostarli (questo
potrebbe disabilitare PnP). Il resto di questa sottosezione riguarda
solo le porte seriali PnP. Ecco una lista dei possibili metodi per
configurare una porta seriale:
Usando un men di impostazioni CMOS per un BIOS PnP (in genere solo
per i modem esterni su ttyS0 (Com1) e ttyS1 (Com2))
Lasciando che un BIOS PnP configuri automaticamente una porta
seriale PnP Vedere ``Usare un BIOS PnP per configurare I0-IRQ''
Non facendo nulla se avete sia una porta seriale PnP ed un sistema
operativo Linux PnP (vedere Plug-and-Play-HOWTO).
Usando isapnp per una porta seriale PnP non-PCI
Usando pciutils (pcitools) per il bus PCI
Gli indirizzi di IO e IRQ devono essere impostati (da PnP) nei propri
registri ogni volta che il sistema viene acceso visto che l'hardware
PnP non tiene memoria di cosa era stato impostato prima che venisse
spento il PC. Un semplice modo di fare questo lasciare che il BIOS
PnP sappia che voi non avete un sistema operativo PnP ed il BIOS
automaticamente lo far ogni volta che si fa partire. Questo potrebbe
causare problemi sotto Windows (che un sistema operativo PnP) se voi
lanciate Windows mentre il BIOS pensa che Windows non sia un sistema
operativo PnP. Vedere il Plug-and-Play HOWTO.
Il Plug-and-Play era concepito per automatizzare la configurazione io-
irq, ma per Linux, allo stato attuale, ha reso la vita pi complicata,
I kernel standard per Linux non supportano il plug-and-play molto
bene. Se usate una patch al kernel di Linux per convertirlo a sistema
operativo plug-and-play, allora tutto quanto di cui sopra dovrebbe
essere gestito dal sistema operativo automaticamente. Ma quando volete
usare questo per automatizzare la configurazione di dispositivi
diversi dalla porta seriale, potreste scoprire che dovete comunque
configurare i driver manualmente visto che molti driver Linux non sono
scritti per supportare un sistema operativo Linux PnP. Se usate
isapnptools od il BIOS per configurare plug-and-play questi metteranno
semplicemente i due valori nei registri della sezione della porta
seriale della scheda del modem e probabilmente dovrete comunque
impostare setserial. Nulla di tutto questo facile o molto ben
documentato all'inizio del '99. Vedere il Plug-and-Play-HOWTO e la FAQ
di isapnptools.
4.8.1. Usare un BIOS PnP per configurare IO e IRQ
Mentre la spiegazione su come usare un sistema operativo PnP o isapnp
per configurare l'io-irq dovrebbe essere di corredo al relativo
software, questo non il caso se volete lasciare al BIOS PnP
l'esecuzione di questa configurazione. Non tutti i BIOS PnP possono
farlo. Il BIOS ha in genere un men CMOS per impostare le prime due
porte seriali. Questo men potrebbe essere difficile da trovare e per
un BIOS "Award" si trova sotto "chipset feautures setup". C' spesso
ben poco tra cui scegliere. A meno di indicazioni diverse nei men,
queste prime due porte vengono impostate agli indirizzi IO e IRQ
standard. Vedere ``Nomi e numeri dei dispositivi di porte seriali''.
Che vi piaccia o no, quando accendete un PC, un BIOS PnP inizia ad
eseguire la configurazione PnP (io-irq) dei dispositivi hardware.
Potrebbe eseguire il lavoro parzialmente e lasciare il resto al
sistema operativo PnP (che voi probabilmente non avete) o, se pensa
che voi non abbiate il sistema operativo PnP, potrebbe configurare
tutti i dispositivi PnP ma non configurare i device driver. Questo
quello che volete ma non sempre facile scoprire cosa ha fatto
esattamente il BIOS PnP.
Se dite al BIOS che non avete un sistema operativo PnP, allora il BIOS
PnP dovrebbe configurare tutte le porte seriali PnP, non solo le prime
due. Un modo indiretto per controllare quello che fa il BIOS (se avete
Windows 9x sullo stesso PC) "forzare" una configurazione sotto
Windows. Vedere il Plug-and-Play-HOWTO e cercare "forced". pi
facile usare il men CMOS BIOS che potrebbe ignorare quello che avete
"forzato" sotto Windows. Potrebbe esserci un'opzione nel BIOS che pu
impostare o disabilitare questa capacit di ignorare.
Se aggiungete un nuovo dispositivo PnP, il BIOS dovrebbe cambiare la
sua configurazione PnP per accoglierlo. Potrebbe anche cambiare gli
io-irq di dispositivi esistenti, se necessario, per evitare qualsiasi
conflitto. A questo scopo, tiene una lista dei dispositivi non PnP a
patto che abbiate detto al BIOS che questo dispositivi non PnP sono
configurati con io-irq. Un modo di dire questo al BIOS consiste nel
lanciare un programma sotto DOS/Windows chiamato ICU.
Ma come scoprire cosa ha fatto il BIOS cos che possiate impostare i
device driver con queste informazioni? Il BIOS stesso pu fornire
alcune informazioni, sia nei suoi men di setup o tramite messaggi
sullo schermo quando accendete il computer. Vedere ``Cos' impostato
nell'hardware della mia porta seriale ? ''
4.9. Passare gli indirizzi IRQ e IO a Setserial
Una volta che avete impostato gli indirizzi IO e IRQ nell'hardware (o
fatto in modo che questo venga fatto dal PnP) avete bisogno anche di
assicurarvi che il comando "setserial" venga lanciato ogni volta che
viene lanciato Linux. Vedere la sottosezione ``Configurazione in fase
di avvio''
4.10. Altre configurazioni
4.10.1. Configurare il flusso di controllo hardware (RTS/CTS)
Vedere ``Controllo di flusso'' per una spiegazione. Si dovrebbe sempre
usare il controllo di flusso hardware (ad eccezione di modem obsoleti
che non l'hanno). Il vostro programma di comunicazione o "getty"
dovrebbe avere una opzione per impostarlo (e se siete fortunati
potrebbe gi essere stato abilitato per default). Occorre che sia
impostato sia all'interno del modem (tramite la stringa di
inizializzazione o per default) che nel device driver. Il vostro
programma di comunicazione dovrebbe mettere a posto entrambi (se lo
configurate correttamente).
Se nessuna delle manovre sopradescritte consente l'attivazione del
controllo di flusso hardware, dovete provvedere voi. Per il modem
assicuratevi che esso sia impostato tramite stringa di
inizializzazione o per default. Se dovete dire al device driver di
farlo meglio agire alla partenza mettendo un un file che viene
lanciato in fase di avvio. Vedere la sottosezione ``Configurazione in
fase di avvio''. Dovete anche aggiungere quanto segue a tale file per
ogni porta seriale (l'esempio ttyS2) per la quale volete abilitare
il flusso di controllo hardware:
stty crtscts < /dev/ttyS2
Se volete vedere se il controllo di flusso abilitato eseguite quanto
segue: in minicom (o simile) digitate AT&V per vedere come
configurato il modem e cercate &K3 che vuol dire controllo di flusso
hardware. Poi controllate se il device driver lo rileva digitando stty
-a < /dev/ttyS2. Cercate "crtscts" (senza il segno meno che lo
disabilita).
5. Configurazione del modem (esclusa la porta seriale)
5.1. Comandi AT
Cos come per la porta seriale nella quale risiede un modem, anche il
modem stesso richiede di essere configurato. Il modem si configura
inviandogli dei comandi AT (o simili) sulla stessa linea seriale usata
per inviare dati. Essi sono brevi e criptici comandi ASCII, tutte le
stringhe di comando sono prefissate dalle lettere AT. Ad esempio:
ATZ&K3. Qui ci sono due comandi: Z e &K3. Sfortunatamente ci sono
molte diverse variazioni nel gruppo di comandi AT, cos che quello che
funziona per un modem potrebbe non funzionare per un altro. Quindi non
vi garanzia che i comandi AT dati in questa sezione funzioneranno
per tutti i modem. Altro punto che per far s che il modem reagisca
alla stringa di comando AT, deve essere inviato un carattere di
ritorno a capo alla fine della stringa.
Dette stringhe di comando vengono automaticamente inviate al modem dai
programmi di comunicazione o sono inviate direttamente da voi. La
maggior parte dei programmi di comunicazione forniscono una schermata
nella quale potete digitare i comandi direttamente al vostro modem.
Questo comodo per impostare il modem com' prima di spegnerlo senza
dover ricordare ogni volta come lo si era impostato.
Se avete un manuale per il vostro modem potrete probabilmente dare una
scorsa al gruppo di comandi AT ivi indicati. Altrimenti potrete
cercate di trovarli su Internet. Potreste usare un motore di ricerca
ed includere alcuni reali comandi nella stringa di ricerca per evitare
di cercare siti che parlano semplicemente di questi comandi ma dei
quali non offrono una lista. Potreste anche provare alcuni dei siti
riportati nella sottosezione ``Siti Web''
5.2. Stringhe di inizializzazione: salvarle e richiamarle
Gli esempi dati in questa sottosezione sono tratti dal gruppo di
comandi AT Hayes. Tutte le stringhe di comando devono essere
prefissate dalle due lettere AT (ad esempio: AT&C1&D3). Quando un
modem viene acceso, si autoconfigura automaticamente con una delle
configurazioni che ha salvate nella sua memoria non volatile. Se la
configurazione soddisfacente, non c' altro da fare.
Se non risulta soddisfacente, si potrebbe sia alterare la
configurazione memorizzata o configurare il modem ogniqualvolta venga
usato inviandogli un stringa di comandi nota come "init string"
(stringa di inizializzazione). Generalmente un programma di
comunicazione fa questo. Quello che invia dipende da come avete
configurato il programma di comunicazione o quale script avete scritto
per esso se usate Kermit. Potete in genere modificare la init string
che il vostro programma di comunicazione usa e cambiarla come vi pare.
Talvolta il programma di comunicazione vi consente di selezionare il
modello del vostro modem, quindi user una init string che pensa sia
la pi adatta per quel modem.
La configurazione che il modem usa quando viene acceso per la prima
volta potrebbe essere rappresentata da una init string. Potreste
pensare a questa come una stringa di default (chiamata profilo). Se il
vostro programma di comunicazione invia al modem un'altra stringa
(l'init string), allora questa stringa modificher la configurazione
predefinita. Ad esempio se la init string contiene solo due comandi,
allora solo queste due voci verranno cambiate. Comunque, alcuni
comandi richiamano un profilo memorizzato all'interno del modem cos
che un singolo comando di questo tipo nella init string pu di
conseguenza cambiare tutta quanta la configurazione.
I modem moderni hanno alcuni profili diversi memorizzati tra i quali
scegliere che si trovano nella memoria non-volatile (rimangono l
anche quando spegnete il modem). Nel mio modem ci sono due profili
impostati dalla ditta costruttrice (0 ed 1, nessuno dei quali pu
essere cambiato) e due profili definiti dall'utente (0 ed 1) che
l'utente pu impostare e memorizzare. Il vostro modem potrebbe averne
di pi. Quale di questi profili definiti dall'utente venga usato
all'accensione depende da un altro valore memorizzato nel profilo. Se
viene impartito il comando &Y0 allora verr usato il profilo 0 alla
prossima accensione. Se invece troviamo un 1 invece che uno 0 allora
il profilo 1 sar usato all'accensione.
Ci sono anche comandi per richiamare (riusare) ciascuno dei 4 profili
memorizzati. Uno potrebbe mettere un comando di questo tipo nella
init string. Naturalmente se verr richiamato lo stesso profilo cos
come stato automaticamente caricato all'accensione, non cambia nulla
a meno che il profilo attivo sia stato modificato dopo l'accensione.
Visto che potrebbe essere stato modificato, una buona idea usare una
specie di init string anche se non fa null'altro che richiamare un
profilo memorizzato.
Per richiamare un profilo salvato (usate 1 invece che 0 per il profilo
1):
Z0 recupera il profilo utente 0 e reimposta il modem (riappende, ecc.)
&F0 recupera il profilo impostato dalla ditta costruttrice 0
Una volta inviati i comandi al modem per configurarlo nel modo che
volete (incluso richiamare il profilo della casa costruttrice per poi
modificarlo un poco), potreste volere salvare questo come profilo
definito dall'utente:
&W0 salva la configurazione corrente nel profilo utente
La maggior parte della gente non si preoccupa di salvare una buona
configurazione nei propri modem ma, invece, inviano al modem una
stringa pi lunga ogni volta che il modem viene usato. Un altro metodo
consiste nel riprisitinare la configurazione di default della casa
costruttrice all'inizio della stringa di inizializzazione, quindi
modificarla leggermente aggiungendo qualche altro comando alla fine
della init string. Agendo in questo modo, non c' pericolo di
modificare il profilo definito dall'utente che viene caricato
all'accensione
Si pu anche scegliere una stringa di inizializzazione fornita da
qualcun altro che sostenga che sia buona per il vostro modem ecc.
Alcuni programmi di comunicazione hanno una libreria di stringhe di
inizializzazione dalla quale scegliere. Il metodo pi difficile (e
quello che vi insegner di pi riguardo ai modem) studiare il
manuale del modem e scrivere una stringa da soli. Potrete poi salvare
questa configurazione all'interno del modem cos che una stringa di
inizializzazione non sar necessaria. Una terza alternativa
iniziare con una stringa di inizializzazione che qualcun altro ha
scritto, poi modificarla per adattarla alle vostre esigenze.
Ora se guardate le init string usate dai programmi di comunicazione
potreste vedere simboli che non sono comandi modem validi. Questi
simboli sono comandi al programma di comunicazione stesso (tipo ~ che
significa effettuare una breve pausa) e non sono inviati al modem
5.3. Altri comandi modem
Una prossima edizione di questo HOWTO potrebbe contenere anche
qualcosa di pi su questo ma il resto di questa sezione per la
maggior parte quello che si trova nel vecchio Serial-HOWTO. Tutte le
stringhe devono iniziare con AT. Ecco alcuni codici AT Heyes che
dovrebbero essere nella stringa (se non sono stati impostati usando le
impostazioni predefinite del costruttore o da una configurazione
salvata)
E1 eco comandi ON
Q0 riporta i codici di risposta
V1 verbose ON
S0=0 non rispondere mai (uugetty fa questo con l'opzione WAITFOR)
Ecco alcuni altri codici riguardanti il controllo delle linee DCD e
DSR del modem:
&C1 DCD attivato solo dopo la connessione
&S0 DSR sempre attivato
Questi riguardano quello che fa il vostro modem quando inizia o
finisce una comunicazione. Si potrebbe impostare anche quallo che fa
DTR ma pi complicato.
Se il vostro modem non supporta un profilo salvato, lo potete
impostare attraverso una stringa INIT in un file di configurazione (o
simile). Alcuni vecchi modem hanno degli interruttori DIP che variano
le impostazioni dei registri. Assicuratevi che siano impostati
anch'essi correttamente.
Greg Hankins ha una libreria di impostazioni modem per diversi tipi.
Se volete inviargli la vostra configurazione di lavoro fatelo a:
<mailto:greg@cc.gatech.edu>. Potete recuperare queste impostazioni a
ftp://ftp.cc.gatech.edu/pub/people/gregh/modem-configs.
Note: perch il suo USR Courier V.34 si reinizializzi correttamente
dopo che cade DTR, Greg Hankins ha dovuto impostare &D2 and S13=1
(questo imposta il bit 0 del registro S13). confermato che la cosa
vale anche per gli USR Sportster V.34.
Nota: alcuni Supra trattano DCD in modo diverso rispetto agli altri
modem. Se state usando un Supra, provate ad impostare &C0 e not &C1.
Dovrete anche impostare &D2 per gestire DTR correttamente
6. Modem per un PC con Linux
6.1. Esterni contro interni
Un modem per PC pu essere sia esterno che interno. Quello interno
installato all'interno del vostro PC (dovete svitare viti ecc. per
installarlo) e l'esterno semplicemente si attacca ad un connettore di
porta seriale del vostro PC. I modem interni sono pi economici,
meno probabile che vadano in sovraccarico, in genere consumano meno
corrente e non occupano spazio sulla scrivania. I modem esterni sono
molto pi facili da installare, richiedono una configurazione minore
ed hanno delle luci che possono darvi un'idea di quello che sta
accadendo. I modem esterni sono facilmente spostabili da un PC
all'altro. La maggior parte dei modem esterni non hanno un
interruttore che spenga l'alimentazione quando non sono in uso e
quindi probabilmente consumano corrente anche quando sono spenti (a
meno di togliere la spina dalla presa di corrente nel muro). Ogni
watt che consumano costa circa $1 per anno. Un altro possibile
svantaggio di un modem esterno che sarete forzati ad usare una porta
seriale esterna gi presente che magari non supporta velocit
superiori ai 115.200k (sebbene nel tardo 1998 neanche la maggior parte
dei modem interni lo fanno - ma alcuni s). Se un nuovo modem interno
ha una UART 16650 dovrebbe impegnare di meno la CPU (ma quasi nessuno
lo fa a questo tempo - tardo 1998)
I modem interni presentano un problema particolare per Linux, ma
funzioneranno bene come quelli esterni a patto che voi evitiate quella
grossa percentuale di essi che lavora solo sotto MS-WINDOWS ed anche a
patto che poi usate un poco del vostro tempo (a volte molto tempo) per
configurarli correttamente. Alcuni dei modem che funzionano solo
sotto MS Windows sono, sfortunatamente, non etichettati come tali. Se
ne comprate uno nuovo assicuratevi di poterlo restituire ed essere
rimborsati se non funzioner sotto Linux
Visto che la maggior parte dei nuovi modem sono plug-and-play esistono
diversi modi di "domarli":
Usare il programma "isapnp"
Far fare la configurazione al BIOS PnP
Modificare il kernel per creare un Linux PnP
Ognuno dei metodi sopraindicati ha dei difetti. La documentazione di
isapnp difficile da comprendere sebbene la lettura del Plug-and-play
HOWTO (attualmente incompleta), aiuti la comprensione. Se volete che
la configurazione venga fatta dal BIOS PnP, tutto quello di cui avete
bisogno assicurarvi che esso sappia che non avete un sistema
operativo PnP. Ma potrebbe non eseguire la configurazione
correttamente. Per scoprire quello che ha fatto vedere ``Cos'
impostato nell'hardware della mia porta seriale ?'' Modificare il
kernel potrebbe essere anch'esso complicato e potrebbe non esserci un
patch per i kernel recenti.
Ci sono diversi utenti Linux che dicono che molto pi semplice
prendersi un modem esterno e collegarlo. Ma visto che la maggioranza
delle nuove periferiche odierne PnP, potreste alla fine comunque
doverci mettere le mani, perch quindi non farlo subito? Comunque la
soluzione di un modem esterno rimane la pi conveniente (e pi
costosa), se avete una porta seriale libera.
6.2. Modem esterni
6.2.1. Modem esterni PnP
Diversi modem esterni sono etichettati come "Plug and Play" (PnP) ma
dovrebbero funzionare bene anche come modem non PnP. Visto che
generalmente si attacca il modem ad una porta seriale che ha il suo
numero di IRQ ed indirizzo IO, il modem non abbisogna di capacit PnP
per impostarli. Comunque, la porta seriale stessa potrebbe dovere
essere configurata (numero IRQ ed indirizzo IO) a meno che la
configurazione predefinita non sia OK.
Come si pu definire un modem esterno PnP visto che non pu essere
configurato tramite PnP? Beh, c' una speciale identificazione PnP al
suo interno che pu essere letta (attraverso la porta seriale) da un
sistema operativo PnP. Un sistema operativo di questo genere dovrebbe
quindi sapere che voi avete un modem e dovrebbe anche conoscere il
numero di modello. Quindi non dovrete avere l'esigenza di configurare
i programmi applicativi informandoli su quale porta risiede il modem
(come /dev/ttyS2 o COM3). Ma se non avete uns sistema operativo PnP
dovrete configurare la vostra applicazione manualmente fornendogli
l'identificativo /dev (come ad esempio ttyS2).
6.2.2. Cablaggio ed installazione
Connettere un modem esterno semplice a confronto alla maggior parte
degli altri dispositivi che si connettono ad una porta seriale e che
necessitano di vari tipi di cavi "null modem". I modem usano cavi
diretti, senza pin incrociati. La maggioranza dei negozi di computer
ne sono forniti. Assicuratevi di avere il genere giusto. Se state
usando delle seriali DB9 o DB25 sul vostro computer, il cavo sar
sempre maschio il che significa che il connettore sul cavo dovrebbe
essere femmina. Attaccate il modem ad una delle vostre porte seriali.
Se volete accettare l'IRQ e l'indirizzo IO predefiniti della porta
alla quale lo connettete, allora siete pronti per lanciare il vostro
programma di comunicazione e configurare il modem stesso
6.2.3. Cosa significano le luci? (LED)
TM Test Modem (prova modem)
AA Auto Answer (Se attivata, il vostro modem risponder ad una
chiamata in arrivo
RD Receive Data line = RxD (linea di ricezione dati)
SD Send Data line = TxD (linea di trasmissione dati)
TR Data Terminal Ready = DTR (impostatato da vostro PC)
RI Ring Indicator (indicatore di squillo - se attivato, qualcuno
sta facendo "suonare" il vostro modem)
OH Off Hook (se disattivato, il vostro modem ha interrotto la
comunicazione)
MR Modem Ready = DSR ?? (Modem pronto)
EC Error Correction (Correzione di errore)
DC Data Compression (Compressione dati)
HS High Speed (for this modem) (Alta velocit - per questo modem)
6.3. Modem interni
Un modem interno viene installato in un PC togliendo il coperchio del
PC ed inserendo la scheda modem in un alloggiamento libero della
scheda madre. Ci sono modem per gli slot ISA ed altri per quelli PCI.
Mentre i modem esterni si collegano attraverso la porta seriale
(tramite un corto cavo), i modem interni hanno la porta seriale
costruita al loro interno. In altre parole, la scheda modem sia un
modem che una porta seriale.
Un tempo l'impostazione degli indirizzi IO e IRQ era effettuata con
ponticelli sulla scheda. Essi erano dei "cubetti" neri rettangolari di
circa 5x4x2 mm di dimensione che si attaccavano alla scheda tramite
dei pin. I modem plug-and-play (in realt la porta seriale che fa
parte del modem) non usano ponticelli per impostarsi ma sono invece
configurati inviando ad essi dei comandi di configurazione (tramite
uno spazio di indirizzo IO sul bus ISA all'interno del computer). Tali
comandi di configurazione possono essere inviati tramite il BIOS PnP,
il programma isapnp (per i bus ISA solamente) o tramite un sistema
operativo PnP. La configurazione dei modem gi all'interno di
Windows 95/98. In Linux si ha una scelta di opzioni (nessuna delle
quali sempre facile) per configurare l'io-irq:
1. Usare "isapnp" che pu essere lanciato automaticamente ad ogni
avvio
2. Usare un BIOS PnP (che viene eseguito ad ogni accensione)
3. Modificare Linux per renderlo un sistema operativo PnP
6.4. Modem interni da evitare: Winmodem, ecc.
La maggior parte dei modem interni prodotti dopo la met del 1988 non
funzionano con Linux visto che essi sono dei "Windows Modem" o simile.
I nomi usati includono: HSP, HCF, e soft-... modem. Questi modem
demandano molto (o quasi tutto il) lavoro del modem al chip del
processore principale (CPU) del vostro computer (come ad esempio un
chip Pentium). Visto che il software ad essi corredato solo per
Windows (e non per Linux), non funzioneranno sotto Linux. Una lista
dei modem che funzionano e non funzionano sotto Linux si trova in
Linux modem list <http://www.o2.net/~gromitkc/winmodem.html>
Un termine migliore di "winmodem" potrebbe essere "software modem"
oppure "soft-modem". Ma visto che questo software solo per MS
Windows, il termine "winmodem" buono visto che implica anche che
"solamente per Windows". Ecco una pi precisa terminologia relativa ai
"winmodem":
HSP (Host Signal Processor) significa che il processore ospitante (la
vostra CPU) crea il codice necessario a produrre il segnale elettrico
sulla linea telefonica. Il modem in s crea semplicemente l'onda
elettrica che la CPU gli dice di generare. Al contrario, un modem
"controllerless" (senza controller) pu creare le onde elettriche da
solo (ma non pu controllare il modem). Non include capacit per
interagire con i byte che gli vengono inviati o che riceve. Non pu
comprimere stringhe di byte; non pu controllare se esistono errori;
non pu confezionare i byte in pacchetti. In altre parole non pu
controllare il modem ed la CPU che deve fare tutto il lavoro usando
un programma per Windows. Il Rockwell HCF (Host Controlled Family) fa
questo. Se il software che fa tutto ci potrebbe essere portato sotto
Linux, allora non dovrebbe esserci questo problema.
Come determinare se un modem interno funzioner sotto Linux? Se non
conoscete il modello del modem ed avete anche Windows nel vostro PC
Linux, fate click sull'icona del "Modem" nel "Pannello di Controllo".
Prima verificate se il modem si trova nella lista nel Web menzionata 3
paragrafi sopra. Se questo non possibile, potreste guardare la
documentazione o il manuale cercando la sezione che dice qualcosa tipo
"Minimum System Requirements" (Requisiti minimi di sistema) o
semplicemente "System requirements" (Requisiti di sistema). Potrebbe
essere scritta molto in piccolo. Leggetela attentamente. Se viene
elencato Windows come uno dei requisiti allora molto probabilmente non
funzioner sotto Linux
Altrimenti, probabilmente funzioner sotto Linux se non
esplicitamente scritto che dovete avere Windows. La dicitura "studiato
per Windows" potrebbe semplicemente significare che supporta
pienamente il PnP Microsoft quindi va bene anche per Linux visto che
usa le stesse specifiche PnP. "Studiato per Windows" quindi non
fornisce nessun indizio sul fatto che non funzioni sotto Linux.
Potreste controllare sul sito Web del produttore o chiedere
informazioni via posta elettronica. Una volta ho visto una pagina web
che esplicitamente affermava che un modello funzionava sotto Linux
sottointendendo che un altro modello non lo faceva.
Perci che a conoscenza dell'autore, non c' nessun progetto
attalmente in corso di supportare i "winmodem" sotto Linux. Potreste
chiedere che i produttori di modem adattino il loro codice a Linux (o
simile)
6.5. Che modem interni meglio evitare?
``Evitare winmodem'' o simili. NON funzionano assolutamente con
Linux
``Modem PCI'' raramente funzionano sotto Linux
``Modem MWave e DSP'' potrebbero funzionare ma solo se lanciate per
primo Windows/Dos ogni volta che accendete il computer
Modem con driver ``RPI (Rockwell)'' funzionano ma con prestazioni
ridotte
6.5.1. Modem MWave e DSP
Questi modem usano DSP (Processori di Segnale Digitale) che sono
programmati con algoritmi che devono essere scaricati dall'hard disk
alla memoria DSP appena prima di usare il modem. Sfortunatamente lo
scarico viene fatto da programmi Dos/Windows che in Linux non girano.
I modem normali che lavorano sotto Linux spesso hanno anche un DSP (e
potrebbe essere specificato nella confezione) ma il programma che lo
lancia risiede all'interno del modem. Questo non un modem DSP nel
senso inteso da questa sezione e dovrebbe funzionare sotto Linux. Un
esempio di modem DSP l'IBM Aptiva MWAVE.
Se un modem DSP simula una porta seriale, allora si pu usare con
Linux che comunica col modem tramite porta seriale. Se avete anche
dos/Windows sullo stesso PC, dovreste essere in grado di usare il
modem: Per prima cosa installate il driver sotto DOS (usando i driver
DOS e non Windows) Poi lanciate Dos/Windows (assicuratevi che il modem
venga inizializzato) e poi senza spegnere il computer, passate a
Linux. Per fare questo si potrebbe usare loadlin.exe che un
programma DOS che fa partire Linux da DOS (vedere il Config-HOWTO). Un
altro modo semplicemente premere CTRL-ALT-DEL. Il modem rimane
sulla stessa porta com (stesso indirizzo IO) che stato usato sotto
DOS
6.5.2. Driver Rockwell (RPI)
I modem che voglono i driver Rockwell RPI non sono completamente
usabili visto che il software per i driver non gira sotto Linux. RPI
esegue la compressione e la correzione degli errori usando il software
MS Windows nella CPU del computer. Se vi va bene usare il modem senza
RPI (non avere quindi compressione e correzione di errori), allora
potreste disabilitare RPI inviando al modem (tramite stringa di
inizializzazione) un comando per fare questo ogni volta che si accende
il modem. Sul mio modem questo comando +H0 Non avere la compressione
dati potrebbe essere uno svantaggio abbastanza lieve visto che la
maggior parte dei file che si scaricano da Internet sono gi compressi
e tentare di comprimerli ulteriormente rallenterebbe semplicemente le
operazioni.
6.5.3. Modem PCI
Una scheda modem PCI quella che si inserisce in un alloggiamento bus
PCI sulla scheda madre del PC. Sfortunatamente, sembra che la maggior
parte dei modem PCI non funzioni sotto Linux ma sono in corso sforzi
per supportare alcuni di essi vedere ``Bus PCI non ancora ben
supportati''
7. Dispositivi di porta seriale /dev/ttyS2, ecc.
Per creare dispositivi nella directory dei dispositivi vedere il
Serial-HOWTO: "Creating Devices In the /dev directory".
7.1. Nomi e numeri dei dispositivi di porta seriali
I dispositivi in Linux hanno numeri primari e secondari. Ogni porta
seriale pu avere due possibili nomi, nella directory /dev: ttyS e
cua. I loro driver si comportano in modo leggermente differente. Il
dispositivo cua disapprovato e potrebbe non essere pi usato in
futuro. Vedere ``Il device cua''.
Dos/Windows usano il nome COM mentre il programma setserial usa tty00,
tty01 ecc. Non confondete questi con dev/tty0, /dev/tty1, ecc. che
sono usati per le console (il monitor del vostro PC) ma non sono porte
seriali. I nomi dos (COM1, ecc.) e gli indirizzi IO sono mostrati
sotto per i casi "standard" (ma i vostri potrebbero essere diversi).
set- indirizzo
dos serial prim. second. prim. second. IO
COM1 tty00 /dev/ttyS0 4, 64; /dev/cua0 5, 64 3F8
COM2 tty01 /dev/ttyS1 4, 65; /dev/cua1 5, 65 2F8
COM3 tty02 /dev/ttyS2 4, 66; /dev/cua2 5, 66 3E8
COM4 tty03 /dev/ttyS3 4, 67; /dev/cua3 5, 67 2E8
Notate che tutte le distribuzioni dovrebbero avere dei dispositivi
ttyS (e dispositivi cua fino a che cua venga definitivamente abolito).
Potreste verificarlo digitando
linux% ls -l /dev/cua*
linux% ls -l /dev/ttyS*
7.2. Collegare con link ttySN a /dev/modem ?
In alcune installazioni, saranno creati due dispositivi extra,
/dev/modem per il vostro modem e /dev/mouse per il vostro mouse.
Entrambi sono dei link simbolici agli appropriati dispositivi in /dev
che avete specificato durante l'installazione (a meno che non abbiate
un bus mouse, allora /dev/mouse punter al dispositivo del bus mouse).
Ci sono state alcune discussioni riguardo a /dev/mouse e /dev/modem.
L'uso di questi link sconsigliato. In particolare, se state pensando
di usare il vostro modem per ricevere chiamate potreste avere problemi
perch i file di lock potrebbero non funzionare correttamente se usate
/dev/modem. Usateli se volete, ma siate sicuri che puntino al
dispositivo giusto. Comunque, se cambiate o eliminate questi link,
alcune applicazioni potrebbero necessitare di una riconfigurazione.
7.3. Creare dispositivi nella directory /dev
Se non avete un dispositivo, potrete crearlo con il comando mknod. Ad
esempio, supposto che dobbiate create dispositivi per ttyS0:
linux# mknod -m 666 /dev/cua0 c 5 64
linux# mknod -m 666 /dev/ttyS0 c 5 64
Potete poi usare lo script MAKEDEV che si trova in /dev. Vedere per
questo la pagina di manuale. Questo semplifica la creazione dei dis
positivi. Ad esempio. Se volete create dispositivi per ttyS0 digitate:
linux# cd /dev
linux# ./MAKEDEV ttyS0
Questo gestisce la creazione dei dispositivi e dovrebbe impostare i
permessi correttamente
7.4. Il dispositivo cua
Ad ogni dispositivo ttyS corrisponde un dispositivo cua. Ma il
dispositivo cua sta per essere abolito cos meglio usare ttyS (a
meno che cua sia richiesto). C' differenza tra cua e ttyS ma un
programmatore previdente pu fare s che una porta ttyS si comporti
esattamente come una porta cua, cos non c' pi realmente bisogno di
cua. A meno che alcuni vecchi programmi non richiedano l'uso di cua.
Qual' la differenza? La differenza principale tra cua e ttyS si
riferisce a quanto succede in un programma C quando un normale comando
"open" cerca di aprire la porta. Se una porta cua stata impostata
per controllare i segnali di controllo del modem, la porta potrebbe
essere aperta anche se il segnale di controllo DCD del modem dice che
non vero. Una astuta programmazione (aggiungendo lineee addizionali
al programma) pu forzare una porta ttyS a comportarsi anch'essa in
questo modo. Ma una porta cua pu essere ancora pi facilmente
programmata per aprirsi per comporre una chiamata in uscita anche
quando il modem non riesce ad identificare DCD (visto che nessuno ci
ha chiamato e non c' portante). Ecco perch cua era una volta usata
per chiamate in uscita e ttyS era usata per chiamate in entrata.
A partire dal kernel 2.2, un messaggio di avvertimento verr immesso
nel log del kernel quando si usa cua. Questo il presagio che cua fra
un poco sparir.
8. Degli interessanti programmi di cui dovreste essere a conoscenza
8.1. Cos' setserial ?
8.1.1. Introduzione
Non usate mai setserial con i Laptop (PCMCIA). setserial un
programma che vi permette di comunicare al software del device driver
l'indirizzio IO della porta seriale, quale interrupt (IRQ) impostato
nell'hardware della porta quale tipo di UART avete, ecc. Pu anche
mostrare come il driver sia attualmente impostato. In pi pu rilevare
l'hardware (se sono state passate determinate opzioni). A parte il
manuale di setserial, leggete anche le informazioni in
/usr/doc/setserial.../ o simile. Dovrebbe dirvi come setserial sia
gestito nella vostra distribuzione di Linux.
Setserial spesso lanciato automaticamente in fase di avvio da uno
script di shell. Funziona solo se il modulo seriale caricato. Se
doveste per qualche ragione scaricare il modulo seriale pi tardi, i
cambiamenti precedentemente effettuati da setserial saranno persi.
Quindi setserial deve essere lanciato di nuovo per reimpostarli.
Oltre ad essere lanciato da uno script di avvio, qualcosa di simile a
setserial viene lanciato quando il modulo seriale viene caricato.
Quindi quando osservate i messaggi di avvio sullo schermo potrebbe
sembrare che sia stato lanciato due volte ed in effetti si
verificato questo.
Con appropriate opzioni, setserial pu rilevare (ad un dato indirizzo
I/O) una porta seriale ma dovete indovinare l'indirizzo I/O. Se
chiedete di rilevare /dev/ttyS2 ad esempio, semplicemente verr
effettuata la rilevazione all'indirizzo nel quale pensa ttyS2 si
trovi. Se dite a setserial che ttyS2 ad un indirizzo diverso, allora
verr fatta la rilevazione per quell'indirizzo, ecc. Vedere
``Rilevazione''
Setserial non imposta n gli IRQ n gli indirizzi I/O nell'hardware
della porta seriale stessa. Dovete passare a setserial gli identici
valori che sono stati impostati nell'hardware. Nell'hardware sono
impostati tramite ponticelli o dal plug-and-play. Non inventatevi dei
valori che pensate possano andare bene da passare a sestserial.
Comunque, se sapete l'indirizzo I/O ma non conoscete l'IRQ potere
ordinare a setserial di tentare di determinarlo.
Potete vedere una lista di possibili comandi da usare (ma non le
opzioni a una lettera tipo -v per verbose -- che dovreste normalmente
usare in fase di risoluzione di problemi) digitando setserial senza
parametri. Notate che setserial chiama un indirizzo IO "porta". Se
digitate
setserial -g /dev/ttyS*
vedrete alcune informazioni circa il modo in cui il device driver
configurato per le vostre porte. Aggiungete una "v" all'opzione "-g"
per saperne di pi. Ma questo non vi dice se l'harware ha questi val
ori impostati per se stesso. Infatti, potete lanciare setserial asseg
nando un indirizzo IO puramente fittizio, un qualsiasi IRQ e qualsiasi
tipo di UART vi pare. Poi la prossima volta che digitate "setserial
... " verranno visualizzati questi falsi valori senza nessuna
protesta. Notate che gli assegnamenti fatti da setserial sono persi
quando il PC viene spento cos che in genere esso viene lanciato ogni
qualvolta Linux viene caricato.
8.1.2. Rilevazione (probing)
Per cercare di scoprire se avete un certo tipo di hardware seriale
dovete prima sapere (o indovinare) il suo indirizzo I/O (o il device
driver deve avere un I/O per esso, presumibilmente impostato
precedentemente da setserial). Per cercare di identificare l'hardware
fisico usate i parametri -v (verbose) e il comando autoconfig per
setserial. Se il messaggio che ne risulta mostra un tipo di uart come
16550A, allora tutto a posto. Se invece mostra "unknown"
(sconosciuto) per il tipo di uart, allora potrebbe non esserci una
porta seriale a quell'indirizzo I/O. Alcune porte seriali a buon
mercato non si autoidentificano correttamente cosi se vedete "unknown"
potreste comunque avere qualcosa a quell'indirizzo.
A parte l'auto-rilevazione per il tipo di uart, setserial pu anche
auto-rilevare gli IRQ ma questo non sempre funziona correttamente. In
versioni di setserial 2.15 e superiori, l'ultima prova di rilavazione
pu essere salvata e messa nel file di configurazione
/etc/setserial.conf che verr usato al prossimo avvio di Linux. Lo
script che lancia setserial in fase di avvio non fa rilevazioni in
genere, ma potreste modificarlo in modo che questo avvenga. Vedere la
prossima sezione.
8.1.3. Pu Linux configurare i dispositivi seriali "automagicamente"?
S, ma ... Potete impostare Linux in modo che rilevi ed imposti i
dispositivi seriali automaticamente in fase di avvio (probing).
facile da fare per setserial precedenti al 2.15. Semplicemente
aggiungete alcune righe al file che lancia setserial all'avvio.
Vedere ``Vecchi metodi di configurazione: modificare uno script'' Ad
esempio, per ttyS3 dovreste aggiungere:
/sbin/setserial /dev/ttyS3 auto_irq skip_test autoconfig
al file che lancia setserial all'avvio. Fate questo per ogni porta
seriale che volete autoconfigurare. Assicuratevi di passare un nome di
dispositivo che effettivamente esiste sulla vostra macchina.
Per le versioni superiori alla 2.15 (a patto che la vostra
distribuzione implementi la modifica, RedHat non l'ha fatto), molto
pi difficile da fare visto che il file che lancia setserial in avvio,
/etc/init.d/setserial o simile non concepito per essere modificato
dall'utente. Potrebbero mancare i commenti di aiuto che erano
viceversa presenti nelle versioni precedenti.
8.1.4. Configurazione in fase di avvio
Quando il kernel carica il modulo seriale (o se il modulo
incorporato al kernel) allora solo ttyS{0-3} sono auto-rilevate ed il
driver viene impostato ad IRQ 4 e 3 (a prescindere dalle reali
impostazioni dell'hardware). Potete vedere questo nei messaggi di
avvio proprio come se setserial fosse stato lanciato. Se usate 3 o pi
porte, questo potrebbe generare un conflitto di IRQ.
Per risolvere detti conflitti passando a setserial i veri IRQ (o per
altre ragioni) potrebbe esserci un file da qualche parte che lancia
setserial di nuovo. Questo accade all'inizio della fase di avvio
prima che qualsiasi processo usi la porta seriale. In effetti, la
vostra distribuzione potrebbe avere impostato le cose in modo che il
programma setserial venga lanciato automaticamente da uno script di
avvio in fase di boot. Ulteriori informazioni su come gestire questa
situazione dovrebbero trovarsi in /usr/doc/setserial .../ o simile.
8.1.4.1. Nuovi metodi di configurazione usando /etc/serial.conf
A partire dalle versioni 2.15 (1999) di setserial lo script di shell
che parte da un file in fase di avvio riceve i suoi dati da un file di
configurazione: /etc/serial.conf. Ma serial.conf in genere non viene
mai modificato. Invece si usa semplicemente setserial da riga comandi.
In genere, quello che modificate con il comando setserial viene
salvato nel file di configurazione. Questo funziona solo se
"###AUTOSAVE###" o simile si trova sulla prima riga di serial.conf. Se
doveste usare setserial per sperimentare e la cosa non va a buon fine,
poi non dimenticate di reimmettere i valori originali cos che le
impostazioni sperimentali non vengano salvate per errore. Il file pi
comunemente usato per lanciare setserial in fase di avvio (in
conformit con il file di configurazione) ora /etc/init.d/setserial
(Debian) o /etc/init.d/serial (RedHat), ecc. e non dovrebbe di norma
essere modificato.
Per disabilitare una porta, usate setserial per impostare "uart none".
Il formato di /etc/serial.conf sembra essere proprio uguale a quello
dei parametri piazzati dopo "setserial" sulla riga comandi con una
riga per ogni porta. Se non usate autosave, potreste modificare
/etc/serial.conf manualmente. Per la 2.15, la distribuzione Debian
installa il sistema con autosave attivato, ma Redhat 6.0 ha
semplicemente un file /usr/doc/setserial-2.15/rc.serial che dovete
spostare in /etc/init.d/.
BUG: A luglio 1999 c' un errore/problema visto che con ###AUTOSAVE###
solo i parametri di setserial visualizzati da "setserial -G
/dev/ttyS?" (dove ? = 0, 1, 2, ...) vengono salvati ma gli altri
parametri non lo sono. Questo si ripercuote solo su una piccola
minoranza di utenti visto che i parametri non salvati sono comunque
usati raramente. stato riportato come un bug e potrebbe essere
corretto.
Per fare s che le impostazioni correnti impostate da setserial
vengano salvate nel file di configurazione (serial.conf) senza dovere
spegnere, eseguite quello che normalmente avviene quando spegnete:
Lanciate lo script di shell /etc/init.d/{set}serial stop. Il comando
"stop" salver la configurazione corrente ma le porte seriali
continueranno a funzionare bene.
8.1.4.2. Vecchi metodi di configurazione: modificare uno script
Prima della versione 2.15 (1999) o se la vostra distribuzione ha
scelto di non usare /set/serial.conf, allora dovrete cercare un file
che lancia setserial in fase di avvio. Se non esiste, dovete crearlo
(o piazzare i comandi in un file che viene lanciato all'inizio della
fase di avvio). Se questo file attualmente usato probabilmente si
trova da qualche parte nella directory /etc. Redhat lo ha fornito in
/usr/doc/setserial sebbene dobbiate spostarlo nella directory /etc
prima di usarlo. Potreste usare "locate" per cercare questo file. Ad
esempio potreste digitare: locate "*serial*"
Quello che state cercando potrebbe chiamarsi rc.serial, oppure
0setserial (Debian). Se un file di questo tipo viene fornito, dovrebbe
contenere una serie di esempi "commentati". Rendendo attivi e/o
modificando questi esempi, dovreste essere in grado di impostare tutto
quanto correttamente. Assicuratevi di usare un percorso valido per
setserial ed un valido nome di dispositivo. Potreste eseguire un test
mandando in esecuzione questo file manualmente (basta digitare il suo
nome da superuser) per vedere se funziona bene. Test come questo
molto pi veloce che eseguire ripetuti reboot. Naturalmente potete
anche testare un singolo comando di setserial semplicemente
digitandolo sulla riga comandi.
Lo script /etc/rc.d/rc.serial era comunemente usato nel passato. La
distribuzione Debian usava /etc/rc.boot/0setserial. Un altro file un
tempo usato era /etc/rc.d/rc.local ma non una buona idea usarlo
visto che potrebbe non essere lanciato sufficientemente presto.
stato segnalato che altri processi potrebbero tentare di aprire la
porta seriale prima che rc.local venga eseguito, causando errori nella
comunicazione seriale.
8.1.5. IRQ
Per default, sia ttyS0 che ttyS2 condividono l'IRQ 4, mentre ttys1 e
ttyS3 condividono l'IRQ 3. Ma non permessa la condivisione degli
interrupt seriali, a meno di: 1. avere un kernel 2.2 o superiore, 2.
si compilato il supporto per questa cosa, e 3. il vostro hardware
seriale lo supporta. Vedere ``Condivisione di interrupt e i Kernel
2.2+'' Se avete solo due porte seriali ttyS0 e ttyS1, siete comunque a
posto, visto che non esistono conflitti di condivisione di IRQ per
dispositivi che non esistono. Se aggiungete un modem interno e
conservate ttyS0 e ttyS1, allora dovreste cercare di trovare un IRQ
inutilizzato per assegnarlo al vostro device driver. Se IRQ 5 non
usato da una scheda audio, potrebbe essere adatto da usare per un
modem. Per impostare l'IRQ nell'hardware potreste avere bisogno di
usare isapnp, un BIOS PnP o modificare Linux per renderlo PnP. Per
aiutarvi a determinare quale IRQ di "ricambio" potreste avere,
digitate "man setserial" e cercate diciamo "IRQ 11".
-------------------------- Dal TT-HOWTO --------------------------
Setserial passa al driver della porta seriale sia il numero di
interrupt (IRQ) che l'indirizzo IO della porta. Pu dirvi quale tipo
di chip UART avete se usate il parametro autoconfig. Perch la porta
seriale funzioni, il modulo seriale (per il kernel Linux) deve essere
caricato. Se usate pi di 2 porte seriali e volete assegnare dei
numeri di IRQ univoci (o usate pi di 4 porte seriali), allora dovete
usare setserial. Se la vostra porta seriale plug-and-play dovreste
leggere il Serial-HOWTO. Oltre allaa pagina di manual assicuratevi di
guardare in /usr/doc/setserial se esiste. Potrebbe dirvi come
setserial venga lanciato automaticamente in fase di avvio e come
modificarne la configurazione. Non usate mai setserial coi Laptop
(bus PCMCIA) .
A partire dalla versione 2.15 (1999) di setserial le modifiche fatte a
setserial sulla riga comandi sono talvolta automaticamente salvate
cos che rimarrano valide dopo avere spento il computer.
8.1.6. Dove lanciare Setserial?
A partire dalla versione 2.15 (1999) di setserial il metodo di
configurazione cambiato. Prima della 2.15 la configurazione veniva
effettuata modificando uno script di shell che lanciava setserial.
Dopo la 2.15 c' un file di configurazione: /set/serial.conf che viene
automaticamente modificato per adeguarsi a qualunque cosa venga fatta
con il comando setserial.
Potreste scoprire di avere installati sia il vecchio che il nuovo
sistema di configurazione. Se lo script di shell si chiama
"...pre-2.15" o simile, probabilmente non viene pi usato cos
dovrebbe andare bene per voi conservarlo.
8.1.6.1. Versioni precedenti a 2.15
Prima della 2.15 non c'era un file di configurazione per setserial.
Si doveva modificare lo script di shell che lanciava setserial in fase
di avvio. Dovete cercarlo o creane uno se non esiste. Dove si trovi
dipende dalla vostra distribuzione. Potrebbe essere un file chiamato
"rc.serial". Nella distribuzione Debian era il file 0setserial in
/etc/rc.boot. Un modo per cercarlo usare il comando "locate".
8.1.6.2. Versioni 2.15 e superiori
Non dovreste modificare n il file che lancia setserial n quello di
configurazione. Le modifiche effettuate usando setserial da riga
comandi sono "talvolta" salvate in /etc/serial.conf durante il normale
spegnimento. Questa particolarit viene detta autosave. (auto
salvataggio). Funziona solo se la prima riga di serial.conf contiene
###AUTOSAVE### o simile.
C' un bug che ho riscontrato nella 2.15 ed stato corretto (ma voi
potreste ancora averlo) : con tale bug le modifiche effettuate da
setserial e riferite ad opzioni raramente usate non vengono salvate.
Solo i parametri pi importanti che vedete se date il comando
"setserial -g /dev/ttyS?" vengono salvate.
Se autosave abilitato, allora ogni volta che si avvia il PC,
setserial viene lanciato da /etc/init.d/setserial (o "serial" ecc.)
usando la configurazione salvata.
8.2. Cos' isapnp ?
isapnp un programma per configurare i dispositivi Plug-and-Play
(PnP) sul bus ISA inclusi i modem interni. incluso in un pacchetto
chiamato "isapnptools" ed include un altro programma, "pnpdump" che
trova tutti i vostri dispositivi ISA PnP e vi mostra le opzioni per
configurarli in un formato che potrebbe essere aggiunto al file di
configurazione di PnP: /etc/isapnp.conf. Potrebbe anche essere usato
con l'opzione --dumpregs per mostrare l'indirizzo IO e l'IRQ della
porta seriale del modem correnti. Il comando isapnp potrebbe essere
incluso in un file di avvio cos che esso sia lanciato ogni volta che
si accende il computer e quindi configuri i dispositivi ISA PnP. Si
pu fare questa anche se il vostro BIOS non supporta il PnP. Vedere il
Plug-and-Play-HOWTO.
8.3. Cos' wvdialconf?
wvdialconf cercher di trovare quale porta seriale ha un modem su di
essa. Crea anche un programma di configurazione per il programma
wvdial. wvdial usato per semplificare le chiamate in uscita verso un
ISP (Internet provider) usando il protocollo PPP. Ma non avete bisogno
di installare PPP per potere usare wvdialconf. Esso rilever solo
modem che non sono in uso. Concepir anche automaticamente una stringa
di inizializzazione "adatta" ma talvolta la creer sbagliata. Visto
che il comando non ha opzioni, semplice da usare ma dovete passargli
il nome di un file nel quale mettere la stringa di inizializzazione
(ed altri dati). Ad esempio digitate: wvdialconf miofile.
8.4. Cos' stty?
stty come setserial ma imposta il baud rate ed altri parametri della
porta seriale. Digitando "stty -a < /dev/ttyS2" dovreste visualizzare
come configurata ttyS2. La maggior parte delle impostazioni sono
per cose che non dovreste mai avere bisogno di usare coi modem (tipo
cose usate solo per terminali degli anni '70). Il vostro pacchetto di
comunicazione dovrebbe automaticamente impostare tutta la corretta
configurazione per i modem. Ma stty talvolta utile per risolvere dei
problemi.
Due valori impostati da stty sono: 1. Flusso di controllo hardware
tramite "crscts" e 2. Ignorare il segnale DCD da modem: "clocal". Se
il modem non sta inviando segnali DCD e clocal disabilitato (stty
mostra -clocal), allora un programma potrebbe non essere in grado di
aprire la porta seriale. Se la porta non si pu aprire il programma
potrebbe bloccarsi, attendendo (spesso vanamente) per un segnale DCD
dal modem.
Minicom imposta clocal automaticamente quando viene lanciato quindi
non ci sono problemi. Ma la versione 6.0.192 di Kermit si pianta
quando imposto -clocal e provo "set line...". Se -clocal impostato
e non c' segnale DCD allora anche il comando "stty" si pianter e non
c' modo di impostare clocal (a meno di lanciare minicom). Ma minicom
reimposter -clocal laddove esista. Un modo di uscire da questo
usare minicom per inviare "AT&C" al modem (per ottenere il segnale
DCD), quindi uscire da minicom senza resettare cos che il segnale DCD
rimanga attivo. Poi si pu riusare stty.X
9. Provare il modem (Effettuare una chiamata)
9.1. Siete pronti per effettuare una chiamata?
Una volta che avete collegato il vostro modem e sapete quale porta
seriale attiva, siete pronti ad usarlo. Prima di provare ad accedere
ad Internet o consentire che altri si colleghino al vostro computer,
provate prima qualcosa di pi semplice come chiamare alcuni numeri per
vedere se il vostro modem funziona bene. Se non sapete che numero
chiamare, chiedete nei negozi di computer dei numeri di banche dati,
ecc. oppure vedete se una libreria locale ha un numero di telefono per
il suo catalogo in linea.
Poi assicuratevi di essere pronti a telefonare. Sapete su quale porta
seriale (tipo ttyS2) si trova il vostro modem? Avreste dovuto
scoprirlo quando avete configurato l'io-irq della vostra porta
seriale. Avete deciso quale velocit userete per questa porta? Vedere
``Tabella delle velocit '' per una scelta rapida oppure ``Che
velocit dovrei usare con il mio modem?'' per ulteriori dettagli. Se
non avete idea di quale velocit impostare, impostatela un po'
superiore a quella certificata del vostro modem. Ricordate anche che
se vedete un men dove un opzione "hardware flow control" (controllo
di flusso hardware) e/o "RTS/CTS" o simili, selezionatela. un cavo
telefonico attivo quello collegato al vostro modem? Potreste
connettere il cavo ad un vero telefono per controllare che produca il
segnale di linea.
Ora dovete selezionare un programma di comunicazione da usare per
chiamare il numero. Fra questi programmi includiamo minicom, seyon (X-
windows) e kermit. Vedere la sezione ``Programmi di comunicazione''
per notizie circa alcuni programmi di comunicazione. Un paio di esempi
sono presentati pi avanti: ``Chiamare con Minicom'' e ``Chiamare con
Kermit''.
9.2. Chiamare con Minicom
Minicom viene incluso nella maggior parte delle distribuzioni di
Linux. Per configurarlo dovete esser collegati come root. Digitate
"minicom -s" per configurarlo. Verranno direttamente visualizzati i
men di configurazione. Oppure potete anche digitare "minicom", poi
digitare ^A per vedere la riga di stato in fondo. Essa invita a
digitare ^A Z per un aiuto (se avete gi digitato ^A digitate solo z).
Dal men di aiuto (help men) andate al men di Configurazione
(Configuration menu).
Non occorre impostare la maggior parte delle opzioni se si vuole
semplicemente effettuare una chiamata. Per la configurazione dovete
fornire due semplici voci: il nome della porta seriale connessa al
modem (tipo /dev/ttyS2) e la velocit (tipo 115200). Questi valori si
impostano nel men serial port. Apritelo ed impostate i valori. Poi
(se possibile) impostate il controllo di flusso hardware (RTS/CTS).
Poi salvate. Quando digitate la velocit, dovreste anche vedere
qualcosa tipo "8N1" che dovreste lasciare stare. Vuole dire: Byte da 8
bit, Nessuna parit, 1 bit di stop aggiunto ad ogni byte. Se non
trovate la velocit che desiderate, una velocit minore funzioner
comunque per una prova. Uscite (digitando return) quando avete finito
e salvate la configurazione come default (dfl) usando il men.
Potreste uscire da minicom e poi rilanciarlo per controllare se adesso
trova la porta seriale ed inizializza il modem, oppure potete tornare
all'help e dire a minicom di inizializzare il modem.
Ora siete pronti per chiamare. Ma prima, dalla videata principale che
ottenete dopo avere digitato "minicom", assicuratevi che ci sia un
modem presente digitando AT poi premendo il tasto <enter>. Dovreste
vedere un "OK". Se questo non accade c' qualcosa di sbagliato e sar
impossibile tentare una chiamata.
Se ricevete "OK" tornate all'help e selezionate l'elenco telefonico.
Potete modificarlo e digitare un numero di telefono, ecc.
nell'elenco, poi scegliete "dial" (componi) per chiamare. In
alternativa, potete digitare il numero manualmente (selezionando
"manual" poi digitando il numero sulla tastiera). Se non funziona
annotate accuratamente ogni messaggio di errore visualizzato e cercate
di scoprire cosa non va. Per vedere se minicom ha trovato il modem,
semplicemente lanciatelo e digitate direttamente qualcosa. Tutti i
comandi al modem devono essere prefissati da "AT". Scrivendo quindi
semplicemente "AT" dovreste ricevere in risposta un "OK" dal modem.
9.3. Effettuare una chiamata con Kermit
Trovate l'ultima versione di kermit in
http://www.columbia.edu/kermit/. Ad esempio, diciamo che il vostro
modem si trova in ttyS3 e la velocit 115200 bps. Dovreste fare
questo:
linux# kermit
C-Kermit 6.0.192, 6 Sep 96, for Linux
Copyright (C) 1985, 1996,
Trustees of Columbia University in the City of New York.
Default file-transfer mode is BINARY
Type ? or HELP for help.
C-Kermit>set line /dev/ttyS3
C-Kermit>set carrier-watch off
C-Kermit>set speed 115200
/dev/ttyS3, 115200 bps
C-Kermit>c
Connecting to /dev/ttyS3, speed 115200.
The escape character is Ctrl-\ (ASCII 28, FS)
Type the escape character followed by C to get back,
or followed by ? to see other options.
ATE1Q0V1 ; digitate questo poi Enter
OK ; il modem dovrebbe rispondere cos
Se il modem risponde correttamente ai comandi AT allora si deve
supporre che il vostro modem funziona correttamente per quanto
riguarda Linux. Ora provate a chiamare un altro modem digitando:
ATDT7654321
dove 7654321 un numero di telefono. Usate ATDP in luogo di ATDT se
avete una linea ad impulsi. Se la chiamata esce, il modem sta funzio
nando.
Per tornare al prompt di kermit, tenete premuto il tasto Ctrl, premete
la barra rovesciata, quindi rilasciate il tasto Ctrl, quindi premete
il tasto C:
Ctrl-\-C
(Back at linux)
C-Kermit>quit
linux#
Questo stata una semplice prova usando un primitivo metodo di
chiamata "a mano". Il metodo abituale lasciare che kermit componga
il numero per voi con il suo database di modem interno e le sue
capacit di composizione automatica, ad esempio usando un modem US
Robotics (USR)
linux# kermit
C-Kermit 6.0.192, 6 Sep 1997, for Linux
Copyright (C) 1985, 1996,
Trustees of Columbia University in the City of New York.
Default file-transfer mode is BINARY
Type ? or HELP for help
C-Kermit>set modem type usr ; Seleziona il tipo di modem
C-Kermit>set line /dev/ttyS3 ; Seleziona il dispositivo di comunicazione
C-Kermit>set speed 115200 ; Imposta la velocit... di connessione
C-Kermit>dial 7654321 ; Compone
Number: 7654321
Device=/dev/ttyS3, modem=usr, speed=115200
Call completed.<BEEP>
Connecting to /dev/ttyS3, speed 115200
The escape character is Ctrl-\ (ASCII 28, FS).
Type the escape character followed by C to get back,
or followed by ? to see other options.
Welcome to ...
login:
10. Dial-in - Ricevere chiamate
10.1. Introduzione
Il dial-in quando impostate il vostro PC cos che altri possano
chiamare il vostro numero di telefono ed usare il vostro PC. Il "punto
di vista" il vostro PC. Quando componete un numero esterno dal
vostro PC state nel contempo facendo un dial-in in un altro computer
(ma non potete fare il dial-in nel vostro proprio computer).
Il dial-in funziona cos. Qualcuno con un modem compone il vostro
numero telefonico. Il vostro modem risponde alla chiamata e si
connette. Una volta che il chiamante connesso, il vostro PC invia un
prompt di login al chiamante. Poi il chiamante si collega ed usa il
vostro PC. Usare il vostro PC significa che il chiamante ha un account
di shell e pu usare il vostro PC proprio come se si fosse collegato
tramite console (o terminale di testo). Potrebbe anche significare
che il collegamento avvenuto tramite Internet. Il programma che
usate nel vostro PC per gestire il dial-in chiamato getty.
Spesso, dopo il login, viene lanciato un altro programma, inclusi
programmi per connettere il chiamante ad Internet. Questo HOWTO non
tratta detti programmi che vengono lanciati dopo il login. Per
connettersi ad Internet, viene in genere lanciato il programma PPP
(vedere il PPP-HOWTO, di cui una nuova revisione imminente). Il
login pu essere automatizzato in modo che il programma di
comunicazione automaticamente digiti un "name" e "password" ogni
volta.
10.2. Getty
getty il programma che lanciate per il dial-in. Non ne avete bisogno
per chiamate verso l'esterno (dialout). Oltre a presentare un prompt
di login, risponde anche al telefono. Originariamente getty veniva
usato per il login verso un computer da un terminale stupido.
attualmente usato per il login verso una console Linux. Ci sono alcuni
programmi getty differenti con nomi leggermente diversi. Solo alcuni
funzionano con i modem per il dialin. Questo programma getty viene in
genere lanciato in fase di boot. Deve essere chiamato dal file
/etc/inittab. Potreste trovare un esempio in questo file di una
chiamata a getty nel quale potreste avere bisogno di fare qualche
piccola modifica. Se usate un programma getty diverso da quello
mostato nell'esempio, allora dovreste apportare delle modifiche
importanti visto che le opzioni hanno diversi formati.
Ci sono quattro diversi programmi getty tra cui scegliere che possono
essere usati coi modem per il dialin: mgetty, uugetty, getty_em e
agetty. Alcuni dettagli vengono forniti nelle sottosezioni seguenti.
getty il pi semplice (e pi debole) dei quattro ed alcuni lo
considerano principalmente da usarsi con terminali di testo collegati
direttamente. mgetty supporta fax e voice mail, invece uugetty no.
mgetty si afferma manchi di alcune delle caratteristiche di ugetty.
getty_em una versione semplificata di ugetty. Quindi mgetty
probabilmente la vostra scelta migliore a meno che abbiate gi
familiarit con ugetty (o troviate difficile reperire mgetty). La
sintassi per questi programmi getty differisce, cos assicuratevi di
stare usando la sintassi corretta in /etc/inittab per qualsiasi getty
usiate.
10.2.1. Mgetty
mgetty fu scritto come rimpiazzo di uugetty che esisteva molto prima
di mgetty. Entrambi si possono usare con i modem. Sebbene mgetty possa
anche essere usato per terminali direttamente connessi, la
documentazione per questa cosa difficile da trovare e mgetty (a met
1999) non supporta il controllo di flusso software ( usato da molti
terminali) senza ricompilarlo. Questo difetto viene classificato come
un bug. Oltre a consentire login in dialup, mgetty fornisce supporto
FAX ed autoriconoscimento del PPP. C' un programma addizionale
chiamato vgetty che gestisce le caselle vocali per alcuni modem. La
documentazione per mgetty buona (eccetto per le caselle vocali), e
non necessita di supplementi. Per cortesia riferitevi ad essa per le
istruzioni di installazione. Potete trovare le ultime informazioni su
mgetty a http://www.leo.org/~doering/mgetty/ e
<http://alpha.greenie.net/mgetty>
10.2.2. uugetty
getty_ps contiene due programmi: getty viene usato per le console ed i
terminali, e ugetty per i modem. Greg Hankins (gi autore del Serial-
HOWTO) usava ugetty cos le sue considerazioni circa questo sono l
incluse. Vedere ``Uugetty''. Gli altri getty sono ben trattati dalla
documentazione che li accompagna.
10.2.3. getty_em
Questa una versione semplificata di "uugetty". Fu scritta da Vern
Hoxie dopo che fu completamente confuso dai complessi file di supporto
che occorrono a getty_ps e uugetty.
Fa parte della raccolta di utilit ed informazioni relative alla porta
seriale di Vern Hoxie reperibili tramite ftp da
<scicom.alphacdc.com>.
Il nome della raccolta "serial_suite.tgz". Quando eseguite il login
in "scicom" come anonimi, dovete usare il vostro indirizzo e-mail
completo come password. Ad esempio: greg.hankins@cc.gatech.edu
10.2.4. agetty e mingetty
agetty una semplice e completamente funzionale implementazione di
getty che meglio si adatta alle console virtuali od ai terminali
piuttosto che per i modem. Ma, date determinate condizioni favorevoli,
funziona bene anche con i modem (a meno che voi non eseguiate una
chiamata quando agetty in esecuzione in fase di attesa di chiamate).
agetty nella distribuzione Debian viene semplicemente chiamata getty.
mingetty un piccolo getty che funzioner solo per le console
(monitor), quindi non si pu usare con i modem per il dialin.
10.3. Cosa succede quando qualcuno ci chiama? (dial-in)
Il chiamante lancia un certo programma di configurazione che compone
il vostro numero di telefono ed il vostro telefono squilla. Ci sono
due differenti modi nei quali il vostro PC pu rispondere al telefono.
Un modo che il modem risponda automaticamente alla chiamata. L'altro
modo che getty rilevi lo squillo ed invii un comando al modem che
gli imponga di rispondere alla chiamata. Una volta che viene risposto
alla chiamata, il vostro modem invia dei toni all'altro modem (e
viceversa). I due modem negoziano il modo con il quale essi
comunicheranno e quando finiscono il vostro modem invia un messaggio
di "CONNECT" (connessione) o simile a getty. Quando getty riceve
questo messaggio invia un prompt di login attraverso la porta seriale.
Qualche volta getty invoca semplicemente un programma chiamato login
per gestire il login. getty in genere viene lanciato in fase di boot
ma deve aspettare fino a quando viene effettuata una connessione prima
di fare partire il prompt di login.
Ora ulteriori dettagli sui due modi di rispondere ad una chiamata.
Impostando il registro S0 del modem a 3, il modem automaticamente
risponde al terzo squillo. Se impostato a 0 allora il modem
risponder alla chiamata solo se getty gli invia il comando "A"
(Risposta) mentre il telefono sta squillando. In realt il comando
"ATA" visto che tutti i comandi modem devono essere prefissati da
"AT". Potreste pensare che sia meglio utilizzare la capacit del modem
di rispondere automaticamente alla chiamata, ma in verit meglio
fare s che sia getty a rispondere. Se il modem non risponde
automaticamente, si parla di risposta manuale (anche se getty la
gestisce in modo automatico).
Per il caso di risposta manuale, getty apre la porta in fase di boot e
resta in ascolto. Quando il telefono squilla, un messaggio "RING"
viene inviato a getty che sta ascoltando. Poi se getty vuole
rispondere allo squillo, invia al modem il comando "ATA". Il modem poi
esegue la connessione ed invia il messaggio "CONNECT ..." a getty che
invia un prompt di login al chiamante.
Nel caso della risposta automatica, viene usata la linea CD "Carrier
detect" (Portante rilevata) che va dal modem alla porta seriale per
rilevare quando viene fatta una connessione. Funziona cos. In fase di
boot, getty cerca di aprire la porta seriale, ma fallisce visto che in
genere non c' segnale CD dal modem. Allora il programma getty si
ferma all'istruzione di apertura (open) nel programma fino a che il
segnale CD compare. Quando un segnale CD arriva (forse ore dopo),
allora la porta viene aperta e getty invia il prompt di login. Mentre
getty sta aspettando all'altezza dell'istruzione di apertura, altri
processi possono essere lanciati visto che Linux un sistema
operativo multiprocessing. Quello che fa "svegliare" getty un
interrupt che viene generato quando la linea CD dal modem pone il suo
stato ad on.
Potreste chiedervi come getty sia capace di aprire la porta seriale
nel caso della risposta manuale visto che non vi segnale CD. Bene,
si pu scrivere un programma per forzare l'apertura della porta anche
se non presente un segnale CD.
10.4. Perch la risposta manuale meglio
La differenza tra i due modi di risposta si palesa quando il computer
spento ma il modem sta ancora lavorando. Nel caso manuale, il
messaggio "RING" viene inviato a getty ma visto che il computer
spento, getty non pronta, quindi non ci sar mai risposta al
telefono. Non ci sono addebiti telefonici quando non si risponde alla
chiamata. Nel caso della risposta automatica, c' risposta alla
telefonata ma non verr mai inviato un prompt di login visto che il
computer spento. La bolletta cresce mentre l'attesa continua. Se la
chiamata gratuita, non fa molta differenza, sebbene possa essere
frustrante attendere per un prompt di login che mai arriver. mgetty
usa la risposta manuale. uugetty pu fare questo tramite uno script
di configurazione.
10.5. Callback
Si definisce callback quando qualcuno per primo chiama il vostro
modem. Poi voi ottenete un po' di informazioni dal chiamante e lo
richiamate. Perch si vuole fare questo? Una ragione risparmiare
sulla bolletta se voi potete telefonare al chiamante con tariffe pi
convenienti rispetto alle sue. Un altro assicurarvi che il chiamante
sia davvero colui che sostiene di essere. Se un chiamante vi contatta
e dice di chiamare dal suo abituale numero telefonico, un modo per
verificarlo di effettuare una nuova chiamata a quel numero.
C' un programma per Linux chiamato "callback" che funziona con
mgetty. Si trova in <ftp://ftp.icce.rug.nl/pub/unix/>. Istruzioni
passo-passo su come installarlo (e PPP) si trovano a
<http://www.stokely.com/unix.serial.port.resources/callback.html>
10.6. Casella vocale (Voice Mail)
La casella vocale come una segreteria telefonica eseguita da un
computer. Per fare questo dovete avere un modem con il supporto
"voice" ed il relativo software. Invece di incidere i messaggi su
nastro, essi vengono salvati in forma digitale sul disco. Quando
qualcuno vi chiama, ascolter un messaggio di benvenuto e poi pu
lasciare un messaggio per voi. Sistemi pi avanzati possono avere
caselle postali selezionabili dal chiamante e messaggi da fare
ascoltare selezionabili dall'utente. Software gratuito disponibile
in Linux per la semplice risposta, ma non sembra essere ancora a
disposizione per capacit pi avanzate.
So di due diversi pacchetti di voicemail per Linux. Uno minimale
(vedere ``Voicemail Software''). L'altro, pi avanzato, ma
attualmente scarsamente documentato, vgetty. una aggiunta
opzionale al ben documentato e largamente distribuito programma
mgetty. Supporta i comandi modem vocali tipo ZyXEL. Nella
distribuzione Debian potete ottenere il pacchetto mgetty-voice in
aggiunta al pacchetto mgetty e mgetty-doc. La documentazione obsoleta
stata rimossa da mgetty, ma quella messa al suo posto latitante (a
meno che voi usiate l'opzione -h (aiuto) quando lanciate certi
programmi, ecc). Ma si potrebbero consultare i messaggi circa l'uso
che vengono inviati nel newsgroup di mgetty. Vedere ``About mgetty'' e
>. Sembra che vgetty sia attualmente non molto stabile ma che venga
usato con successo e che il suo sviluppo continui. Se questa
l'ultima versione di questo HOWTO qualcuno che familiare con vgetty
mi faccia cortesemente sapere lo stato attuale delle cose.
11. Uugetty per Dial-in (dal vecchio Serial-HOWTO)
Sappiate che potreste usare mgetty come (migliore?) alternativa a
uugetty. mgetty pi nuovo e pi famoso di uugetty. Vedere ``Cos'
getty?'' per un breve confronto tra questi 2 getty.
11.1. Installare getty_ps
Visto che uugetty parte di getty_ps dovete prima installare
getty_ps. Se non lo avete procuratevi l'ultima versione da
metalab.unc.edu:/pub/Linux/system/serial. In particolare, se volete
usare alte velocit (57600 and 115200 bps), dovete procurarvi la
versione 2.0.7j o superiore. Dovrete anche avere libc 5.x o superiore.
Per default, getty_ps sar configurato come Linux FSSTND (File System
Standard) compatibile, il che significa che si trover in /sbin, ed i
file di configurazione saranno chiamati /etc/conf.{uu}getty.ttySN.
Questo non ben chiaro dalla documentazione! Si aspetta che i file di
lock vadano in /var/lock. Assicuratevi di avere una directory
/var/lock.
Se non volete la compatibilit FSSTND, i file binari andranno in /etc,
quelli di configurazione in /etc/default/{uu}getty.ttySN ed i file di
lock in /usr/spool/uucp. Vi raccomando di agire in questo modo se
state usando UUCP, visto che UUCP avr problemi se spostate i file di
lock in posti dove non sa di doverli cercare.
getty_ps pu anche usare syslogd per registrare messaggi. Vedere le
pagine di manuale per syslogd(1) e syslog.conf(5) per impostare
syslogd, se gi non in esecuzione. I messaggi sono registrati con
priorit LOG_AUTH, gli errori usano LOG_ERR e per il debugging si usa
LOG_DEBUG. Se non volete usare syslogd potete modificare tune.h nei
file sorgente di getty_ps per usare invece un file di registrazione di
messaggi, diciamo /var/adm/getty.log per default.
Decidete se volete la compatibilit FSSTND e la capacit di syslog.
Potrete anche scegliere una combinazione dei due. Modificate Makefile,
tune.h e config.h per adeguarli alle vostre decisioni. Poi compilate
ed installate in base alle istruzioni incluse nel pacchetto.
Da questo punto in poi, tutti i riferimenti a getty faranno capo a
getty_ps. I riferimenti a uugetty si riferiranno a uugetty che viene
incluso nel pacchetto getty_ps. Queste istruzioni non funzioneranno
per mgetty o agetty.
11.2. Impostare uugetty
Con uugetty potreste chiamare l'esterno con il vostro modem mentre
uugetty sta controllando la porta per eventuali login. L'autore
originale di questo HOWTO dice di usare /dev/cuaN per le chiamate in
uscita (con uugetty in esecuzione su /dev/ttyN). Ma altri dicono che
si deve usare /dev/ttyN sia per le chiamate all'esterno che per il
dial-in ??
uugetty esegue degli importanti controlli di file lock. Aggiornate
/etc/gettydefs per includere un riferimento al vostro modem. Mentre
state modificando /etc/gettydefs, potrete verificare l'esattezza della
sintassi facendo:
linux# getty -c /etc/gettydefs
11.2.1. I modem moderni
Se avete dei modem con velocit di 9600 bps e superiori con
compressione dati potete bloccare la vostra porta seriale con una sola
velocit. Ad esempio:
# 115200 fixed speed
F115200# B115200 CS8 # B115200 SANE -ISTRIP HUPCL CRTSCTS #@S @L @B
login: #F115200
Se avete impostato il modem per un controllo di flusso hardware
RTS/CTS dovete aggiungere a CRTSCTS alle voci:
# 115200 fixed speed with hardware flow control
F115200# B115200 CS8 CRTSCTS # B115200 SANE -ISTRIP HUPCL CRTSCTS
#@S @L @B login: #F115200
11.2.2. Vecchi e lenti modem
Se avete un modem lento (sotto i 9600 bps), allora invece di una sola
riga per una singola velocit, avrete bisogno di parecchie righe per
tentare velocit diverse. Notate che queste righe sono legate tra loro
dalla ultima "parola" della riga come ad esempio #38400. Le righe
vuote sono richieste dopo ogni voce
# Voci Modem
115200# B115200 CS8 # B115200 SANE -ISTRIP HUPCL #@S @L @B login: #57600
57600# B57600 CS8 # B57600 SANE -ISTRIP HUPCL #@S @L @B login: #38400
38400# B38400 CS8 # B38400 SANE -ISTRIP HUPCL #@S @L @B login: #19200
19200# B19200 CS8 # B19200 SANE -ISTRIP HUPCL #@S @L @B login: #9600
9600# B9600 CS8 # B9600 SANE -ISTRIP HUPCL #@S @L @B login: #2400
2400# B2400 CS8 # B2400 SANE -ISTRIP HUPCL #@S @L @B login: #115200
11.2.3. Messaggio di login
Se volete, potete far stampare a uugetty delle cosette interessanti
nel messaggio di login. Negli esempi di Greg, egli ha il nome del
sistema, la linea seriale, la velocit in bps corrente. Potete
aggiungere altre cose:
@B La velocit in bps corrente (determinato quando viene visto @B)
@D La data corrente nel formato MM/GG/AA.
@L La linea seriale alla quale uugetty attaccato
@S Il nome del sistema
@T L'ora corrente nel formato HH:MM:SS (24 ore).
@U Il numero degli utenti attualmente collegati. Si tratta del
conteggio del numero di voci nel file /etc/utmp file che
hanno un campo ut_name non vuoto
@V Il valore di VERSION, cos come risulta nei file di default
Per visualizzare un singolo carattere '@' usate '\@' o '@@'.
11.3. Personalizzare uugetty
Ci sono molti parametri da affinare per ogni porta che avete. Essi
sono implementati in file di configurazione separati per ogni porta.
Il file /etc/conf.uugetty verr usato da tutte per tutti i riferimenti
a uugetty e /etc/conf.uugetty.ttySN sar usato solo da quella porta.
Esempi di file di configurazione possono essere trovati con i file
sorgente di getty_ps, che sono inclusi in diverse distribuzioni di
Linux. Per motivi di spazio non sono elencati qui. Notate che se
state usando vecchie versioni di uugetty (inferiori a 2.0.7e) o non
state usando FSSTND, allora il file di default sar
/etc/default/uugetty.ttySN. Il /etc/conf.uugetty.ttyS3 di Greg si
presenta come segue:
# configurazione di esempio di uugetty per un modem Hayes compatibile
# per consentire chiamate modem dall'esterno
#
# file lock sostitutivo da controllare ... se questo file esiste,
# allora uugetty viene fatto ripartire cos che il modem sia
# reinizializzato
ALTLOCK=cua3
ALTLINE=cua3
# linea da inizializzare
INITLINE=cua3
# timeout per disconnettere se inattivo ...
TIMEOUT=60
# stringa di inizializzazione del modem ...
# formato: <expect> <send> ... (chat sequence)
INIT="" AT\r OK\r\n
WAITFOR=RING
CONNECT="" ATA\r CONNECT\s\A
# questa riga imposta il tempo da far trascorrere prima di inviare il
# messaggio di login
DELAY=1
#DEBUG=010
Aggiungete la seguente riga al vostro /etc/inittab, cos che uugetty
sia eseguito sulla vostra porta seriale (sostituendo le informazioni
corrette per il vostro ambiente - run-level (2345 o 345 ecc.)
posizione del file di configurazione, porta, velocit e tipo di
terminale predefinito)
S3:2345:respawn:/sbin/uugetty -d /etc/default/uugetty.ttyS3 ttyS3 F115200 vt100
Rilanciate init:
linux# init q
Per i parametri di velocit in /etc/inittab, usate la pi alta
velocit in bps che il vostro modem pu supportare.
Ora Linux controller la vostra porta seriale per individuare delle
connessioni. Componete il numero da un'altra macchina ed entrate nel
vostro sistema Linux.
uugetty ha molte altre opzioni, controllate la pagina di manuale per
uugetty (spesso chiamato semplicemente getty) per una completa
descrizione. Tra le altre, c' la capacit di scheduling ed anche di
ringback automatica.
12. Che velocit dovrei usare con il mio modem?
Per velocit si intende in verit il rapporto di flusso dei dati
("data flow rate") ma quasi tutti lo chiamano velocit. Per tutti i
modem moderni non si ha la possibilit di scegliere la velocit che il
modem usa sulla linea telefonica visto che viene scelta
automaticamente come la pi alta possibile date le circostanze. Ma
voi avete la possibilit di scegliere che velocit sar usata nelle
comunicazioni tra il modem e il vostro computer. Questa viene chiamata
velocit "DTE" che l'acronimo di Data Terminal Equipment (il vostro
computer un DTE). Dovete impostare questa velocit ad un valore
abbastanza alto in modo che questa parte del tragitto compiuta dal
segnale non costituisca un collo di bottiglia. L'impostazione per la
velocit DTE la velocit massima. La maggior parte delle volte
probabilmente operer ad una velocit inferiore.
Per un modem esterno, la velocit DTE la velocita (in bit per
secondo) del flusso che scorre nel cavo tra il modem ed il PC. Per un
modem interno, concettualmente lo stesso, visto che il modem emula
anche una porta seriale. Pu sembrare ridicolo avere un limite di
velocit nella comunicazione tra un computer ed una scheda modem che
direttamente collegata all'interno del computer ad bus con una
velocit notevolmente superiore. Ma sar cos fino a quando i modem
interni includeranno una porta seriale dedicata che ha limiti di
velocit (e velocit impostabili).
12.1. Velocit e compressione dati
Che velocit scegliere? Se non fosse per la compressione dati si
potrebbe scegliere una velocit DTE esattamente uguale a quella del
modem. La compressione dati prende i byte inviati dal computer al
modem e li codifica in un numero minore di byte. Ad esempio, se il
flusso (velocit) dal PC al modem era di 20,000 byte/secondo (bps) ed
il rapporto di compressione di 2 a 1, allora solo 10,000
byte/secondo usciranno verso la linea telefonica. Quindi per un
rapporto di compressione di 2:1 occorre impostare una velocit doppia
rispetto alla velocit massima del modem sulla linea telefonica. Se il
rapporto di compressione di 3 a 1, occorre impostarla tre volte pi
veloce.
12.2. Dove imposto la velocit?
La velocit DTE normalmente impostata da un men nel vostro
programma di comunicazione o da un'opzione data al comando getty se
qualcuno vi chiama. Non potete impostare la velocit DCE modem-a-
modem.
12.3. Non posso impostare una velocit sufficientemente elevata
Dovete scoprire la velocit pi alta supportata dal vostro hardware.
Alla fine del 1998 la maggior parte dell'hardware supportava velocit
fino a 115.2 bps. Pochi modem interni a 56K supportano i 230.4K bps.
Recenti kernel di Linux supportano le alte velocit (superiori a
115.2K) ma potreste avere difficolt nell'usarle per una delle
seguenti ragioni:
1. Il programma applicativo (o stty) non accetta l'alta velocit.
2. Setserial ha una velocit di default di 115,200 (ma questo default
si pu cambiare facilmente)
12.3.1. Com' impostata la velocit nell'hardware: il divisore e il
baud_base
Ecco un'elenco dei divisori pi comunemente usati e delle loro
velocit corrispondenti (assumendo una velocit massima di 115.200): 1
(115.2K), 2 (57.6K), 3 (38.4K), 6 (19.2K), 12 (9.6K), 24 (4.8K), 48
(2.4K), 96 (1.2K), ecc. Il driver seriale imposta la velocit
nell'hardware inviando al medesimo solamente un "divisore" (un numero
intero positivo). Questo "divisore" divide la velocit massima
dell'hardware, la velocit quindi risulta pi lenta (eccetto che per
divisore 1 che ovviamente dice all'hardware di lavorare a velocit
massima).
In genere, se specificate una velocit di 115.2K (nel vostro programma
di comunicazione o tramite stty) allora il driver seriale imposta
l'hardware della porta a divisore 1 che ovviamente imposta la velocit
massima. Se disponete di hardware con velocit massima di diciamo
230.4K, allora specificando 115.2K risulter un divisore 1, quindi in
realt avrete la velocit di 230.4K. Che la velocit doppia di
quanto avete impostato. In effetti, per qualsiasi velocit che
impostate, la velocit reale sar raddoppiata. Se avete hardware che
potrebbe andare a 460.8K, allora la velocit reale sarebbe il
quadruplo di quella impostata.
12.3.2. Trucchetti per impostare la velocit
Per correggere questi valori (ma non sempre il problema verr risolto)
potreste usare "setserial" per modificare il baud_base alla vera
velocit massima della vostra porta tipo 230.4K. Quindi se impostate
la velocit (tramite la vostra applicazione o da stty) a 230.4K, verr
usato un divisore 1 ed otterrete la stessa velocit di quella da voi
impostata. PROBLEMA: stty e molti programmi di comunicazione (alla
met del 1999) presentano ancora 115.2K quale velocit massima
impostabile e non vi lasceranno impostarla a 230.4K, ecc.. Quindi in
questi casi uno soluzione potrebbe essere non cambiare nulla con
setserial, ma tenersi in mente che la velocit reale sempre il
doppio di quella che avete impostata.
C' un altro trucco che non molto meglio. Per usarlo impostate il
baud_base (con setseria) alla velocit massima del vostro hardware.
Questo corregge il conteggio cos che se impostate 115.2K avrete
effettivamente quella velocit. Ora dovete per ancora scoprire come
impostare una velocit pi alta se il vostro programma di
comunicazione (o simile) non ve lo consente. Fortunatamente, setserial
ha un modo per farlo: usate il parametro "spd_cust" con "divisor 1".
Poi quando impostate la velocit a 38400 nel programma di
comunicazione, il divisore verr impostato ad 1 nella porta ed operer
alla massima velocit. Ad esempio:
setserial /dev/ttyS2 spd_cust baud_base 230400 divisor 1
Non cercate di usare "divisor" per altri scopi diversi dallo speciale
uso illustrato qui sopra (con spd_cust).
Se ci sono due o pi alte velocit che volete usare che il vostro
programma di comunicazione non riesce ad impostare, allora non cos
facile come sopra descritto. Ma si applicano gli stessi principi.
Potreste mantenere la baud_base di default e tenere presente che
quando impostate una velocit in realt impostate solo il divisore.
Cos la vostra velocit reale sar sempre la vostra velocit massima
divisa da qualunque divisore sia impostato nel driver seriale. Vedere
``Com' impostata la velocit nell'hardware: il divisore ed il
baud_base''
12.3.3. La frequenza del cristallo non il baud_base
Notate che l'impostazione del baud_base in genere molto inferiore
rispetto a quella dell'oscillatore di cristallo nel hardware viste la
frequenza del cristallo spesso si ottiene dividendo per 16
nell'hardware per ottenere la vera velocit massima. La ragione per
la quale la frequenza del cristallo deve essere pi alt che pu
essere usata per ottenere diversi campioni di ogni bit per determinare
se un 1 o uno 0.
12.4. Tabella delle velocit
Conviene avere almeno una UART a 16650 per modem a 56K. ma pochi modem
la supportano. Un'alternativa avere una 16550 che stata "truccata"
per dare 230400 bps. Ecco alcune velocit consigliate per impostare la
vostra linea seriale se la velocit del vostro modem :
56K (V.90) usate 115200 bps o 230400 bps (percentualmente di poco
pi veloce?)
28.8K (V.34), 33.6K (V.34) usate 115200 bps
14400 bps (V.32bis), con compressione dati V.42bis usate 57600 bps
9600 bps (V.32), con compressione dati V.42bis usate 38400 bps
modem minori di 9600 bps (V.32), impostate la velocit pi alta che
il modem supporta.
13. Programmi di comunicazione ed utilit
PPP di gran lunga il pi usato. usato per accedere ad Internet.
Per chiamare librerie pubbliche, BBS, ecc. minicom il pi popolare
seguito da Seyon (solo per X-Windows) e Kermit.
13.1. Minicom contro Kermit
Minicom solo un programma di comunicazione mentre Kermit sia un
programma di comunicazione che un protocollo di trasferimento file.
Qualcuno potrebbe usare il protocollo Kermit in Minicom (a patto che
si abbia installato Kermit sul PC). Minicom basato sui men mentre
Kermit basato sulla riga comando (interattiva nello speciale prompt
di Kermit). Mentre Kermit un programma libero, la documentazione non
tutta libera. Non c' un manuale dettagliato fornito e viene
suggerito di acquistare un libro come manuale. Comunque Kermit ha un
aiuto in linea interattivo che dice tutto, ma manca di spiegazioni che
guidino il principiante. I comandi possono essere messi in un file
script cos che non si debbano ripetere ogni volta. Kermit (inteso
come programma di comunicazione) pi potente di Minicom.
Sebbene tutta la documentazione di Minicom sia libera, non cos
esaustiva come quella di Kermit. Visto che occorre un permesso per
includere Kermit in una distribuzione commerciale e visto che la
documentazione non totalmente libera, alcune distribuzioni non
includono Kermit. La mia opinione che pi facile impostare Minicom
e c' meno da imparare.
13.2. Lista di programmi
Ecco una lista di alcuni software di comunicazione dalla quale potrete
scegliere, disponibili via FTP se non si trovano inclusi nella vostra
distribuzione. Gradirei commenti che paragonino i programmi di
comunicazione. Quelli meno popolari sono obsoleti?
13.2.1. I meno popolari
ecu - un programma di comunicazione
pcomm - programma di comunicazione tipo procomm con zmodem
xc - pacchetto di comunicazione xcomm
13.2.2. I pi popolari
minicom - programma di comunicazione tipo telix. Supporta gli
script, zmodem, kermit
C-Kermit <http://www.columbia.edu/kermit/> - portabile, supporta
gli script, comunicazioni seriali e TCP/IP incluso il trasferiemnto
di file, la trascodifica del set di caratteri e supporta zmodem
seyon - programma di comunicazione in ambiente X
xc - programma di comunicazione in ambiente X
13.2.3. Fax
efax un piccolo programma fax
hylafax un programma fax basato sul modello client-server
mgetty+fax gestisce quanto concerne il fax e il login per chiamate
in entrata
13.2.4. Software per Voicemail
mvm <http://www-internal.alphanet.ch/~schaefer/mvm/> un VoiceMail
minimale for Linux
vgetty un'estensione di mgetty che gestisce voicemail per alcuni
modem. Dovrebbe essere compreso in recenti release di mgetty.
13.2.5. Chiamate in entrata (Dial-in) (usa getty)
mgetty+fax per i modem ed ben documentato (eccetto che per
voicemail alla met del 1999). Gestisce anche i fax e risulta
un'alternativa a uugetty. Sta includendo capacit di voicemail
(usando vgetty). Vedere ``mgetty''
uugetty anch'esso per i modem. parte del pacchetto ps_getty.
Vedere ``getty_ps''
13.2.6. Altri
callback voi chiamate un modem remoto, poi quel modem riappende e
vi richiama (per risparmiare sulla bolletta).
SLiRP e term forniscono un servizio tipo PPP che potete lanciare
nello spazio utente su di un computer remoto con uno shell account
Vedere ``term e SLiRP'' per ulteriori dettagli.
ZyXEL un programma di controllo per i modem ZyXEL U-1496.
Gestisce chiamate, connessioni, richiamate di sicurezza, FAX e
funzioni vocali di mailbox
Software SLIP e PPP pu essere trovato in:
ftp://metalab.unc.edu/pub/Linux/system/network/serial.
Altre cose si possono trovare in:
ftp://metalab.unc.edu/pub/Linux/system/serial e
ftp://metalab.unc.edu/pub/Linux/apps/serialcomm o in uno dei molti
mirror. Queste sono le directory dove sono archiviati i programmi.
13.3. SLiRP e term
SLiRP e term sono programmi che servono solo se avete un account shell
in dial-up su di una macchina tipo Unix e volete avere l'equivalente
di un account PPP (o simile) senza essere autorizzati ad averlo (forse
perch non volete pagare per questo, ecc.). SLiRP pi popolare di
term che praticamente obsoleto.
Per usare SLiRP installatelo nel vostro account nel computer remoto.
Poi chiamate l'account e lanciate SLiRP sul remoto e PPP sul vostro PC
locale. Ora avete una connessione PPP attraverso la quale potete
lanciare un browser web sul vostro PC tipo Netscape, ecc. Potrebbero
esserci alcuni problemi visto che SLiRP non cos valido come un vero
account PPP. Alcuni account potrebbero fornire SLiRP visto che esso fa
risparmiare sugli indirizzi IP (non avete indirizzo IP mentre usate
SLiRP).
term qualcosa di simile a SLiRP solo che dovete eseguire term sia
sul computer locale che quello remoto. Non c' PPP sulla linea
telefonica visto che term usa il suo proprio protocollo. Per usare
term dal vostro PC vi occorrer una versione "term-aware" di ftp per
eseguire ftp, ecc. Quindi pi facile usare SLiRP visto che la
versione normale di ftp funziona bene con SLiRP. C' un Term HOWTO
non aggiornato.
14. Cosa sono le UART? In che modo influenzano le prestazioni?
14.1. Introduzione alle UART
(Questa sezione anche nel Serial-HOWTO)
UART (Universal Asynchronous Receiver Transmitter) -
ricevitore/trasmettitore asincrono universale - sono chip seriali
sulla scheda madre del vostro PC (o su una scheda modem interna). La
funzione della UART pu anche essere svolta da un chip che fa anche
altre cose. Sui computer pi vecchi come la maggior parte dei 486, i
chip erano sulla scheda del controller I/O. Alcuni computer pi
vecchi hanno schede seriali dedicate.
Scopo della UART convertire i byte dal bus parallelo del PC in un
flusso seriale di bit. Il cavo che esce dalla porta seriale seriale
ed ha solo un cavo per ogni direzione di flusso. La porta seriale
invia un flusso di bit, un bit alla volta. Al contrario, il flusso di
bit che entra dalla porta seriale via cavo esterno viene convertito in
byte paralleli che il computer pu comprendere. Le UART trattano dati
divisi in pezzi della dimensione di un byte, che per convenienza
anche la dimensione dei caratteri ASCII.
Diciamo che avete un terminale collegato al vostro PC. Quando digitate
un carattere, il terminale consegna quel carattere al proprio
trasmettitore (anche questo una UART). Il trasmettitore invia quel
byte alla linea seriale, un bit alla volta ad una velocit specifica.
Dalla parte del PC, l'UART ricevente prende tutti i bit e ricostruisce
(parallelizza) il byte e lo mette in un buffer.
Oltre alla conversione tra seriale e parallelo, la UART esegue alcune
altre cose come derivazione (effetto collaterale) dei suoi compiti
primari. Il voltaggio usato per rappresentare i bit viene anch'esso
convertito (cambiato). I bit extra (chiamati bit di start e stop) sono
aggiunti ad ogni byte prima che venga trasmesso. Vedere la sezione
"Voltage Waveshapes" del Serial HOWTO per dettagli. Inoltre, mentre il
rapporto di flusso (in byte per secondo) sul bus parallelo all'interno
del computer molto alto, il rapporto di flusso in uscita dalla UART
dalla parte della porta seriale molto pi basso. L'UART ha un elenco
fisso di rapporti (velocit) che pu usare come interfaccia per la sua
porta seriale.
14.2. Due tipi di UART
Ci sono due tipi principali di UART: UART "stupide" (dumb) e UART
FIFO. Le UART "stupide" sono le 8250, 16450, le prime 16550 e le prime
16650. Esse sono obsolete ma se imparate come lavorano, poi facile
comprendere come funzionano le moderne UART FIFO (le ultime 16550,
16550A, 16c552, le ultime 16650 e 16750 e 16C950).
Esiste un poco di confusione per quanto riguarda le 16550. I primi
modelli avevano un bug e lavoravano correttamente solo come 16450 (non
FIFO). I modelli pi recenti con questo bug corretto, vennero chiamate
16550A, ma la maggior parte dei costruttori non fecero proprio il
cambiamento di nome e continuarono a chiamarle 16550.
La maggior parte delle 16550 in uso oggi sono come le 16550A. Linux la
rilever come 16550A anche se il manuale dell'hardware (o l'etichetta)
dicono che si tratta di una 16550. Una situazione simile esiste per le
16650 (solo che peggio visto che il costruttore sembra che non
ammetta che c' qualcosa di sbagliato). Linux rilever un'ultima
16650 come una 16650V2. Se esso la rileva come una 16650 ci sono
cattive notizio e verr usata come se avesse un buffer da un byte.
14.3. FIFO
Per comprendere la differenza tra "stupide" (dumb) e FIFO (First In,
First Out - Il primo che entra il primo che esce) esaminiamo prima
cosa succede quando una UART ha inviato o trasmesso un bute. La UART
stessa non pu fare nulla con i dati che passano attraverso di essa,
semplicemente li riceve e li spedisce. Nella UART "stupide" originali,
la CPU riceveva un interrupt dal driver seriale ogniqualvolta un byte
veniva ricevuto o trasmesso. La CPU poi spostava il byte ricevuto dal
buffer della UART in una qualche parte della memoria, oppure dava alla
UART un altro byte da spedire. Le UART 8250 e 16450 hanno un buffer
di 1 byte. Ci significa che ogni volta che 1 byte viene inviato o
ricevuto, la CPU riceveva un interrupt. A basse velocit di
trasferimento, questo andava bene. Ma ad alte velocit di
trasferimento la CPU diventava cos impegnata a gestire la UART, che
non aveva il tempo per soddisfare adeguatamete gli altri compiti. In
alcuni casi, la CPU non era pronta a servire le richieste di interrupt
in tempo ed il byte era sovrascritto perch arrivava troppo
velocemente. Questo viene chiamato "overrun" o "overflow"
(sovraccarico).
Ecco dove le UART FIFO sono utili. I chip delle 16550A (o 16550) hanno
un buffer FIFO di 16 byte. Questo significa che pu ricevere fino a 14
byte (od inviarne 16) prima che debba inviare un interrupt alla CPU.
Non solo essa pu attendere ulteriori byte, ma la CPU pu poi
trasferirli tutti e 14 (o pi) in un colpo solo. Sebbene la soglia di
interrupt (trigger level) possa essere impostato ad 8 invece che a 14,
c' comunque un vantaggio significativo rispetto alle altre UART, che
hanno solo un byte di buffer. La CPU riceve interrupt, ed libera di
fare altre cose. I dati non sono persi, e tutti sono contenti.
Mentre la maggior parte dei PC hanno delle 16550 con 16 byte di
buffer, le UART migliori hanno buffer ancora pi grandi. Notate che
l'interrupt viene inviato leggermente prima che il buffer si riempia
del tutto (diciamo ad un "trigger level" di 14 byte per un buffer da
16 byte). Questo consente di fare spazio a qualche alto byte da
ricevere durante il tempo che trascorre mentre la richiesta di
interrupt viene esaudita. Il trigger level pu essere impostato a
diversi valori consentiti dal software kernel. Il trigger level di 1
sar quasi come una UART "stupida" (a parte il fatto che comunque ha
ancora spazio per altri 15 byte prima che venga inviato l'interrupt).
Se digitate qualcosa mentre state visitando una BBS, i caratteri che
digitate escono attraverso la porta seriale. I vostri caratteri
digitati che si vedono sullo schermo sono quelli che sono stati
riecheggiati dalla linea telefonica attraverso il vostro modem, quindi
attraverso la vostra porta seriale verso lo schermo. Se si ha un
buffer a 16 byte sulla porta seriale che trattiene i caratteri fino a
che ne ha 14, dovrete digitare parecchi caratteri prima di poter
vedere quello che avete digitato in precedenza. (prima che essi
appaiono sullo schermo). Questo pu creare confusione ma esiste un
"timeout" per prevenire ci. Quindi normalmente si vede un carattere
sullo schermo non appena lo si digita.
Il "timeout" lavora in questo modo per il buffer della UART che
riceve: se i caratteri arrivano uno di seguito all'altro, allora una
richiesta di interrupt viene inviata solo quando il 14 carattere
raggiunge il buffer. Ma se un carattere arriva ed il successivo non
arriva subito dopo, viene richiesto un interrupt. Questo succede anche
se non ci sono 14 caratteri nel buffer (potrebbe anche essercene solo
uno). Quindi quando quello che si digita passa attraverso questo
buffer, esso si comporta come un buffer da 1 byte anche se in realt
un buffer da 16 byte (a meno che la velocit di battitura non sia
centinaia di volte superiore al normale). Vi un timeout anche per il
buffer di trasmissione.
14.4. Numeri di modello di UART
Ecco un elenco di UART. TL il Trigger Level
8250, 16450, prime 16550: Obsolete con buffer da 1 byte
16550, 16550A, 16c552: buffer da 16 byte TL=1,4,8,14
16650: buffer da 32-byte. Velocit fino a 460.8 Kbps
16750: buffer da 64-byte per trasmissione, 56-byte per ricezione.
Velocit fino a 921.6 Kbps
Hayes ESP: buffer da 1K
Quelle obsolete vanno bene solo per modem non superiori a 14.4.k (DTE
con velocit fino a 38400 bps). Per i modem moderni occorre almeno
una 16550 (e non una delle prime 16550). I modem V.90 56k potrebbero
essere percentualmente di molto piu' veloci con una 16650
(specialmente se si scaricano file non compressi). Il vantaggio
principale della 16650 la maggiore dimensione del suo buffer visto
che una velocit extra non necessaria a meno che il rapporto di
compressione del modem sia alto. Alcuni modem interni a 56k potrebbero
essere provvisti di una 16550 ??
Schede multiporta intelligenti e senza UART usano chip DSP per il
buffering e il controllo addizionale, liberando la CPU ancora di pi.
Ad esempio, le schede Cyclades Cyclom e Stallion EasyIO usano una
Cirrus Logic CD1400 RISC UART, e molte schede usano CPU 80186 od anche
CPU RISC speciali per gestire l'IO seriale.
La maggioranza dei PC pi nuovi (486, Pentium o superiori) hanno una
16550A (generalmente chiamata solo 16550). Se avete un qualcosa di
veramente vecchio il chip pu essere scollegato in modo che ci si
possa aggiornare acquistando un chip 16550A rimpiazzando la UART 16450
esistente. Se le funzionalit sono state immesse in un altro tipo di
chip, allora siete sfortunati. Se la UART agganciata ad incastro,
allora l'aggiornamento facile (se siete in grado di trovare un
rimpiazzo). Le nuove e le vecchie hanno i pin compatibili. Potrebbe
essere pi praticabile acquistare semplicemente una nuova scheda
seriale su Internet (alcuni negozi al dettaglio ne hanno a
disposizione oggi).
15. Risoluzione di problemi
15.1. Non posso ottenere 56K dal mio modem a 56K
Deve esserci un livello di disturbo molto basso sulla linea perch il
modem possa solo avvicinarsi ai 56K. Alcune linee telefoniche sono
cos cattive che le velocit ottenibili sono molto pi lente di 56K
(tipo 26.6 od anche meno). Alcune volte telefoni supplementari
connessi alla stessa linea possono causare problemi. Per controllare
questo potreste cercare di connettere il vostro modem direttamente nel
punto dove la linea telefonica si immette nell'edificio,
disconnettendo qualsiasi altra cosa che quella linea alimenti (se
nessuno ha qualcosa in contrario).
15.2. L'invio o lo scarico di file lento o interrotto.
Il controllo di flusso (per il PC e/o per il modem) potrebbe non
essere abilitato. Se avete impostato un'altra velocit DTE (tipo
115.2K) allora il flusso dal vostro modem al vostro PC funziona bene
ma molto del flusso nell'altra direzione non passer completamente a
causa del collo di bottiglia della linea telefonica. Questo risulter
in molti errori e nel reinvio dei pacchetti. Potrebbe anche volerci un
tempo oltremodo lungo per spedire un file. In alcuni casi, i file non
arrivano neppure. Se state scaricando dei grandi file non compressi o
delle pagine web, (ed il vostro modem usa la compressione dei dati)
oppure se avete impostata una bassa velocit DTE, allore lo scarico
potrebbe essere interrotto a causa della mancanza del controllo di
flusso.
15.3. Ricevendo una chiamata continuo a ricevere "line NNN of inittab
invalid"
Ovvero: riga NNN di inittab non valida
Assicuratevi di usare la sintassi corretta per la vostra versione di
init. I diversi init esistenti usano sintassi differenti nel file
/etc/inittab. Assicuratevi di usare la sintassi corretta per la
vostra versione di getty.
15.4. Quando cerco di chiamare l'esterno, ottengo ``/dev/ttySN:
Device or resource busy"
Ovvero: /dev/ttySN: Dispositivo o risorsa occupata
Questo problema pu sorgere quando DCD o DTR non sono implementati
correttamente. DCD dovrebbere attivarsi solo quando esiste una vera
connessione (ad esempio qualcuno ci ha chiamati), non quando getty sta
"osservando" la porta. Controllate che il vostro modem sia
configurato per attivare una DCD solo quando c' una connessione. DTR
dovrebbe essere attivato ogniqualvolta qualcuno stia usando o
"osservando" la linea, come getty o kermit o qualche altro programma
di comunicazione
Un'altra comune causa di errori "device busy" (dispositivo occupato)
quando si imposta la porta seriale con un interrupt che gi preso da
qualcosa d'altro. Quando ogni dispositivo si inizializza, chiede a
Linux il permesso di usare i suoi interrupt hardware. Linux mantiene
traccia di quale interrupt ha assegnato ed a chi, e se il vostro
interrupt gia stato occupato, il vostro dispositivo non sar in
grado di inizializzarsi correttamente. Il dispositivo non ha molti
modi per informarvi che questo capitato, ad eccetto di quando si
tenta di usarlo, allora restituisce un errore di "device busy".
Controllate gli interrupt di tutte le vostre schede (seriali,
ethernet, SCSI, ecc.). Cercate i conflitti di IRQ.
15.5. Continuo a ricevere ``Id "S3" respawning too fast: disabled for
5 minutes''
Id "S3" solo un esempio. In questo caso cercate la riga che inizia
con "S3" in /etc/inittab. Questa la causa del problema. Assicuratevi
che la sintassi per questa riga sia corretta, che il dispositivo
(ttyS3) esista e che possa essere trovato.
Assicuratevi che il vostro modem sia configurato correttamente.
Guardate i registri E e Q. Questo pu capitare quando il vostro modem
sta "chiaccherando" con getty.
Per uugetty, verificate che la sintassi del vostro /etc/gettydefs sia
corretta eseguendo il seguente comando:
linux# getty -c /etc/gettydefs
Questo pu anche capitare quando l'inizializzazione di uugetty
fallisce. Vedere la sezione ``uugetty non funziona ancora''.
15.6. Il mio modem bloccato dopo che qualcuno ha agganciato, oppure
uugetty non riparte
Questo pu capitare quando il vostro modem non effettua il reset dopo
che caduto il DTR. Greg Hankins ha visto i suoi led RD e SD
impazzire quando questo successo. Dovete fare resettare il vostro
modem. Molti modem Hayes compatibili fanno questo con &D3, ma sul suo
USR Courier, ha dovuto impostare &D2 e S13=1. Controllate il manuale
del modem (se ne avete uno).
15.7. uugetty non funziona ancora
Esiste un'opzione DEBUG all'interno di getty_ps. Modificate il vostro
file di configurazione /etc/conf.{uu}getty.ttySN e aggiungete
DEBUG=NNN. Dove NNN una delle seguenti combinazioni di numeri a
seconda di quello che state cercando di debuggare:
D_OPT 001 impostazione opzioni
D_DEF 002 elaborazione file di default
D_UTMP 004 elaborazione di utmp/wtmp
D_INIT 010 inizializzazione della linea (INIT)
D_GTAB 020 elaborazione del file gettytab
D_RUN 040 altre diagnostiche di runtime
D_RB 100 ringback debugging
D_LOCK 200 elaborazione del lockfile di uugetty
D_SCH 400 elaborazione schedule
D_ALL 777 tutto
Impostare DEBUG=010 un buon punto da cui partire.
Se avete in esecuzione syslogd, le informazioni di debugging
appariranno nei vostri file di log. Se non avete in esecuzione
syslogd le informazioni appariranno in /tmp/getty:ttySN per il
debugging getty e /tmp/uugetty:ttySN per uugetty ed in
/var/adm/getty.log. Controllate la informazioni di debugging e vedete
cosa sta succedendo. Molto probabilmente, dovrete regolare alcuni
parametri nel vostro file di configurazione e riconfigurare il modem.
Potete anche provare mgetty. Alcune persone hanno avuto miglior
fortuna con quest'ultimo.
15.8. Il mio modem fisicamente al suo posto ma non pu essere
trovato
Se conoscete le porte seriali esistenti prima di avere installato un
modem interno, allora il problema cercare la nuova porta seriale.
Di questo ci si occupa nella successiva sezione. Questa sezione
riguarda come scoprire quale porta seriale ha un modem su di essa.
C' un programma che cerca i modem sulle porte seriali comunemente
usate chiamato "wvdialconf". Digitate semplicemente "wvdialconf <un-
nuovo-nome-file>". Verr creato il nuovo file come file di
configurazione ma non avrete bisogno di esso a meno che non andiate ad
usare "wvdial" per telefonare. Vedere ``Cos' wvdialconf ?''.
Il vostro problema potrebbe essere dovuto ad un winmodem (o simile)
che non pu essere usato con Linux. Vedere ``Evitare: winmodem''. Il
programma "setserial" potrebbe essere usato per identificare le porte
seriali ma non rilever se ci sono modem collegati ad esse. Quindi
meglio usare prima "wvdialconf".
Un altro modo di vedere se c' un modem su una porta lanciare
"minicom" sulla porta (andate nei men di setup con ^AO). Poi digitate
"AT" e dovreste vedere OK (o 0 se impostato per restituire codici
numerici di risultato ("digit result codes")). Se ci vogliono parecchi
secondi per ottenere una risposta (incluso anche solo il cursore che
si sposta di una riga) allora vedere ``Estremamente lento: il testo
appare sullo schermo lentamente e dopo lunghi ritardi''
15.9. Le seguenti sottosezioni sono sia nel Serial che nel Modem
HOWTO:
15.10. La mia porta seriale fisicamente l ma non pu essere
trovata
Controllate i men ed i messaggi del BIOS. Se c' una porta seriale
PnP od un bus ISA provate "pnpdump --dumpregs" e/o consultate il Plug-
and-Play HOWTO. Per il bus PCI guardate in /proc/pci. Potreste provare
a rilevarla con setserial. Vedere ``Probing''. Se nulla sembra passare
la porta potrebbe esserci ma avere un interrupt sbagliato. Vedere
``Estremamente lento: il testo appare sullo schermo lentamente e dopo
lunghi ritardi''
15.11. Estremamente lento: il testo appare sullo schermo lentamente e
dopo lunghi ritardi
probabilmente un conflitto od una errata impostazione di interrupt.
Ecco alcuni sintomi di quello che potrebbe succedere la prima volta
che cercate di usare un modem, terminale o stampante. In alcuni casi
digitate qualcosa ma sullo schermo non appare nulla se non dopo
parecchi secondi (e potrebbe anche essere solo un invisibile carattere
di <return> ma notate che il cursore scende di una riga) In altri casi
dove dovrebbero comparire molti dati sullo schemo, sono un gruppo di
circa 16 caratteri compare. Poi c' un'attesa di parecchi secondi per
il prossimo gruppo di caratteri. Potreste anche ricevere messaggi di
errore di "input overrun" (o trovarli nei file di log)
Per ulteriori dettaglio sui sintomi e perch questo accade vedere il
Serial-HOWTO sezione "Interrupt Problems Details".
Come controllo finale per vedere se veramente si tratta di un problema
di interrupt, impostate l'IRQ a zero con "setserial". Questo dice al
driver di non usare gli interrupt ma un metodo di polling inefficiente
(ma pi veloce). Se sembra che questo risolva i problemi di
"lentezza", allora si tratta di un problema di interrupt ma dovreste
comunque cercare di risolverlo visto che il polling usa eccessive
risorse del computer. Cercare di trovare il conflitto di interrupt
potrebbe non essere semplice visto che guardare nella directory /proc
potrebbe essere fuorviante. Assicuratevi che nessun IRQ sia condiviso
illegalmente. Controllate tutte le vostre schede (seriali ethernet,
SCSI, ecc...). Assicuratevi di avere impostato correttamente i
ponticelli (o il PnP) ed i parametri di setserial per tutti i vostri
dispositivi seriali. Controllate anche /proc/ioports e
/proc/interrupts e /proc/pci alla ricerca di conflitti. Per ulteriori
dettagli vedere il Serial-HOWTO: Interrupt Problem Details. Se
riguarda i dispositivi Plug-and-Play, vedere anche il Plug-and-Play-
HOWTO
15.12. Abbastanza lento: Mi aspettavo che fosse 2-4 volte pi veloce
Una ragione potrebbe essere che qualunque cosa sia sulla porta seriale
(tipo un modem, un terminale, una stampante) non funziona cos veloce
come pensate che dovrebbe. Un modem a 56k raramente funziona a 56k ed
Internet spesso congestionata ed ha colli di bottiglia che
rallentano le cose.
Un'altra possibile ragione che il driver seriale pensa che abbiate
una porta seriale obsoleta (UART 8250, 16450, o le prime 16550).
Vedere ``Cosa sono le UART?''. Usate "setserial -g /dev/ttyS*". Se
mostra qualsiasi cosa meno di 16550A, allora probabilmente proprio
questo il problema. Se invece "setserial" lo identifica cos
sbagliando, modificatela. Vedere ``Cos' Serial?'' per maggiori
informazioni. Naturalmente se avete veramente una porta obsoleta,
mentire a setserial su questo non far altro che peggiorare le cose.
15.13. La schermata di avvio mostra IRQ sbagliati per le porte seri
ali.
Linux non esegue nessuna identificazione di IRQ in avvio. Quando il
modulo di setserial si carica esegue semplicemente una rilevazione del
dispositivo seriale. Quindi non fate caso a quello che dice circa
l'IRQ, perch sta semplicemente assumendo gli IRQ standard. Cos
fatto, perch l'identificazione degli IRQ inaffidabile e potrebbe
essere ingannevole. Ma se e quando setserial viene lanciata da uno
script di avvio, cambia gli IRQ e visualizza il nuovo (ed
auspicabilmente corretto) stato nella schermata di partenza. Se l'IRQ
sbagliato non viene corretto da una seguente visualizzazione sullo
schermo, allora avete un problema.
Quindi, anche se ho la mia ttyS2 impostata ad IRQ 5, continuo a vedere
ttyS02 at 0x03e8 (irq = 4) is a 16550A
all'inizio quando parte Linux (i vecchi kernel potrebbero mostrare
"ttyS02" come "tty02") Dovete usare setserial per dire a Linux che IRQ
state usando.
15.14. "Cannot open /dev/ttyS?: Permission denied"
Ovvero: Impossibile aprire /dev/ttyS?: Permesso negato
Controllare i permessi su questa porta con "ls -l /dev/ttyS?". Se
siete i proprietari di questa ttyS? allora dovete avere i permessi di
lettura e scrittura: crw con il c (Character device) in colonna 1. Se
non siete i proprietari dovreste invece vedere rw- nelle colonne 8 e 9
che significa che tutti hanno diritti di lettura e scrittura su di
esso. Usate "chmod" per cambiare i permessi. Ci sono modi pi
complicati per ottenere accessi tipo appartenere ad un "gruppo" che ha
permessi di gruppo.
15.15. "Operation not supported by device" (messaggio di errore) per
ttySx
Ovvero: Operazione non supportata dal dispositivo
Questo vuol dire che un operazione richiesta da setserial, stty, ecc.
non pu essere effettuata perch il kernel non la supporta. In
precedenza questo era spesso causato dal fatto che il modulo seriale
non era stato caricato. Ma con l'avvento del PnP, potrebbe pi
probabilmente dire che non c' un modem (od altro dispositivo seriale)
all'indirizzo dove il driver (e setserial) pensa che sia. Se non c'
un modem l, i comandi inviati a quell'indirizzo ovviamente non
vengono eseguiti. Vedere ``Cos' impostato nell'hardware della mia
porta seriale?''.
Se il modulo seriale non era caricato ma "lsmod" mostra che ora
caricato potrebbe essere il caso che sia stato caricato adesso ma non
lo era quando si ricevuto il mesasggio di errore. In molti casi il
modulo verr automaticamente caricato quando necessario (se si riesce
a trovare). Per forzare il caricamento del modulo seriale si potrebbe
elencarlo nel file /etc/modules.conf o /etc/modules. Il vero modulo
dovrebbe risiedere in /lib/modules/.../misc/serial.o.
15.16. "Cannot create lockfile. Sorry" (messaggio di errore)
Ovvero: Spiacente, impossibile creare il file di lock.
Quando viene "aperta" una porta da un programma viene creato un file
di lock in /var/lock. Errati permessi per la directory lock non
consentiranno la creazione di un file di lock. Usare "ls -ld
/var/lock" per vedere se i permessi sono a posto: in genere rwx per
tutti (ripetuto 3 volte). Se sbagliato, usate "chmod" per mettere a
posto lo cose. Naturalmente, se non esiste una directory di lock
nessun file di lock potr esservi creato. Vedere la sottosezione del
Serial-HOWTO: "What Are Lock Files".
15.17. "Device /dev/ttyS? is locked."
Ovvero: Il dispositivo dev/ttyS? bloccato./
Questo vuol dire che qualcun altro (o qualche altro processo) sta
presumibilmente usando la porta seriale. Usate "ps -alx" per
scoprirlo. Cercate qualsiasi programma che usi la porta seriale.
Potreste anche controllare il file di lock che si trova in /var/lock
tipo /var/lock/LCK..ttyS2 (contiene il numero identificativo del
processo che sta usando la porta). Potrebbe essere un processo
"ribelle" che dovrete eliminare. Se il processo non esiste, potreste
rimuovere il file di lock. La maggior parte delle applicazioni fanno
questo automaticamente cos raro che dobbiate ancora rimuovere dei
file di lock manualmente.
15.18. Software che pu essere d'aiuto
modemstat e statserial mostrano lo stato corrente delle varia linee
di segnale (tipo DTR, CTS, ecc)
irqtune dar agli interrupt della porta seriale una priorit
maggiore per migliorare le prestazioni.
hdparm per la messa a punto dell'hard-disk potrebbe fornire un
ulteriore aiuto
16. Aggiornamenti delle memorie Flash
Molti modem possono essere aggiornati riprogrammando la loro memoria
flash tramite un programma di aggiornamento che si ottiene da
Internet. Inviando questo "programma" dal PC tramite la porta seriale
al modem, il modem immagazziner il programma nella sua memoria non
volatile (quella che rimane anche quando il modem viene spento). Le
istruzioni di installazione vertono generalmente su quanto occorre
fare sotto Windows cos dovrete scoprire come fare l'equivalente sotto
Linux (a meno che si voglia installare l'aggiornamento sotto Windows).
L'invio di un programma al modem viene spesso chiamato "download".
Se l'ultima versione di questo HOWTO contiene ancora questa richiesta
(vedere ``Nuove versioni di questo HOWTO'') per favore illustratemi la
vostra esperienza installando questi aggiornamenti, che potrebbe
essere utile ad altri.
Ecco l'idea di base per eseguire un aggiornamento (upgrade). Per prima
cosa, potrebbe esserci un comando che dovete inviare al vostro modem
per dirgli che quello che segue un aggiornamento della flash ROM.
In un caso questo comando era AT**. Per fare questo lanciano un
programma di comunicazione (tipo minicom) e digitare. Prima digitate
AT <enter> per vedere se vostro modem l e risponde "OK".
Poi, dovete inviare un file (talvolta due file) direttamente al modem.
I programmi di comunicazione (come minicom) spesso usano zmodem o
kermit per inviare file al modem (e oltre) ma essi mettono il file
dentro dei pacchetti ai quali aggiungono delle intestazioni, mentre
voi volete che sia inviato il file esatto, non uno modificato. Ma il
programma kermit ha un comando "transmit" che invier il file
direttamente (senza usare i pacchetti kermit), cos questo un modo
di inviare un file direttamente. Minicom al 1998 non ha questa
capacit.
Un altro modo di inviare il(i) file potrebbe essere uscire dal
programma di comunicazione aprendo una shell (in minicom si usa ^AJ)
poi: cat nome_file_aggiornamento > /dev/ttyS2 (se la vostra porta
seriale ttyS2). Poi tornare al programma di comunicazione
(digitando fg al prompt della riga comandi in minicom) per vedere cosa
successo.
Ecco una sessione di esempio per un determinato modem Rockwell (C-a
^A):
- Lanciare minicom
- Digitare AT** : vedere "Download initiated .."
- C-a J
- cat FLASH.S37 > /dev/modem
- fg : vedere "Download flash code .."
- C-a J
- cat 283P1722.S37 > /dev/modem
- fg : vedere "Device successfully programmed"
17. Altre fonti di informazione
17.1. Varie
pagine di manuale per: agetty(8), getty(1m), gettydefs(5),
init(1), isapnp(8), login(1), mgetty(8), setserial(8)
Il vostro manuale del modem (se esiste). Alcuni modem vengono
rilasciati senza manuale.
Serial Suite <ftp://scicom.alphadec.com/pub/linux> di Vern Hoxie
una collezzioni di trucchi sulla cura e l'alimentazione delle porte
seriali in Linux pi alcuni semplici programmi.
La Linux serial mailing list. Per essere inclusi, inviate una email
a majordomo@vger.rutgers.edu, con ``subscribe linux-serial'' nel
corpo del messaggio. Se inviate '`help'' nel corpo del messaggio,
riceverete un messaggio di aiuto. Il server gestisce anche molte
altre liste di Linux. Inviate il comando ``lists'' per un elenco
delle mailing list.
17.2. Libri
Non stato capace di trovare un buon libro aggiornato sui modem.
The Complete Modem Reference by Gilbert Held, 1997. Contiene
troppe informazioni che riguardano argomenti superati. Maggiori
informazioni aggiornate possono essere trovate su Internet.
Modems For Dummies by Tina Rathbone, 1996. (Non l'ho mai visto.)
Ultimate Modem Handbook di Cass R. Lewart, 1998.
17.3. HOWTO
Cable-Modem mini-howto
ISDN Howto (non un Howto di LDP)
<http://www.suse.de/Support/sdb_e/isdn.html>: drivers per ISDN
"Modems". La maggior parte delle informazioni in tedesco
Modems-HOWTO: In Francese (non usato nel creare questo Modem-HOWTO)
NET-3-HOWTO: tutto sul networking, incluso SLIP, CSLIP, e PPP
PPP-HOWTO: aiuto sul PPP incluso il set-up del modem.
Serial-HOWTO ha informazioni sulle schede seriali multiporta usate
sia per terminali che per i banchi di modem. Tratta la porta
seriale pi dettagliatamente di questo HOWTO.
Serial-Programming-HOWTO: per certi aspetti della programmazione
delle porte seriali
Text-Terminal-HOWTO: (incluso la connessione con modem)
UUCP-HOWTO: per informazioni sull'impostazione di UUCP
17.4. newsgroup Usenet
comp.os.linux.answers: FAQ, How-To, README, ecc. su Linux.
comp.os.linux.hardware: Compatibilit hardware con il sistema
operativo Linux.
comp.os.linux.setup: Installazione di Linux e amministrazione del
sistema.
comp.dcom.modems: Modem per tutti i sistemi operativi.
17.5. Siti Web
Comandi AT per modem Hayes: Technical Reference for Hayes (tm)
Modem Users <http://www.hayes.com/TechSupport/techref/>
Comandi per modem basati sul chip Rockwell
<http://www.rss.rockwell.com/techinfo/>
Un white paper che tratta la comunicazione seriale e le schede
seriali multiporta disponibile da Cyclades a
http://www.cyclades.com.
Modem FAQ:
Navas 28800 Modem FAQ
<http://web.aimnet.com/~jnavas/modem/faq.html>
Curt's High Speed Modem Page
<http://www.teleport.com/~curt/modems.html>
Molte informazioni sui modem a 56k 56k Modem = v.Unreliable
<http://808hi.com/56k/>
Links to modem manufacturers
<http://www.56k.com/links/Modem_Manufacturers/>
Identifying modems by FCC ID
<http://www.sbsdirect.com/fccenter.html>
Lista parziale dei modem che funzionano/non funzionano sotto Linux
modem list <http://www.o2.net/~gromitkc/winmodem.html>
18. Appendice A: Come funzionano i Modem (tecnica) (non finita)
18.1. La modulazione nei dettagli
18.1.1. Introduzione alla modulazione
La modulazione la conversione di un segnale digitale rappresentato
da bit binari (0 o 1) in un segnale analogico che potrebbe
assomigliare ad un onda sinusoidale. Il segnale modulato consiste in
un segnale di un onda sinusoidale pura "portante" che modificata per
veicolare informazioni. Un'onda portante sinusoidale pura, non
cambiando in frequenza e voltaggio, non genera un flusso di
informazioni (ad eccezione del fatto che sia presente una portante).
Per fare convogliare le informazioni modifichiamo (o moduliamo) questa
portante. Ci sono 3 tipi principali di modulazione: frequenza,
ampiezza e fase. Verranno di seguito spiegate.
18.1.2. Modulazione di frequenza
Il pi semplice metodo di modulazione la modulazione di frequenza.
La frequenza misurata in cicli per secondo (di un'onda sinusoidale).
il conto del numero di volte in cui la forma dell'onda sinusoidale
ripete se stessa in un secondo. la stessa cosa del numero di volte
che raggiunge il valore pi alto in un secondo. La parola "Hertz"
(abbreviato Hz) viene usato per intendere "cicli per secondo".
Un semplice esempio di modulazione di frequenza dove una frequenza
significa uno 0 binario ed un'altra significa 1. Ad esempio, per
alcuni modem obsoleti da 300 baud, 1070 Hz significa uno 0 binario
mentre 1270 Hz significa un 1 binario. Questo viene chiamato
"Frequency shift keying". Invece di solo due possibili frequenze, se
ne potrebbero usare di pi per consentire la trasmissione di pi
informazioni. Se abbiamo 4 differenti frequenze (che chiameremo A, B,
C, e D), allora ognuna di queste potrebbe supportare un paio di bit.
Ad esempio per inviare 00 si dovrebbe usare la frequenza A. Per
inviare un 01, usiamo la frequenza B, per 10 usiamo C, per 11 usiamo
D. In questo modo, usando 8 frequenze differenti potremo inviare 3 bit
per ogni cambiamento di frequenza. Ogni volta che raddoppiamo il
numero delle frequenze possibili, incrementiamo il numero di bit che
possiamo rappresentare di 1.
18.1.3. Modulazione di ampiezza
Una volta capito l'esempio della modulazione di frequenza sopra
indicato, incluso le possibilit di rappresentare alcuni bit tramite
un singolo spostamento nella frequenza, facile capire sia la
modulazione di ampiezza e la modulazione di fase. Per modulazione di
ampiezza basta cambiare l'altezza (voltaggio) dell'onda sinusoidale
equivalente per cambiare la frequenza dell'onda sinusoidale. Per un
caso semplice ci potrebbero essere solo 2 livelli di ampiezza
consentiti, una rappresentato da un bit 0 e l'altro rappresentato da
un bit 1. Come spiegato per il caso della modulazione di frequenza,
l'avere diverse possibili ampiezze risulter in maggiori informazioni
che si trasmettono per cambiamento in ampiezza.
18.1.4. Modulazione di fase
Per cambiare la modulazione di fase di un onda sinusoidale in un certo
perido di tempo, dobbiamo smettere di inviare questa vecchia onda
sinusoidale ed immediatamente iniziare ad inviare una nuova onda
sinusoidale della stessa frequenza ed ampiezza. Se iniziamo ad inviare
la nuova onda sinusoidale allo stesso livello di voltaggio (e con la
stessa pendenza) presente quando abbiamo interrotto l'invio della
vecchia onda sinusoidale, non ci sar nessun cambio di fase (e nessun
cambio identificabile in assoluto). Ma supponiamo di avere iniziato la
nuova onda sinusoidale ad un differente punto della curva dell'onda
sinusoidale. Si dovrebbe probabilmente verificare un improvviso sbalzo
di voltaggio al punto temporale dove la vecchia onda sinusoidale si
fermata ed iniziata la nuova. Questo uno spostamento di fase ed
misurato in gradi (deg.) Uno spostamento di fase di deg 0 (o di deg
360) significa nessun cambiamento in assoluto, mentre uno spostamento
di fase di 180 inverte il voltaggio (e pendenza) dell'onda
sinusoidale. Rendendolo in altri termini, uno spostamento di fase di
180 deg semplicemente salta in avanti di un mezzo periodo (180 deg) al
punto di transizione. Naturalmente si potrebbe saltare di, diciamo, 90
deg o 135 deg. Cos come nell'esempio della modulazione di frequenza,
maggiori sono i possibili spostamenti di fase, maggiori bit possono
essere rappresentati da un singolo spostamento di fase.
18.1.5. Modulazione combinata
Invece di selezionare semplicemente sia la frequenza, l'ampiezza o la
modulazione di fase, possiamo scegliere di combinare i metodi di
modulazione. Supponiamo di avere 256 frequenze possibili, quindi
possiamo trasmettere un byte (8 bit) per ogni spostamento di frequenza
(visto che 2 elevato alla 8 equivale a 256). Supponiamo anche di avere
altre 256 differenti ampiezze cos che ogni spostamento in ampiezza
rappresenti un byte. Supponiamo anche che ci siano 256 spostamenti di
fase possibili. Poi in un certo momento vogliamo fare uno spostamento
in tutte e 3: frequenza, ampiezza e fase. Questo significherebbe
spedire 3 byte per ognuna di queste transazioni.
Nessun metodo di modulazione in uso oggi fa veramente questo. Non
pratico a causa del tempo relativamente lungo che occorrerebbe per
rilevare tutti i 3 tipi di cambiamento. Il problema principale che
frequenti cambi di fase possono far sembrare che sia accaduto un
cambio in frequenza laddove in realt non successo.
Per evitare questi problemi si potrebbe cambiare simultaneamente solo
la fase e l'ampiezza (senza nessun cambio di frequenza). Questa viene
chiamata modulazione di fase-ampiezza (qualche volta chiamata anche
"quadrature amplitude modulation" = QAM). Questo metodo usato per le
comuni velocit dei modem di 14,4k, 28.8k, e 33.6k. Il solo caso
significativo dove questo metodo di modulazione non viene oggi usato
per i modem a 56k. Ma anche i modem a 56k usano esclusivamente QAM
(modulazione di fase-ampiezza) nella direzione dal vostro PC in uscita
verso la linea telefonica. Qualche volta anche nell'altra direzione
si ritorna alla modulazione QAM quando le condizioni della linea non
sono sufficientemente buone. Quindi QAM (modulazione di fase-ampiezza
) rimane ancora il metodo pi largamente usato nelle ordinarie linee
telefoniche.
18.1.6. Modem 56k (v.90)
Il metodo di modulazione usato sopra i 33.6k completamente diverso
dalla comune modulazione fase-ampiezza. Visto che le chiamate
telefoniche ordinarie sono convertite in segnali digitali nelle
centraline locali della compagnia telefonica, la velocit pi elevata
con la quale si possono spedire dati digitali tramite una ordinaria
chiamata telefonica la stessa di quella che la compagnia telefonica
usa lungo la sua porzione digitale della trasmissione della chiamata
telefonica. Qual' questa velocit? Beh, vicina ai 64Kbps. Dovrebbe
essere 64k ma talvolta alcuni bit sono "rubati" per scopi di
segnalazione. Ma se la compagnia telefonica sa che il collegamento
digitale, i bit potrebbero non essere rubati. Verr presentato il caso
dei 64k, quindi verr spiegato perch la velocit reale pi bassa
(56k o meno -- in genere significativamente meno).
Quindi 64k la maggiore velocit possibile per una chiamata
telefonica ordinaria usando la porzione digitale del circuito che era
stata concepita per inviare le codifiche digitali della voce umana.
Per potere usare 64k, il modem deve sapere esattamente come la
compagnia telefonica faccia la sua codifica digitale del segnale
analogico. Questo compito troppo complicato se entrambi gli estremi
di una chiamata telefonica hanno un'interfaccia analogica alla
compagnia telefonica. Ma se da una parte si ha una interfaccia
digitale, allora possibile (almeno in una direzione). Quindi se il
vostro ISP ha una interfaccia digitale con la compagnia telefonica,
l'ISP pu inviare un certo segnale digitale attraverso la linea
telefonica verso il vostro PC. Il segnale digitale dall'ISP viene
convertito in analogico alla centralina telefonica vicina alla
locazione fisica del vostro PC (forse vicino a casa vostra). Poi
compito del vostro modem cercare di capire esattamente che cos'era
quel segnale digitale. Se pu fare questo, allora la trasmissione a
64k (la velocit del segnale digitale della compagnia telefonica)
possibile in questa direzione.
Che metodo usa la compagnia telefonica per decodificare in digitale i
segnali analogici? Usa il metodo di campionare l'ampiezza del segnale
analogico alla velocit di 8000 campioni per secondo. Ogni ampiezza
campione codificata come un byte a 8 bit (tipo ASCII). (Notare: 8 x
8000 = 56k). Questa viene chiamata "Pulse Code Modulation" = PCM.
Questi byte sono poi inviati digitalmente sui circuiti digitali della
compagnia telefonica dove diverse chiamate condividono un singolo
circuito, usando uno schema di time-sharing chiamato "time division
multiplexing". Poi finalmente nella locale centralina telefonica
vicina a casa vostra, il segnale digitale viene demultiplexato
risultando nello stesso segnale digitale cos come originariamente
creato da PCM. Questo segnale viene poi riconvertito in analogico ed
inviato a casa vostra. Ogni byte da 8-bit crea una certa ampiezza del
segnale analogico. Il vostro modem deve determinare cosa era quel byte
PCM a 8 bit basandosi sulla ampiezza che rileva.
Questa (in un certo senso) una "demodulazione di ampiezza" ma non
realmente. Non si tratta di "demodulazione di ampiezza" perch non vi
portante. In verit, viene chiamata "conversione di modulo"
("modulus conversion") che l'inverso di PCM. Per determinare il
segnale digitale che la compagnia telefonica ha usato per creare il
segnale analogico, il modem deve campionare questo segnale di ampiezza
analogica esattamente agli stessi punti temporali che la compagnia
telefonica ha usato quando ha creato il segnale analogico. Per fare
questo viene un generato un segnale temporizzato dal segnale residuo
di 4k Hz sulla linea telefonica. I campioni di ampiezza che escono
dalla vostra casa/ufficio ad 8k campioni/sec circa creano un segnale
di 4k. Supponete che ogni altra ampiezza era di polarit opposta.
Allora dovrebbe essere stata creata un'onda simile al seno di 4k Hz.
Ogni ampiezza in un certo senso un simbolo ad 8 bit e quando si
campionano le ampiezze conosciuto come "symbol timing".
Ora la codifica di queste ampiezze in PCM non lineare ed a basse
ampiezza le differenze tra le ampiezze adiacenti sono molto piccole.
Cos per facilitare la distinzione delle ampiezze che sono ravvicinate
tra loro, alcune ampiezze non sono usate nello schema di modulazione.
Questo d un delta pi ampio tra le possibili ampiezze e fa s che il
modem le riconosca correttamente con pi facilit. Se la met dei
livelli di ampiezza non fossero usati dal v.90 e se volesse essere
equivalente ad ogni simbolo (livello di ampiezza consentito) che
rappresenta 7 bit invece di 8. Ecco da dove proviene il 56k: 7
bit/simboli x 8k simboli/secondo = 56k bps. Naturalmente ogni simbolo
genera in realt 8 bit ma solo 128 byte dei possibili 256 sono
effettivamente usati. C' una tavola di codici che mappa questo 128
byte a 8 bit con quelli a 7 bit.
Ma un poco pi complicato di questo. Se le condizioni della linea
non rasentano la perfezione, allora sono usati anche meno livelli
(simboli), risultando in velocit sotto i 56k. Anche a causa di regole
governative che proibiscono gli alti voltaggi sulle linee telefoniche,
certi alti livelli di ampiezza non posssono essere usati, risultando
quindi in soli 53.3k circa al massimo per i modem a 56k.
Notate che la parte digitale della rete telefonica bi-direzionale.
Questi due circuiti sono usati per una chiamata telefonica, uno in
ciascuna direzione. Nella direzione dalla casa/ufficio verso l'ISP usa
lo schema convenzionale di modulazione fase-ampiezza con un massimo di
36.6k (e non 53.3K)
19. Appendice B: "baud" contro "bps"
19.1. Un semplice esempio
"baud" e "bps" sono forse due dei termini pi abusati nel campo dei
computer e delle telecomunicazioni. Molte persone usano questi due
termini indifferentemente, quando in realt essi sono diversi! bps
semplicemente il numero dei bit trasmessi per secondo. Il baud rate
la misura di quante volte per secondo un segnale cambia (o potrebbe
cambiare). Per una comune porta seriale il bit 1 -12 volt e il bit 0
+12 v (volt). Se 38.400 bps sono una sequenza di 010101 ...
dovrebbero essere anche 38.400 baud visto che il voltaggio cambia
avanti e indietro da positivo a positivo a negativo ... e ci sono
38400 cambiamenti per secondo. Per un'altra sequenza, diciamo
111000111... ci saranno minori cambiamenti di voltaggio visto che per
i tre 1 in sequenza il voltaggio rimane a -12 volt, eppure diciamo che
abbiamo ancora 38.400 baud visto che esiste la possibilit che il
numero di cambiamenti per secondo raggiunga quel valore.
Vista in altro modo, mettiamo un immaginario marcatore che separi ogni
bit (anche se il voltaggio potrebbe non cambiare). 38.400 baud quindi
significa 38.400 marcature per secondo. La marcatura scatta
all'istante del cambiamento permesso e sono in realt marcati da un
segnale di un clock sincronizzato generato dall'hardware ma non
inviato attraverso il cavo esterno.
Supponiamo che un "cambiamento" possa avere pi dei 2 possibili
risultati dell'esempio precedente (di +- 12 volt). Supponiamo che
abbia 4 possibili risultati, ognuno rappresentato da un diverso
livello di voltaggio. Ogni livello potrebbe rappresentare un paio di
bit (come 01). Per esempio, -12 v potrebbe essere 00, -6v 01, +6b 10 e
+12v 11. Ecco che la velocit di bit doppia rispetto alla velocit
di baud. Ad esempio, 3000 cambiamenti per secondo genereranno 2 bit
per ogni cambiamento risultanti in 6000 bit per secondo (bps). In
altre parole 3000 baud equivalgono a 6000 bps.
19.2. Esempi reali
L'esempio di cui sopra oltremodo semplice. Esempi reali sono molto
pi complicati ma si basano sullo stesso concetto. Questo dimostra
come un modem che va a 2400 baud possa inviare 14400 bps (o pi). Il
modem acquisisce una velocit di bps maggiore di quella di baud,
codificando molti bit per ogni cambio di segnale (o transizione).
Quindi, quando 2 o pi bit sono codificati per baud, la velocit in
bps supera quella in baud. Se la vostra connessione modem-a-modem di
14400 bps, si trasmetteranno 6 bit per segnale (o simbolo) di
transizione a 2400 baud. Una velocit di 28000 bps ottenuta da 3200
baud a 9 bit per baud. Quando la gente usa in modo equivoco il termine
baud, probabilmente intende la velocit del modem (tipo 33.6k)
La velocit di bps del normali modem erano precedentemente 50, 75,
110, 300, 1200, 2400, 9600. Esse erano anche le velocit bps nei cavi
da porta seriale a modem. Oggi le velocit bps da modem a modem sono
di 14.4K, 28.8K, 33.6K, and 56K, ma le velocit dalla porta seriale al
modem non sono le stesse ma sono: 19.2K, 38.4K, 57.6K, 115.2K. Usando
modem con una compressione V.42bis (massima compressione 4:1), le
velocit fino a 115,2K bps sono possibili per modem a 33.6K (230.4K
possibile per i modem a 56K).
Eccettuati i modem a 56K, la maggior parte dei modem girano a 2400,
3000 o 3200 baud. A causa delle limitazioni di ampiezza di banda
nelle linee telefoniche voice-grade, velocit in baud superiori a 2400
sono difficili da raggiungere e solo lavorando in condizioni di
qualit della linea telefoniche perfetta.
Come inizia questa confusione tra bps e baud? Bene, torniamo all'epoca
nella quale i vecchi modem a bassa velocit erano considerati modem ad
alta velocit, la velocit bps in effetti era uguale alla velocit
baud. Un bit era codificato per ogni cambiamento di fase. La gente
usava bps e baud intercambiabilmente, visto che rappresentavano lo
stesso valore. Ad esempio, un modem a 300 bps aveva pure una velocit
in baud di 300. Tutto questo cambia quando i modem pi veloci
entrarono in circolazione e la velocit in bit super la velocit in
baud. ''baud'' deriva da Emile Baudot, l'inventore della stampante
telegrafica asincrona. Un modo per risolvere questo problema consiste
nell'usare il termine "symbol rate" invece di "baud", quindi evitando
di usare il termine "baud".
20. Appendice C: Connessione Terminal Server
Questa sezione adattata da Text-Terminal-HOWTO. Un server di
terminale qualcosa come un interruttore intelligente che pu
connettere molti modem (o terminali) ad uno o pi computer. Non un
interruttore meccanico cos esso pu modificare le velocit ed i
protocolli del flusso di dati che gli passano attraverso. Diverse
compagnie costruiscono terminal server: Xyplex, Cisco, 3Com,
Computone, Livingston, ecc. Ci sono di diversi tipi e capacit.
necessario un altro HOWTO per confrontarli e descriverli (inclusa la
possibilit di crearsi il proprio terminal server con un PC Linux). La
maggior parte sono usati per connettere modem piuttosto che connettere
direttamente terminali.
Un uso per essi quello di connettere molti modem (o terminali) ad
una rete ad alta velocit la quale si connette a dei computer host.
Naturalmente il terminal server deve avere la potenza di calcolo ed il
software per far girare protocolli di rete come se fosse per certi
versi un computer. Il terminal server potrebbe interagire con l'utente
e chiedergli quale computer connettere a quale altro, ecc. oppure
potrebbe connettere senza chiedere. Si potrebbe qualche volta inviare
dei jobs ad una stampante attraverso il terminal server.
Oggi un PC ha sufficiente potenza di calcolo per agire come un
terminal server eccetto che ogni porta seriale dovrebbe avere il
proprio interrupt hardware. I PC hanno solo pochi interrupt di riserva
per questo scopo e visto che sono hard-wired non potete creare pi di
tanto tramite software. Una soluzione usare un'avanzata scheda
seriale multiporta che ha il suo proprio sistema di interrupt (sui
modelli a basso costo, condividono uno degli interrupt del PC tra
diverse porte). Vedere Serial-HOWTO per maggiori informazioni. Se un
PC ha Linux e fa girare getty su molte porte seriali, si potrebbe
pensare ad esso come ad un terminal server. Esso in effetti un
terminal server se collegato ad altri PC attraverso una rete e se il
suo compito principalmente quello di far passare dati e gestire gli
interrutp della porta seriale ogni 14 (circa) byte. Un software
chiamato "radius" talvolta usato.
Oggi i veri terminal server servono pi che da semplici terminali.
Essi servono dei PC che emulano terminali e sono talvolta collegati ad
una batteria di modem connessi alle linee telefoniche. Alcuni hanno
anche i modem costruiti al loro interno. Se un terminale (o un PC che
lo emula) connesso direttamente ad un modem, il modem dall'altro
capo della linea potrebbe essere connesso ad un terminal server. In
alcuni casi il terminal server per default si aspetta che i chiamanti
usino pacchetti PPP, qualcosa che i terminali testuali reali non
generano.
21. Appendice D: Altri tipi di Modem
Questo HOWTO attualmente tratta dei comuni tipi di modem usati per
connettere un PC ad una linea telefonica analogica ordinaria. Ci sono
diversi altri tipi di modem, inclusi quei dispositivi chiamati modem
ma che non sono veramente modem.
21.1. Modem Digitale-a-Digitale
La definizione standard di un modem talvolta allargata fino ad
includere i modem "digitali". Oggi servizi diretti digitali sono
forniti in diverse case ed uffici cos che un computer possa inviare
all'esterno segnali digitali direttamente (beh, quasi) alla linea
telefonica. Ma un dispositivo comunque richiesto per convertire il
segnale digitale del computer in un tipo permesso sui circuiti
telefonici e questo dispositivo tavolta chiamato modem. Le
successive 2 sezioni: ISDN e DSL trattano dei "modem" digitale-a-
digitale.
21.2. "Modem" ISDN
Il modem in realt un Terminal Adapter (TA). Un pacchetto Debian
chiamato "isdnutils" disponibile. C' un ISDN Howto in tedesco con
traduzione in inglese: <http://www.suse.de/Support/sdb_e/isdn.html>.
Si trova nella distribuzione SuSE di Linux e presumibilmente riguarda
dei driver disponibili in quella distribuzione. C' anche un
pacchetto isdn4Linux ed un newsgroup: de.alt.comm.isdn4linux. Molti
dei messaggi sono in tedesco. Potreste provare ad uasre un motore di
ricerca (tipo DejaNews) per cercare "isdn4linux".
21.3. Digital Subscriber Line (DSL)
DSL usa l'esistente doppino telefonico dalla vostra casa (ecc) alla
locale centralina telefonica. Questo pu essere usato se la vostra
linea telefonica pu accettare velocit superiori a quelle che un
modem ordinario (diciamo 56k) invia. Rimpiazza il convertitore
analogico-digitale nella locale centralina telefonica con un
convertitore che pu accettare un flusso di dati molto pi veloce (in
un formato differente naturalmente). Il dispositivo che converte i
segnali digitali dal vostro computer al segnale usato per
rappresentare i dati digitale sulla linea telefonica locale
anch'esso chiamato modem. Questo documento attualmente non tratta gli
speciali aspetti di questi modem.
|