aboutsummaryrefslogtreecommitdiff
path: root/zh_CN.GB2312/books/handbook/serialcomms/chapter.sgml
blob: 350824d971318557343be7e1c003446b4a872f05 (plain) (blame)
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
<?xml version="1.0" encoding="GB2312" standalone="no"?>
<!--
     The FreeBSD Documentation Project
     The FreeBSD Simplified Chinese Project

     Original Revision: 1.136
     $FreeBSD$
-->

<chapter id="serialcomms">
  <title>串口通讯</title>

  <sect1 id="serial-synopsis">
    <title>概述</title>

    <indexterm><primary>串口通讯</primary></indexterm>

    <para>&unix; 一直都是支持串口通讯的。事实上,
      早期的 &unix; 系统就是利用串口线来输入和输出数据的。
      那时常见的 <quote>终端</quote> 包括一个每秒10个字符的串口打印机和键盘,
      现在这些已经发生了很大的变化。 这章将介绍一些利用 FreeBSD
      进行串口通讯的方法。</para>

    <para>读完这章,您将了解到:</para>

    <itemizedlist>
      <listitem>
        <para>如何通过终端连接到您的FreeBSD系统。</para>
      </listitem>
      <listitem>
        <para>如何使用modem拨号到远程主机。</para>
      </listitem>
      <listitem>
        <para>如何允许远程用户通过modem登录到您的系统。</para>
      </listitem>
      <listitem>
        <para>如何从串口控制台引导您的系统。</para>
      </listitem>
    </itemizedlist>

    <para>阅读这章之前,您应当了解:</para>

    <itemizedlist>
      <listitem>
        <para>如何配置和安装一个新的内核 (<xref
            linkend="kernelconfig"/>)。</para>
      </listitem>
      <listitem>
        <para>理解 &unix; 的权限和进程 (<xref
            linkend="basics"/>)。</para>
      </listitem>
      <listitem>
        <para>准备您打算在 FreeBSD 中使用的串口设备
          (modem 或多插口卡)的技术参考手册。</para>
      </listitem>
    </itemizedlist>
  </sect1>

  <sect1 id="serial">
    <title>介绍</title>

    <warning>
      <para>&os; 8.0 开始, 用于串口的设备节点从
	<filename>/dev/cuad<replaceable>N</replaceable></filename> 改为了
	<filename>/dev/cuau<replaceable>N</replaceable></filename>;
	从
	<filename>/dev/ttyd<replaceable>N</replaceable></filename> 改为了
	<filename>/dev/ttyu<replaceable>N</replaceable></filename>&os;&nbsp;7.X 用户需要根据实际情况对这份文档中的例子进行必要的调整。</para>
    </warning>
    <!-- XXX Write me! -->

    <sect2 id="serial-terminology">
      <title>术语</title>

      <variablelist>
	<indexterm><primary>bits-per-second</primary></indexterm>
	<varlistentry>
	  <term>bps</term>
	  <listitem>
	    <para>每秒位&mdash; 数据的传输速度</para>
	  </listitem>
	</varlistentry>

	<varlistentry>
	  <term>DTE</term>
	  <listitem>
	    <indexterm><primary>DTE</primary></indexterm>

	    <para>数据终端设备 &mdash; 如您的计算机</para>
	  </listitem>
	</varlistentry>

	<varlistentry>
	  <term>DCE</term>
	  <listitem>
	    <indexterm><primary>DCE</primary></indexterm>

	    <para>数据通讯设备 &mdash; 如您的modem</para>
	  </listitem>
	</varlistentry>

	<varlistentry>
	  <term>RS-232</term>
	  <listitem>
	    <indexterm><primary>RS-232C cables</primary></indexterm>

	    <para>用于硬件串口通讯的EIA标准</para>
	  </listitem>
	</varlistentry>
      </variablelist>

      <para>当讨论通讯数据速度的时候,这节不会使用术语
	<quote>baud</quote>。Baud指电气标准传输率,它已经使用了很长时间,
	而 <quote>bps</quote> (bits per second) 才是正确使用的术语
	(至少它不会打扰那些爱争吵的家伙)。</para>
    </sect2>

    <sect2 id="serial-cables-ports">
      <title>线缆和端口</title>

      <para>要将 modem 或终端与您的 FreeBSD 系统相连,
	您的计算机需要一个串口, 以及用于连接串口设备所需的线缆。
	如果您比较熟悉硬件及所需要的电缆, 则可以跳过这节。</para>

      <sect3 id="term-cables">
	<title>线缆</title>

	<para>串口线缆有许多不同的种类。 最常见的两种类型是 null-modem
	  线缆和标准 (<quote>直联</quote>) RS-232 线缆。
	  您的硬件说明书中会介绍应使用的线缆种类。</para>

	<sect4 id="term-cables-null">
	  <title>Null-modem线缆</title>

	  <indexterm>
	    <primary>null-modem cable</primary>
	  </indexterm>
	  <para>null-modem 电缆会直接传送某些信号, 如 <quote>Signal
	    Ground</quote> (信号地), 但对其他信号进行交换。
	    例如, <quote>Transmitted Data</quote> (数据发送) 引脚是连到另一端
	    <quote>Received Data</quote> (数据接收) 引脚的。</para>

	  <para>也可以自行制作 null-modem 电缆给终端使用 (例如, 为了品质的要求)。
	    下面的表格展示了 RS-232C
	    <link linkend="serialcomms-signal-names">信号</link>,
	    以及 DB-25 连接器上的引脚。 注意, 标准也要求一根直通引脚 1 到引脚 1<emphasis>保护地 (Protective Ground)</emphasis>
	    线, 但这通常都被省掉。 某些终端在只有引脚 237 的时候,
	    就已经能够正常使用了, 而其他一些,
	    则需要下面例子中所展示的不同的配置。</para>

	  <table frame="none" pgwide="1">
	    <title>DB-25 to DB-25 Null-Modem Cable</title>

	    <tgroup cols="5">
	      <thead>
		<row>
		  <entry align="left">信号</entry>
		  <entry align="left">引脚 #</entry>
		  <entry></entry>
		  <entry align="left">引脚 #</entry>
		  <entry align="left">信号</entry>
		</row>
	      </thead>

	      <tbody>
		<row>
		  <entry>SG</entry>
		  <entry>7</entry>
		  <entry>连接到</entry>
		  <entry>7</entry>
		  <entry>SG</entry>
		</row>

		<row>
		  <entry>TD</entry>
		  <entry>2</entry>
		  <entry>连接到</entry>
		  <entry>3</entry>
		  <entry>RD</entry>
		</row>

		<row>
		  <entry>RD</entry>
		  <entry>3</entry>
		  <entry>连接到</entry>
		  <entry>2</entry>
		  <entry>TD</entry>
		</row>

		<row>
		  <entry>RTS</entry>
		  <entry>4</entry>
		  <entry>连接到</entry>
		  <entry>5</entry>
		  <entry>CTS</entry>
		</row>

		<row>
		  <entry>CTS</entry>
		  <entry>5</entry>
		  <entry>连接到</entry>
		  <entry>4</entry>
		  <entry>RTS</entry>
		</row>

		<row>
		  <entry>DTR</entry>
		  <entry>20</entry>
		  <entry>连接到</entry>
		  <entry>6</entry>
		  <entry>DSR</entry>
		</row>

		<row>
		  <entry>DTR</entry>
		  <entry>20</entry>
		  <entry>连接到</entry>
		  <entry>8</entry>
		  <entry>DCD</entry>
		</row>

		<row>
		  <entry>DSR</entry>
		  <entry>6</entry>
		  <entry>连接到</entry>
		  <entry>20</entry>
		  <entry>DTR</entry>
		</row>

		<row>
		  <entry>DCD</entry>
		  <entry>8</entry>
		  <entry>连接到</entry>
		  <entry>20</entry>
		  <entry>DTR</entry>
		</row>
	      </tbody>
	    </tgroup>
	  </table>

	  <para>这里还有两种目前比较流行的其他接线方式。</para>

	  <table frame="none" pgwide="1">
	    <title>DB-9 到 DB-9 Null-Modem 电缆</title>

	    <tgroup cols="5">
	      <thead>
		<row>
		  <entry align="left">信号</entry>
		  <entry align="left">引脚 #</entry>
		  <entry></entry>
		  <entry align="left">引脚 #</entry>
		  <entry align="left">信号</entry>
		</row>
	      </thead>

	      <tbody>
		<row>
		  <entry>RD</entry>
		  <entry>2</entry>
		  <entry>接到</entry>
		  <entry>3</entry>
		  <entry>TD</entry>
		</row>

		<row>
		  <entry>TD</entry>
		  <entry>3</entry>
		  <entry>接到</entry>
		  <entry>2</entry>
		  <entry>RD</entry>
		</row>

		<row>
		  <entry>DTR</entry>
		  <entry>4</entry>
		  <entry>接到</entry>
		  <entry>6</entry>
		  <entry>DSR</entry>
		</row>

		<row>
		  <entry>DTR</entry>
		  <entry>4</entry>
		  <entry>接到</entry>
		  <entry>1</entry>
		  <entry>DCD</entry>
		</row>

		<row>
		  <entry>SG</entry>
		  <entry>5</entry>
		  <entry>接到</entry>
		  <entry>5</entry>
		  <entry>SG</entry>
		</row>

		<row>
		  <entry>DSR</entry>
		  <entry>6</entry>
		  <entry>接到</entry>
		  <entry>4</entry>
		  <entry>DTR</entry>
		</row>

		<row>
		  <entry>DCD</entry>
		  <entry>1</entry>
		  <entry>接到</entry>
		  <entry>4</entry>
		  <entry>DTR</entry>
		</row>

		<row>
		  <entry>RTS</entry>
		  <entry>7</entry>
		  <entry>接到</entry>
		  <entry>8</entry>
		  <entry>CTS</entry>
		</row>

		<row>
		  <entry>CTS</entry>
		  <entry>8</entry>
		  <entry>接到</entry>
		  <entry>7</entry>
		  <entry>RTS</entry>
		</row>
	      </tbody>
	    </tgroup>
	  </table>

	  <table frame="none" pgwide="1">
	    <title>DB-9 到 DB-25 Null-Modem 电缆</title>

	    <tgroup cols="5">
	      <thead>
		<row>
		  <entry align="left">信号</entry>
		  <entry align="left">引脚 #</entry>
		  <entry></entry>
		  <entry align="left">引脚 #</entry>
		  <entry align="left">信号</entry>
		</row>
	      </thead>

	      <tbody>
		<row>
		  <entry>RD</entry>
		  <entry>2</entry>
		  <entry>DB-9 到 DB-25 Null-Modem 电缆</entry>
		  <entry>2</entry>
		  <entry>TD</entry>
		</row>

		<row>
		  <entry>TD</entry>
		  <entry>3</entry>
		  <entry>接到</entry>
		  <entry>3</entry>
		  <entry>RD</entry>
		</row>

		<row>
		  <entry>DTR</entry>
		  <entry>4</entry>
		  <entry>接到</entry>
		  <entry>6</entry>
		  <entry>DSR</entry>
		</row>

		<row>
		  <entry>DTR</entry>
		  <entry>4</entry>
		  <entry>接到</entry>
		  <entry>8</entry>
		  <entry>DCD</entry>
		</row>

		<row>
		  <entry>SG</entry>
		  <entry>5</entry>
		  <entry>接到</entry>
		  <entry>7</entry>
		  <entry>SG</entry>
		</row>

		<row>
		  <entry>DSR</entry>
		  <entry>6</entry>
		  <entry>接到</entry>
		  <entry>20</entry>
		  <entry>DTR</entry>
		</row>

		<row>
		  <entry>DCD</entry>
		  <entry>1</entry>
		  <entry>接到</entry>
		  <entry>20</entry>
		  <entry>DTR</entry>
		</row>

		<row>
		  <entry>RTS</entry>
		  <entry>7</entry>
		  <entry>接到</entry>
		  <entry>5</entry>
		  <entry>CTS</entry>
		</row>

		<row>
		  <entry>CTS</entry>
		  <entry>8</entry>
		  <entry>接到</entry>
		  <entry>4</entry>
		  <entry>RTS</entry>
		</row>
	      </tbody>
	    </tgroup>
	  </table>

	  <note>
	    <para>当某一段连接器上的一个引脚需要连接到对端的一对引脚时,
	      通常是将那一对引脚使用一短线连接,
	      而使用长线接到另一端的那个引脚。</para>
	  </note>

	  <para>上面的设计似乎更为流行。 在其他变种中 (在 <emphasis>RS-232 Made
	      Easy</emphasis> 这本书中进行了详细介绍) 则是 SG 接 SG,
	    TD 接 RD、 RTS 和
	    CTS 接 DCD、 DTR 接 DSR, 反之亦然。</para>
	</sect4>

	<sect4 id="term-cables-std">
	  <title>标准RS-232C线缆</title>
	  <indexterm><primary>RS-232C cables</primary></indexterm>

	  <para>标准的串口电缆会直接传送所有 RS-232C 信号。
	    也就是说, 一头的 <quote>Transmitted Data</quote> 引脚,
	    会直接接到另一头的 <quote>Transmitted Data</quote> 引脚。
	    这包括将调制解调器接到您的
	    FreeBSD 系统上的那种电缆, 同样也适用于某些型号的终端。</para>
	</sect4>
      </sect3>

      <sect3 id="term-ports">
	<title>端口</title>

	<para>串口是FreeBSD主机与终端传输数据的设备。
	  这节描述了端口的种类和它们在 FreeBSD 上是如何编址的。</para>

	<sect4 id="term-portkinds">
	  <title>端口的种类</title>

	  <para>有好几种串口。 在采购或制作线缆之前,
	    您应确认它能够适合您的终端以及 FreeBSD 系统。</para>

	  <para>绝大多数终端都提供 DB-25 端口。 个人计算机,
	    也包括运行 FreeBSD 的 PC 机, 通常会有 DB-25 或 DB-9 口。
	    如果您的 PC 上有多插口串口卡, 则可能有 RJ-12 或
	    RJ-45 口。</para>

	  <para>请参见您硬件的文档以了解所用接口的规格。
	    此外, 您也可以通过观察外观来了解所用的端口。</para>
	</sect4>

	<sect4 id="term-portnames">
	  <title>端口名称Port Names</title>

	  <para>在FreeBSD中,您可以通过 <filename>/dev</filename>
	    目录中的一个记录来访问每个串口。有两种不同的记录:</para>

	  <itemizedlist>
	    <listitem>
	      <para>呼入端口的名字是
		<filename>/dev/ttyu<replaceable>N</replaceable></filename>,
		其中 <replaceable>N</replaceable> 是端口的编号,
		从零开始计数。 一般来说,
		您使用呼入端口作为终端。 呼入端口要求数据线使用载波检测
		(DCD) 信号来工作。</para>
	    </listitem>

	    <listitem>
	      <para>呼出端口的名字是
		<filename>/dev/cuau<replaceable>N</replaceable></filename>。
		通常并不使用呼出端口作为终端, 而只用于调制解调器。
		如果串口线或终端不支持载波检测信号,
		则可能必须要使用呼出端口。</para>
	    </listitem>
	  </itemizedlist>

	  <para>如果您已经连接一个终端到第一个串口 (在 &ms-dos;
	    上是<devicename>COM1</devicename>),
	    则可以使用 <filename>/dev/ttyu0</filename> 来作为终端。
	    如果它是在第二个串口 (<devicename>COM2</devicename>),
	    那就是 <filename>/dev/ttyu1</filename>,等等。</para>

	</sect4>
      </sect3>
    </sect2>

    <sect2>
      <title>内核配置</title>

      <para>FreeBSD默认支持4个串口。 在&ms-dos;下,这些是
	<devicename>COM1</devicename><devicename>COM2</devicename><devicename>COM3</devicename>,
	和
	<devicename>COM4</devicename>。 FreeBSD 目前支持 <quote>dumb</quote>
	多口串口卡,如 BocaBoard 10082016, 以及许多 Digiboard
	和 Stallion Technologies 制造的智能多接口卡。 不过,
	默认的内核只会寻找标准的COM端口。</para>

      <para>要看看您的内核是否支持您的串口,只要在内核启动时查看一下启动信息,
	或使用 <command>/sbin/dmesg</command> 命令重新检测内核启动信息。
	特别的,寻找以<literal>sio</literal>字符启动的信息。</para>

      <tip><para>如果想只察看包含
	<literal>sio</literal> 一词的消息, 可以使用下面的命令:</para>

      <screen>&prompt.root; <userinput>/sbin/dmesg | grep 'sio'</userinput></screen>
      </tip>

      <para>例如,在一个带有4个串口的系统上,这些是串口特定的内核启动信息:</para>

      <screen>sio0 at 0x3f8-0x3ff irq 4 on isa
sio0: type 16550A
sio1 at 0x2f8-0x2ff irq 3 on isa
sio1: type 16550A
sio2 at 0x3e8-0x3ef irq 5 on isa
sio2: type 16550A
sio3 at 0x2e8-0x2ef irq 9 on isa
sio3: type 16550A</screen>

      <para>如果内核未能认出所有的串口, 可能需要通过修改
	<filename>/boot/device.hints</filename> 文件来进行一些配置。
	此外, 也可以注释或完全删除掉您没有的设备。</para>

      <para>请参见 &man.sio.4; 联机手册来了解关于串口,
	以及多插口卡配置的进一步细节。 如果您正使用一个在不同版本的
	FreeBSD 上的文件请务必小心, 因为设备参数和语法发生了变化。</para>

      <note>
	<para>这里端口 <literal>IO_COM1</literal> 代替了
	  <literal>0x3f8</literal>,端口 <literal>IO_COM2</literal> 代替了
	  <literal>0x2f8</literal>,端口 <literal>IO_COM3</literal> 代替了
	  <literal>0x3e8</literal>,端口 <literal>IO_COM4</literal> 代替了
	  <literal>0x2e8</literal>,这些都是各自端口相应的端口地址。
	  中断4359都是经常用的中断。也要注意有些正常的串口可能
	  <emphasis>无法</emphasis> 在一些ISA总线的PC上共享中断
	  (多插口板卡有板载的电子设备,允许在板上所有 16550A
	  的设备共享一个或两个中断请求)。</para>
      </note>

    </sect2>

    <sect2>
      <title>设备特殊文件</title>

      <para>在内核中, 大多数设备都是通过 <quote>设备特殊文件</quote> 来访问的,
	这些文件一般位于 <filename>/dev</filename> 目录中。
	<devicename>sio</devicename> 是通过
	<filename>/dev/ttyu<replaceable>N</replaceable></filename> (呼入)
	和 <filename>/dev/cuau<replaceable>N</replaceable></filename>
	(呼出) 设备来访问的。 此外, FreeBSD 也提供了初始化设备
	(<filename>/dev/ttyu<replaceable>N</replaceable>.init</filename><filename>/dev/cuau<replaceable>N</replaceable>.init</filename>)
        以及锁设备
	(<filename>/dev/ttyu<replaceable>N</replaceable>.lock</filename><filename>/dev/cuau<replaceable>N</replaceable>.lock</filename>)。
	初始化设备用于在打开端口时初始化其通讯参数, 例如使用
	<literal>RTS/CTS</literal> 信号进行流控制的调制解调器的
	<literal>crtscts</literal>。 锁设备则用于在端口上提供一个锁标志,
	防止用户或程序改变特定的参数; 请参见 &man.termios.4;、
	  &man.sio.4;, 以及 &man.stty.1; 的联机手册, 以了解关于终端配置、
	锁和初始化设备, 以及配置终端参数的详细信息。</para>
    </sect2>


    <sect2 id="serial-hw-config">
      <title>串口配置</title>

    <indexterm><primary><devicename>ttyu</devicename></primary></indexterm>
    <indexterm><primary><devicename>cuau</devicename></primary></indexterm>

    <para><devicename>ttyu<replaceable>N</replaceable></devicename> (或
      <devicename>cuau<replaceable>N</replaceable></devicename>)
      设备是您将要打开的应用程序的一般设备。 当进程打开某个设备时,
      它将有一个终端 I/O 设置的默认配置。 您可以在命令行看看这些设置:</para>

    <screen>&prompt.root; <userinput>stty -a -f /dev/ttyu1</userinput></screen>

    <para>当您修改了这个设备的设置,这个设置会生效,除非设备被关闭。
      当它被重新打开时,它将回到默认设置。 要修改默认设置,您可以打开和调整
      <quote>初始状态</quote> 设备的设置。例如,
      要为<devicename>ttyu5</devicename> 打开
      <option>CLOCAL</option> 模式,8位通讯和默认的 <option>XON/XOFF</option> 流控制,
      输入:</para>

    <screen>&prompt.root; <userinput>stty -f /dev/ttyu5.init clocal cs8 ixon ixoff</userinput></screen>

    <indexterm>
      <primary>rc files</primary>
      <secondary><filename>rc.serial</filename></secondary>
    </indexterm>

    <para>串口设备的系统级初始化,
      是由 <filename>/etc/rc.d/serial</filename> 来控制的。
      这个文件会影响串口设备的默认设置。</para>

    <para>为了防止应用程序修改某些设置,
      应修改 <quote>lock state</quote>(锁状态) 设备。 例如, 要把
      <devicename>ttyu5</devicename> 的速率锁定为 57600&nbsp;bps, 输入:</para>

    <screen>&prompt.root; <userinput>stty -f /dev/ttyu5.lock 57600</userinput></screen>

    <para>现在,一个打开<devicename>ttyu5</devicename>
      和设法改变端口速度的应用程序将被固定在57600bit/s。很自然地,
      您需要确定初始状态,然后用root帐户锁定状态设备的写入功能。</para>

    <para>很显然,您应该只让 <username>root</username>
      用户可以初始化或锁定设备的状态。</para>
    </sect2>
  </sect1>

  <sect1 id="term">
    <sect1info>
      <authorgroup>
	<author>
	  <firstname>Sean</firstname>
	  <surname>Kelly</surname>
	  <contrib>Contributed by </contrib>
	</author>
	<!-- 28 July 1996 -->
      </authorgroup>
    </sect1info>
    <title>终端</title>

    <warning>
      <para>&os; 8.0 开始, 用于串口的设备节点从
	<filename>/dev/cuad<replaceable>N</replaceable></filename> 改为了
	<filename>/dev/cuau<replaceable>N</replaceable></filename>;
	从
	<filename>/dev/ttyd<replaceable>N</replaceable></filename> 改为了
	<filename>/dev/ttyu<replaceable>N</replaceable></filename>&os;&nbsp;7.X 用户需要根据实际情况对这份文档中的例子进行必要的调整。</para>
    </warning>

    <indexterm><primary>终端</primary></indexterm>

    <para>当您在计算机控制台或是在一个连接的网络上时,
      终端提供了一个方便和低成本的访问 FreeBSD 系统的方法。
      这节描述了如何在 FreeBSD 上使用终端。</para>

    <sect2 id="term-uses">
      <title>终端的用法和类型</title>

      <para>早期的 &unix; 系统没有控制台。
	人们通过将终端连接到计算机的串口来登录和使用程序。
	它很像用 modem 和一些终端软件来拨号进入一个远程的系统,
	只能执行文本的工作。</para>

      <para>今天的 PC 已经可以使用高质量的图形了,
	但与今天的其他&unix;操作系统一样,建立一个登录会话的能力仍然存在。
	通过使用一个终端连接到一个没有使用的串口,
	您就能登录和运行任何文本程序或在 X 视窗系统中运行一个
	<command>xterm</command> 窗口程序。</para>

      <para>对于商业用户,您可以把任何终端连接到 FreeBSD 系统,
	然后把它们放在员工的桌面上。 对于家庭用户,则可以使用一台比较老的
	IBM PC 或 Macintosh 运行一个终端连接到一台运行 FreeBSD
	的高性能机器上。</para>

      <para>对于FreeBSD,有三种终端:</para>

      <itemizedlist>
	<listitem>
	  <para><link linkend="term-dumb">哑终端</link></para>
	</listitem>

	<listitem>
	  <para><link linkend="term-pcs">充当终端的PC</link></para>
	</listitem>

	<listitem>
	  <para><link linkend="term-x">X 终端</link></para>
	</listitem>
      </itemizedlist>

      <para>下面一小节将描述每一种终端。</para>

      <sect3 id="term-dumb">
	<title>哑终端</title>

	<para>哑终端需要专门的好几种硬件,让您通过串口线连接到计算机。
	  它们被叫做 <quote></quote> 是因为它们只能够用来显示,
	  发送和接收文本。 您不能在它上面运行任何程序。</para>

	<para>有好几百种哑终端,包括Digital Equipment Corporation
	  的VT-100和Wyse的WY-75。只有几种可以在FreeBSD上工作。
	  一些高端的终端可以显示图形,但只有某些软件包可以使用这些高级特性。</para>

	<para>哑终端被广泛用于那些不需要图形应用的工作中。</para>
      </sect3>

      <sect3 id="term-pcs">
	<title>充当终端的PC</title>

	<para>假如 <link linkend="term-dumb">哑终端</link> 的功能仅限于显示、
	  发送和接收文本的话, 那么显然任何一台闲置的个人计算机,
	  都完全能够胜任哑终端的工作。 因此您需要的是合适的线缆,
	  以及一些在这台计算机上运行的 <emphasis>终端仿真</emphasis>
	  软件。</para>

	<para>这种配置在家庭中应用十分广泛。 例如, 如果您的爱人正忙于在您的
	  FreeBSD 系统的控制台上工作时,
	  您就可以将一台功能稍弱的计算机挂在这个 FreeBSD
	  系统上来同时完成一些文本界面的工作。</para>

	<para>&os; 的基本系统中至少有两个能用于进行串口连接的工具:
	  &man.cu.1; 和 &man.tip.1;。</para>

	<para>如果要从运行 &os; 的计算机上通过串口连接到另一系统,
	  可以使用:</para>

	<screen>&prompt.root; <userinput>cu -l <replaceable>串口设备</replaceable></userinput></screen>

	<para>此处 <quote>串口设备</quote> 表示您计算机上某个串口对应的设备名。
          <devicename>/dev/cuau<replaceable>N</replaceable></devicename></para>

	<para>此处的 <quote>N</quote> 表示串口的编号。</para>

	<note>
	  <para>请注意在 &os; 中设备的编号是从零而非一开始的
	    (这一点与另一些系统, 如基于 &ms-dos; 的系统不同)。
	    因此, 在基于 &ms-dos; 系统中的
            <devicename>COM1</devicename>&os;
	    中通常叫做 <filename>/dev/cuau0</filename></para>
	</note>

	<note>
	  <para>其他一些人可能喜欢使用另一些来自 Ports 套件的程序。
	    Ports 中提供了几个与 &man.cu.1; 和
	    &man.tip.1; 类似的工具,
	    例如 <filename role="package">comms/minicom</filename></para>
	</note>
      </sect3>

      <sect3 id="term-x">
	<title>X 终端</title>

	<para>X终端是最复杂的终端系统。它们通常需要使用以太网来连接。
	  它们能显示任何X应用程序。</para>

	<para>我们介绍X终端只是为了感兴趣。然而,
	  这章<emphasis>不会</emphasis>涉及X终端的安装,配置或使用。</para>
      </sect3>
    </sect2>

    <sect2 id="term-config">
      <title>配置</title>

      <para>这节描述了您在一个终端上启用一个登录会话时, 需要在 FreeBSD
	系统上进行的配置。 假设已经配置好了内核来支持串口,
	就可以直接开始连接了。</para>

      <para><xref linkend="boot"/> 中曾经提到, <command>init</command>
	进程依赖于系统启动时所有的处理控制和初始化。
	通过 <command>init</command> 来执行的一些任务将先读取
	<filename>/etc/ttys</filename>文件,
	然后在可用的终端上启用一个 <command>getty</command> 进程。
	<command>getty</command> 进程可用来阅读一个登录名和启动
	<command>login</command>程序。</para>

      <para>然而,要为您的FreeBSD系统配置终端,您需要以
	<username>root</username> 身份执行下面的步骤:</para>

      <procedure>
	<step>
	  <para>如果它不在那里, 您需要为串口在
	    <filename>/dev</filename> 目录下添加一行记录到
	    <filename>/etc/ttys</filename></para>
	</step>

	<step>
	  <para>指定 <command>/usr/libexec/getty</command> 在端口上运行,
	    然后从 <filename>/etc/gettytab</filename> 文件指定适当的
	    <replaceable>getty</replaceable> 类型。</para>
	</step>

	<step>
	  <para>指定默认的终端类型。</para>
	</step>

	<step>
	  <para>设置端口为 <quote>on</quote></para>
	</step>

	<step>
	  <para>确定端口是否为 <quote>secure</quote></para>
	</step>

	<step>
	  <para>迫使<command>init</command> 重新读取
	    <filename>/etc/ttys</filename>文件。</para>
	</step>
      </procedure>

      <para>作为可选的步骤,您可以通过在 <filename>/etc/gettytab</filename>
	中建立一个记录,在第2步创建一个定制的
	<replaceable>getty</replaceable> 类型来使用。这章不会介绍如何做。
	您可以参考 &man.gettytab.5; 和 &man.getty.8;
	的联机手册了解更多信息。</para>

      <sect3 id="term-etcttys">
	<title>添加一个记录到<filename>/etc/ttys</filename></title>

	<para><filename>/etc/ttys</filename>文件列出了您
	  FreeBSD系统上允许登录的所有端口。 例如, 第一个虚拟控制台
	  <devicename>ttyv0</devicename> 在这个文件中有一个记录。
	  您可以使用这个记录登录进控制台。
	  这个文件也包含其他虚拟控制台的记录,串口,和伪 ttys 终端。
	  对于一个硬连线的终端, 只要列出串口的
	  <filename>/dev</filename> 记录而不需要
	  <filename>/dev</filename> 部分 (例如,
	  <filename>/dev/ttyv0</filename> 可以被列为
	  <devicename>ttyv0</devicename>)。</para>

	<para>默认的 FreeBSD 安装包括一个支持最初四个串口
	  <devicename>ttyu0</devicename><devicename>ttyu3</devicename><filename>/etc/ttys</filename> 文件。
	  如果您从那些端口中某一个使用终端,您不需要添加另一个记录。</para>

	<example id="ex-etc-ttys">
	  <title><filename>/etc/ttys</filename> 中增加终端记录</title>

	  <para>假设我们连接两个终端给系统: 一个 Wyse-50 和一个老的运行
	    <application>Procomm</application> 终端软件模拟一个
	    VT-100 终端的286IBM PC。 在 <filename>/etc/ttys</filename>
	    文件中的相应的记录是这样的:</para>

	  <programlisting>ttyu1<co
	      id="co-ttys-line1col1"/>  "/usr/libexec/getty std.38400"<co
	      id="co-ttys-line1col2"/>  wy50<co
	      id="co-ttys-line1col3"/>  on<co
	      id="co-ttys-line1col4"/>  insecure<co
	      id="co-ttys-line1col5"/>
ttyu5   "/usr/libexec/getty std.19200"  vt100  on  insecure
	  </programlisting>

	  <calloutlist>
	    <callout arearefs="co-ttys-line1col1">
	      <para>第一部分指定了终端指定文件的名称, 它可以在
	      <filename>/dev</filename>中找到。</para>
	    </callout>

	    <callout arearefs="co-ttys-line1col2">
	      <para>第二部分是在这行执行的命令,通常是 &man.getty.8;。
	        <command>getty</command> 初始化然后打开一行,设置速度,
	        用户名的命令和执行登录程序。</para>

	      <para><command>getty</command> 程序在它的命令行接收一个参数 (可选),
	        <replaceable>getty</replaceable> 类型。 一个
	        <replaceable>getty</replaceable> 类型会在终端行描述一个特征,
	        像波特率和奇偶校验。 <command>getty</command> 程序从
	        <filename>/etc/gettytab</filename> 文件读取这些特征。</para>

	      <para>文件<filename>/etc/gettytab</filename>
	        包含了许多老的和新的终端行记录。
	        在很多例子中,启动文本 <literal>std</literal>
	        的记录将用硬连线终端来工作。 这些记录忽略了奇偶性。
	        这是一个从110115200 bit/s的 <literal>std</literal> 记录。
	        当然,您可以添加您自己的记录到这个文件。
	        gettytab 的联机手册提供了更多的信息。</para>

	      <para>当在<filename>/etc/ttys</filename>中设置
	        <replaceable>getty</replaceable> 类型的时候,
	        确信在终端上的通讯设置匹配。
	        在我们的例子中, Wyse-50 不使用奇偶性, 用38400 bit/s
	        来连接。286 PC不使用奇偶性,用19200bit/s来连接。</para>
	    </callout>

	    <callout arearefs="co-ttys-line1col3">
	      <para>第三部分是通常连接到那个tty行的终端类型。对于拨号端口,
	        <literal>unknown</literal><literal>dialup</literal>
	        通常被用在这个地方。 对于硬连线的终端,终端类型不会改变,
	        所以您可以从termcap数据库文件中放一个真正的终端类型。</para>

	      <para>在我们的例子中, Wyse-50 使用真正的终端类型,
	        而运行 <application>Procomm</application>286
	        PC将被设置成在VT-100上的模拟。</para>
	    </callout>

	    <callout arearefs="co-ttys-line1col4">
	      <para>如果端口被启用,可以指定第四个部分。在第二部分,
	        把它放在这儿将执行初始化进程来启动程序
	        <command>getty</command>。如果您在这部分拖延,
	        将没有<command>getty</command>,在端口上因此就没有登录。</para>
	    </callout>

	    <callout arearefs="co-ttys-line1col5">
	      <para>最后部分被用来指定端口是否安全。
	        标记一个安全的端口意味着您信任它允许用 <username>root</username>
	        帐户从那个端口登录。 不安全的端口不允许
	        <username>root</username>登录。 在一个不安全的端口上,
	        用户必须用无特权的帐户登录, 然后使用
	        <command>su</command> 或一个相似的机制来获得超级用户的权限。</para>
	    </callout>
	  </calloutlist>
	</example>
      </sect3>

      <sect3 id="term-hup">
	<title>重新读取<filename>/etc/ttys</filename>来强制<command>init</command>
	  </title>

	<para><filename>/etc/ttys</filename>文件做一个必要的修改后,您必须发送一个
	  SIGHUP 信号给初始化进程来迫使它重新读取配置文件,例如:</para>

	<screen>&prompt.root; <userinput>kill -HUP 1</userinput></screen>

	<note>
	  <para><command>init</command> 总是系统运行时的第一个进程,因此它总是PID 1</para>
	</note>

	<para>如果能够正确设置,所有的线缆都是适当的,终端将可以启用了,
	  然后一个 <command>getty</command> 进程将在每个终端运行,
	  您将在您的终端上看到登录命令行。</para>
      </sect3>
    </sect2>

    <sect2 id="term-debug">
      <title>您的连接可能出现的问题</title>

      <para>即使您小心翼翼地注意细节,您仍然可能会在设置终端时出错。
	  这有一个有关问题和解决办法的列表:</para>

      <sect3>
	<title>没有登录命令出现:</title>

	<para>确定终端被嵌入和打开了。如果把一台个人计算机充当一个终端,
	  确信终端模拟软件运行在正确的串口上。</para>

	<para>确信线缆被稳固地连接在终端和 FreeBSD 计算机上。
	  确信用了正确的电缆。</para>

	<para>确定终端和 FreeBSD 的传输速度和奇偶设置已经一致了。
	  如果您有一个图像显示终端,确信对比度已经调节好了。
	  如果它是一个可打印的终端,确信纸张和墨水已经就绪了。</para>

	<para>确定一个 <command>getty</command> 进程正在运行和服务终端。
	  例如, 可以用<command>ps</command> 命令得到运行
	  <command>getty</command> 程序的列表,键入:</para>

	<screen>&prompt.root; <userinput>ps -axww|grep getty</userinput></screen>

	<para>您将看到一个终端的记录。例如,下面的显示表明一个<command>getty</command>
	  正在第二个串口 <devicename>ttyu1</devicename> 运行,
	  正在 <filename>/etc/gettytab</filename> 中使用 <literal>std.38400</literal>
	  的记录:</para>

	<screen>22189  d1  Is+    0:00.03 /usr/libexec/getty std.38400 ttyu1</screen>

	<para>如果没有 <command>getty</command> 进程运行,
	  确信您已经在<filename>/etc/ttys</filename>中启用了端口。
	  在修改完<filename>/etc/ttys</filename>文件后,记得运行
	  <command>kill -HUP 1</command></para>

	<para>如果 <command>getty</command> 进程确实在运行,
	  但终端上仍然没有显示出登录提示, 或者虽然显示了单缺不允许您输入,
	  您的终端或电缆可能不支持硬件握手。 请尝试将
	  <filename>/etc/ttys</filename> 中的
	  <literal>std.38400</literal> 改为
	  <literal>3wire.38400</literal> (注意在改完
	  <filename>/etc/ttys</filename> 之后要
	  <command>kill -HUP 1</command>)。
	  <literal>3wire</literal> 记录和
	  <literal>std</literal> 类似, 但忽略硬件握手。
	  您可能需要在使用 <literal>3wire</literal>
	  时减少波特率或启用软件流控制以避免缓冲区溢出。</para>

      </sect3>

      <sect3>
	<title>出现一个 <quote>垃圾</quote> 而不是一个登录命令行</title>

	<para>确信终端和 FreeBSD 使用相同的 bit/s 传输率和奇偶校验设置。
	  检查一下 <command>getty</command> 进程确信当前使用正确的
	  <replaceable>getty</replaceable> 类型。 如果没有,
	  编辑<filename>/etc/ttys</filename>然后运行<command>kill
	  -HUP 1</command></para>

      </sect3>

      <sect3>
	<title>当键入密码时,字符两个两个出现</title>

	<para>将终端 (或终端模拟软件) 从 <quote>半双工</quote><quote>本地回显</quote> 换成
	  <quote>全双工</quote></para>

      </sect3>
    </sect2>
  </sect1>

  <sect1 id="dialup">
    <sect1info>
      <authorgroup>
	<author>
	  <firstname>Guy</firstname>
	  <surname>Helmer</surname>
	  <contrib>Contributed by </contrib>
	</author>
      </authorgroup>
      <authorgroup>
	<author>
	  <firstname>Sean</firstname>
	  <surname>Kelly</surname>
	  <contrib>Additions by </contrib>
	</author>
      </authorgroup>
    </sect1info>
    <title>拨入服务</title>

    <warning>
      <para>&os; 8.0 开始, 用于串口的设备节点从
	<filename>/dev/cuad<replaceable>N</replaceable></filename> 改为了
	<filename>/dev/cuau<replaceable>N</replaceable></filename>;
	从
	<filename>/dev/ttyd<replaceable>N</replaceable></filename> 改为了
	<filename>/dev/ttyu<replaceable>N</replaceable></filename>&os;&nbsp;7.X 用户需要根据实际情况对这份文档中的例子进行必要的调整。</para>
    </warning>

    <indexterm><primary>拨入服务</primary></indexterm>

    <para>为拨入服务配置FreeBSD系统与连接到终端是非常相似的,除非您正在使用
      modem来拨号而不是终端。</para>

      <sect2>
	<title>外置vs.内置modem</title>

	<para>外置modem看起来很容易拨号。 因为,外置 modem
	  可以通过储存在非易失性的RAM中的参数来配置,
	  它们通常提供指示器来显示重要的RS-232信号的状态。
	  不停闪光的信号灯能给用户留下比较深刻的印象,
	  而且指示器也可以用来查看modem是否正常地工作。</para>

	<para>内置modem通常缺乏非易失性的RAM,
	  所以对它们的配置可能会限制在通过 DIP 开关来设置。
	  如果您的内置modem有指示灯,您也很难看得到。</para>

      <sect3>
	<title>Modem和线缆</title>
	<indexterm><primary>modem</primary></indexterm>

	<para>如果您使用一个外置的 modem,那您将需要适当的电缆线。
	  一个标准的串口线应当足够长以至普通的信号能够连接上:</para>

	  <table frame="none" pgwide="1" id="serialcomms-signal-names">
	    <title>信号名称</title>

	    <tgroup cols="2">
	      <thead>
		<row>
		  <entry align="left">缩写</entry>
		  <entry align="left">全名</entry>
		</row>
	      </thead>

	      <tbody>
		<row>
		  <entry><acronym>RD</acronym></entry>
		  <entry>收到数据 (Received Data)</entry>
		</row>

		<row>
		  <entry><acronym>TD</acronym></entry>
		  <entry>传出数据 (Transmitted Data)</entry>
		</row>

		<row>
		  <entry><acronym>DTR</acronym></entry>
		  <entry>数据终端就绪 (Data Terminal Ready)</entry>
		</row>

		<row>
		  <entry><acronym>DSR</acronym></entry>
		  <entry>数据集就绪 (Data Set Ready)</entry>
		</row>

		<row>
		  <entry><acronym>DCD</acronym></entry>
		  <entry>数据载波检测 (Data Carrier Detect) (RS-232 的收到线路信号检测器)</entry>
		</row>

		<row>
		  <entry><acronym>SG</acronym></entry>
		  <entry>信号地 (Signal Ground)</entry>
		</row>

		<row>
		  <entry><acronym>RTS</acronym></entry>
		  <entry>要求发送数据 (Request to Send)</entry>
		</row>

		<row>
		  <entry><acronym>CTS</acronym></entry>
		  <entry>允许对方发送数据 (Clear to Send)</entry>
		</row>
	      </tbody>
	    </tgroup>
	  </table>

	<para>FreeBSD 对速度超过 2400&nbsp;bps 的情形需要通过 <acronym>RTS</acronym><acronym>CTS</acronym> 信号来完成流控制,
	  通过 <acronym>CD</acronym> 信号来检测呼叫响应和挂机, 并通过
	  <acronym>DTR</acronym> 信号来在会话结束时对调制解调器进行复位。
	  某些电缆在连接时没有提供全部需要的信号, 这会给您带来问题,
	  例如在挂断时登录会话不消失, 这就有可能是电缆的问题。</para>

	<para>与其它类 &unix; 操作系统类似, FreeBSD 使用硬件信号来检测呼叫响应,
	  以及在挂断时挂断并复位调制解调器。 FreeBSD 避免发送命令给调制解调器,
	  或监视其状态。 如果您熟悉通过调制解调器来连接基于 PC 的 BBS 系统,
	  这可能看起来有点难用。</para>
      </sect3>
      </sect2>

      <sect2>
	<title>串口的考虑</title>

	<para>FreeBSD支持基于 NS8250, NS16450, NS16550 和 NS16550A
	  的EIA RS-232C通讯接口。 825016450设备有单字符缓冲。
	  16550设备提供了一个 16 个字符的缓冲, 可以提高更多的系统性能。
	  因为单字符缓冲设备比 16 个字符的缓冲需要更多的系统资源来工作,
	  所以基于16550A的接口卡可能更好。 如果系统没有活动的串口,
	  或有较大的负载, 16 字符缓冲的卡对于低错误率的通讯来说更好。</para>
      </sect2>

    <sect2>
      <title>快速预览</title>

      <indexterm><primary>getty</primary></indexterm>
      <para>对于终端, <command>init</command>
	会在每个配置串口上为每个拨入连接产生一个 <command>getty</command>
	进程。 例如, 如果一个 modem 被附带在 <filename>/dev/ttyu0</filename>
	中,用命令<command>ps ax</command>可以显示下面这些:</para>

      <screen> 4850 ??  I      0:00.09 /usr/libexec/getty V19200 ttyu0</screen>

      <para>当用户拨上modem, 并使用它进行连接时, <acronym>CD</acronym>
	线就会被 modem 认出。 内核注意到载波信号已经被检测到,
	需要完成 <command>getty</command> 端口的打开。
	<command>getty</command> 发送一个登录:在指定的初始线速度上的命令行。
	Getty 会检查合法的字符是否被接收, 在典型的配置中,
	如果发现 <quote>垃圾</quote><command>getty</command>
	就会设法调节线速度,直到它接收到合理的字符。</para>

      <indexterm>
	<primary><command>/usr/bin/login</command></primary>
      </indexterm>
      <para>用户在键入他/她的登录名称后,
	<command>getty</command>执行<filename>/usr/bin/login</filename>,
	这会要求用户输入密码来完成登录, 然后启动用户的shell。</para>
    </sect2>


    <sect2>
      <title>配置文件</title>

      <para>如果希望允许拨入您的 FreeBSD 系统, 在
	<filename>/etc</filename> 目录中有三个系统配置文件需要您关注。 其一是
	<filename>/etc/gettytab</filename>,
	其中包含用于 <filename>/usr/libexec/getty</filename> 服务的配置信息。 其二是
	<filename>/etc/ttys</filename>, 它的作用是告诉
	<filename>/sbin/init</filename> 哪些 <filename>tty</filename>
	设备上应该运行 <command>getty</command>。 最后,
	关于端口的初始化命令, 应放到
	<filename>/etc/rc.d/serial</filename> 脚本中。</para>

      <para>关于在 &unix; 上配置拨入调制解调器有两种主要的流派。
	一种是将本地计算机到调制解调器的
	RS-232 接口配置为固定速率。 这样做的好处是,
	远程用户总能立即见到系统的登录提示符, 而其缺点则是,
	系统并不知道用户真实的数据速率是多少, 因而, 类似
        <application>Emacs</application> 这样的程序,
        也就无法调整它们绘制屏幕的方式,
	以便为慢速连接改善响应时间。</para>

      <para>另一种流派将调制解调器的 RS-232 接口速率配置为随远程用户的连接速率变化。 例如, 对
	V.32bis (14.4&nbsp;Kbps) 连接,
	调制解调器会让自己的 RS-232 接口以 19.2&nbsp;Kbps 的速率运行,
	而 2400&nbsp;bps 连接, 则会使调制解调器的 RS-232 接口以 2400&nbsp;bps
	的速率运行。 由于
	<command>getty</command> 并不能识别具体的调制解调器的连接速率反馈信息,
	因此, <command>getty</command> 会以初始速度给出一个
	<prompt>login:</prompt> 提示, 并检查用户的响应字符。
	如果用户看到乱码, 则他们应知道此时应按下
	<keycap>Enter</keycap> 键, 直到看到可以辨认的提示符为止。
	如果数据速率不匹配, 则 <command>getty</command>
	会将用户输入的任何信息均视为 <quote>乱码</quote>,
	并尝试以下一种速率来再次给出 <prompt>login:</prompt> 提示符。
	这一过程可能需要令人作呕地重复下去, 不过一般而言,
	用户只要敲一两下键盘就能看到正确的提示符了。 显然,
	这种登录过程看起来不如前面所介绍的
	<quote>锁定速率</quote> 方法那样简单明了,
	但使用低速连接的用户, 却可以在运行全屏幕程序时得到更好的交互响应。</para>

      <para>这一节将尽可能公平地介绍关于配置的信息,
	但更着力于介绍调制解调器速率随连接速率变化的配置方法。</para>

      <sect3>
	<title><filename>/etc/gettytab</filename></title>

  <indexterm>
    <primary><filename>/etc/gettytab</filename></primary>
  </indexterm>
	<para><filename>/etc/gettytab</filename>是一个用来配置
	  <command>getty</command> 信息的 termcap 风格的文件。 请看看
	  gettytab 的联机手册了解完整的文件格式和功能列表。</para>

	<sect4>
	  <title>锁定速度的配置</title>

	  <para>如果您把您的modem的数据通讯率锁定在一个特殊的速度上,
	    您不需要对 <filename>/etc/gettytab</filename> 文件作任何变化。</para>
	</sect4>

	<sect4>
	  <title>匹配速度的配置</title>

	  <para>您将需要在 <filename>/etc/gettytab</filename>
	    中设置一个记录来告诉 <command>getty</command> 您希望在
	    modem 上使用的速度。 如果您的 modem 的速率是 2400&nbsp;bit/s,
	    则可以使用现有的 <literal>D2400</literal> 的记录。</para>

	  <programlisting>#
# Fast dialup terminals, 2400/1200/300 rotary (can start either way)
#
D2400|d2400|Fast-Dial-2400:\
        :nx=D1200:tc=2400-baud:
3|D1200|Fast-Dial-1200:\
        :nx=D300:tc=1200-baud:
5|D300|Fast-Dial-300:\
        :nx=D2400:tc=300-baud:</programlisting>

	  <para>如果您有一个更高速度的 modem, 必须在
	    <filename>/etc/gettytab</filename> 中添加一个记录。
	    下面是一个让您可以以最高 19.2 Kbit/s 的用在
	    14.4 Kbit/s的modem上的接口记录:</para>

	  <programlisting>#
# Additions for a V.32bis Modem
#
um|V300|High Speed Modem at 300,8-bit:\
        :nx=V19200:tc=std.300:
un|V1200|High Speed Modem at 1200,8-bit:\
        :nx=V300:tc=std.1200:
uo|V2400|High Speed Modem at 2400,8-bit:\
        :nx=V1200:tc=std.2400:
up|V9600|High Speed Modem at 9600,8-bit:\
        :nx=V2400:tc=std.9600:
uq|V19200|High Speed Modem at 19200,8-bit:\
        :nx=V9600:tc=std.19200:</programlisting>

	  <para>这样做的结果是 8-数据位, 没有奇偶校验的连接。</para>

	  <para>上面使用19.2 Kbit/s的连接速度的例子,也可以使用
	    9600 bit/s (for V.32), 2400 bit/s, 1200 bit/s,300 bit/s,
	    直到 19.2 Kbit/s。 通讯率的调节使用 <literal>nx=</literal>
	    (<quote>next table</quote>) 来实现。 每条线使用一个
	    <literal>tc=</literal> (<quote>table continuation</quote>)
	    的记录来加速对于一个特殊传输率的标准设置。</para>

	  <para>如果您有28.8 Kbit/s的modem,或您想使用它的 14.4Kbit/s
	    模式, 就需要使用一个更高的超过 19.2 Kbit/s 的通讯速度的
	    modem。 这是一个启动 57.6 Kbit/s 的 <filename>gettytab</filename>
	    记录的例子:</para>

	  <programlisting>#
# Additions for a V.32bis or V.34 Modem
# Starting at 57.6 Kbps
#
vm|VH300|Very High Speed Modem at 300,8-bit:\
        :nx=VH57600:tc=std.300:
vn|VH1200|Very High Speed Modem at 1200,8-bit:\
        :nx=VH300:tc=std.1200:
vo|VH2400|Very High Speed Modem at 2400,8-bit:\
        :nx=VH1200:tc=std.2400:
vp|VH9600|Very High Speed Modem at 9600,8-bit:\
        :nx=VH2400:tc=std.9600:
vq|VH57600|Very High Speed Modem at 57600,8-bit:\
        :nx=VH9600:tc=std.57600:</programlisting>

	  <para>如果您的 CPU 速度较低, 或系统的负荷很重, 而且没有
	    16550A 的串口,您可能会在57.6 Kbit/s 上得到
	    <errorname>sio</errorname> <quote>silo</quote>错误。</para>
	</sect4>
      </sect3>

      <sect3 id="dialup-ttys">
	<title><filename>/etc/ttys</filename></title>
	<indexterm>
	  <primary><filename>/etc/ttys</filename></primary>
	</indexterm>

	<para><filename>/etc/ttys</filename>文件的配置在
	  <xref linkend="ex-etc-ttys"/>中介绍过。 配置 modem 是相似的,
	  但我们必须指定一个不同的终端类型。
	  锁定速度和匹配速度配置的通用格式是:</para>

	<programlisting>ttyu0   "/usr/libexec/getty <replaceable>xxx</replaceable>"   dialup on</programlisting>

	<para>上面的第一条是这个记录的设备特定文件 &mdash;
	  <devicename>ttyu0</devicename> 表示
          <filename>/dev/ttyu0</filename>
	  是这个 <command>getty</command> 将被监视的文件。 第二条
	  <literal>"/usr/libexec/getty
	    <replaceable>xxx</replaceable>"</literal>
	  是将运行在设备上的进程 <command>init</command>。
	  第三条,dialup,是默认的终端类型。 第四个参数,
	  <literal>on</literal>, 指出了线路是可操作的
	  <command>init</command>。 也可能会有第五个参数,
	  <literal>secure</literal>, 但它将只被用作拥有物理安全的终端
	  (如系统终端)。</para>

	<para>默认的终端类型可能依赖于本地参考。 拨号是传统的默认终端类型,
	  以至用户可以定制它们的登录脚本来注意终端什么时候拨号,
	  和自动调节它们的终端类型。 然而, 作者发现它很容易在它的站点上指定
	  <literal>vt102</literal> 作为默认的终端类型,
	  因为用户刚才在它们的远程系统上使用的是VT102模拟器。</para>

	<para>您对<filename>/etc/ttys</filename>作修改之后,您可以发送
	  <command>init</command> 进程给一个 <acronym>HUP</acronym>
	  信号来重读文件。您可以使用下面的命令来发送信号:

	<screen>&prompt.root; <userinput>kill -HUP 1</userinput></screen>

	  如果这是您的第一次设置系统, 您可能要在发信号
	  <command>init</command> 之前等一下, 等到您的 modem
	  正确地配置并连接好。
	  </para>

	<sect4>
	  <title>锁定速度的配置</title>

	  <para>对于一个锁定速度的配置,您的 <filename>ttys</filename>
	    记录必须有一个为 <command>getty</command> 提供固定速度的记录。
	    对于一个速度被锁定在 19.2kbit/s 的 modem,
	    <filename>ttys</filename> 记录是这样的:</para>

	  <programlisting>ttyu0   "/usr/libexec/getty std.19200"   dialup on</programlisting>

	  <para>如果您的 modem 被锁定在一个不同的数据速度,
	    为 std.speed 使用适当的速度来代替 std.19200。
	    确信您使用了一个在 <filename>/etc/gettytab</filename>
	    中列出的正确的类型。</para>
	</sect4>

	<sect4>
	  <title>匹配速度的设置</title>

	  <para>在一个匹配速度的设置中,您的 <filename>ttys</filename>
	    录需要参考在 <filename>/etc/gettytab</filename> 适当的起始
	    <quote>auto-baud</quote> 记录。 例如, 如果您为一个以 19.2
	    Kbit/s 开始的可匹配速度的 modem 添加上面建议的记录, 您的
	    <filename>ttys</filename> 记录可能是这样的:</para>

	  <programlisting>ttyu0   "/usr/libexec/getty V19200"   dialup on</programlisting>
	</sect4>
      </sect3>

      <sect3>
	<title><filename>/etc/rc.d/serial</filename></title>
	<indexterm>
	  <primary>rc files</primary>
	  <secondary><filename>rc.serial</filename></secondary>
	</indexterm>

	<para>高速调制解调器, 如使用 V.32、 V.32bis, 以及 V.34 的那些,
	  需要使用硬件 (<literal>RTS/CTS</literal>) 流控制。
	  您可以在
	  <filename>/etc/rc.d/serial</filename> 中增加
	  <command>stty</command> 命令来在 FreeBSD 内核中,
	  为调制解调器设置硬件流控制标志。</para>

	<para>例如, 在 1 号串口
	  (<devicename>COM2</devicename>) 拨入和拨出设备上配置 <literal>termios</literal> 标志
	  <varname>crtscts</varname>, 可以通过在
	  <filename>/etc/rc.d/serial</filename> 增加下面的设置来实现:</para>
	<programlisting># Serial port initial configuration
stty -f /dev/ttyu1.init crtscts
stty -f /dev/cuau1.init crtscts</programlisting>

      </sect3>
    </sect2>

    <sect2>
      <title>Modem 设置</title>

      <para>如果您有一个 modem, 它的参数能被存储在非易失性的 RAM 中,
	您将必须使用一个终端程序来设置参数 (比如 &ms-dos; 下的
        <application>Telix</application> 或者 FreeBSD 下的
        <command>tip</command>)。 使用同样的通讯速度来连接
	modem 作为初始速度 <command>getty</command> 将使用和配置
	modem 的非易失性 RAM 来适应这些要求:</para>

      <itemizedlist>
	<listitem>
	  <para>连接时宣告 <acronym>CD</acronym></para>
	</listitem>

	<listitem>
	  <para>操作时宣告 <acronym>DTR</acronym>; DTR
	    消失时挂断线路并复位调制解调器</para>
	</listitem>

	<listitem>
	  <para><acronym>CTS</acronym> 传输数据流控制</para>
	</listitem>

	<listitem>
	  <para>禁用 <acronym>XON/XOFF</acronym> 流控制</para>
	</listitem>

	<listitem>
	  <para><acronym>RTS</acronym> 接收数据流控制</para>
	</listitem>

	<listitem>
	  <para>宁静模式 (无返回码)</para>
	</listitem>

	<listitem>
	  <para>无命令回显</para>
	</listitem>
      </itemizedlist>

      <para>请阅读您 modem 的文档找到您需要用什么命令和 DIP 接口设置。</para>

      <para>例如,要在一个 &usrobotics; &sportster; 14400 的外置 modem
	上设置上面的参数,可以用下面这些命令:</para>

      <programlisting>ATZ
AT&amp;C1&amp;D2&amp;H1&amp;I0&amp;R2&amp;W</programlisting>

      <para>您也可能想要在 modem 上寻找机会调节这个设置, 例如它是否使用
	V.42bis 和 MNP5 压缩。</para>

      <para>外置 modem 也有一些用来设置的 DIP 开关,
	也许您可以使用这些设置作为一个例子:</para>

      <itemizedlist>
	<listitem>
	  <para>Switch 1: UP &mdash; DTR Normal</para>
	</listitem>

	<listitem>
	  <para>Switch 2: N/A (Verbal Result Codes/Numeric Result
	    Codes)</para>
	</listitem>

	<listitem>
	  <para>Switch 3: UP &mdash; Suppress Result Codes</para>
	</listitem>

	<listitem>
	  <para>Switch 4: DOWN &mdash; No echo, offline commands</para>
	</listitem>

	<listitem>
	  <para>Switch 5: UP &mdash; Auto Answer</para>
	</listitem>

	<listitem>
	  <para>Switch 6: UP &mdash; Carrier Detect Normal</para>
	</listitem>

	<listitem>
	  <para>Switch 7: UP &mdash; Load NVRAM Defaults</para>
	</listitem>

	<listitem>
	  <para>Switch 8: N/A (Smart Mode/Dumb Mode)</para>
	</listitem>
      </itemizedlist>

      <para>在拨号 modem 上的结果代码应该被 禁用/抑制, 以避免当
	<command>getty</command> 在 modem 处于命令模式并回显输入时错误地给出
	<prompt>login:</prompt> 提示时可能造成的问题。
	这样可能导致 <command>getty</command> 与 modem
	之间产生更长的不必要交互。</para>

      <sect3>
	<title>锁定速度的配置</title>

	<para>对于锁定速度的配置, 您需要配置 modem
	  来获得一个不依赖于通讯率的稳定的 modem到计算机 的传输率。
	  在一个 &usrobotics; &sportster; 14400 外置 modem 上,
          这些命令将锁定 modem 到计算机 的传输率:</para>

	<programlisting>ATZ
AT&amp;B1&amp;W</programlisting>
      </sect3>

      <sect3>
	<title>匹配速度的配置</title>

	<para>对于一个变速的配置, 您需要配置 modem
	  调节它的串口传输率匹配接收的传输率。
	  在一个 &usrobotics; &sportster; 14400 的外置 modem 上,
          这些命令将锁定 modem 的错误修正传输率适合命令要求的速度,
	  但允许串口速度适应没有纠错的连接:</para>

	<programlisting>ATZ
AT&amp;B2&amp;W</programlisting>
      </sect3>

      <sect3>
	<title>检查modem的配置</title>

	<para>大多数高速的modem提供了用来查看当前操作参数的命令。
	  在USR Sportster 14400外置modem上, 命令 <command>ATI5</command>
	  显示了存储在非易失性RAM中的设置。 要看看正确的 modem 操作参数,
	  可以使用命令 <command>ATZ</command> 然后是
	  <command>ATI4</command></para>

	<para>如果您有一个不同牌子的 modem, 检查 modem
	  的使用手册看看如何双重检查您的 modem 的配置参数。</para>
      </sect3>
    </sect2>

    <sect2>
      <title>问题解答</title>

      <para>这儿是几个检查拨号modem的步骤。</para>

      <sect3>
	<title>检查FreeBSD系统</title>

	<para>把您的modem连接到FreeBSD系统, 启动系统, 然后, 如果您的
	  modem 有一个指示灯, 当登录时看看 modem 的 DTR 指示灯是否亮:
	  会在系统控制台出现命令行——如果它亮, 意味着 FreeBSD
	  已经在适当的通讯端口启动了一个 <command>getty</command> 进程,
	  等待 modem 接收一个呼叫。</para>

	<para>如果<acronym>DTR</acronym>指示灯不亮, 通过控制台登录到
	  FreeBSD系统,然后执行一个 <command>ps ax</command>
	  命令来看 FreeBSD 是否正在正确的端口运行
	  <command>getty</command>进程。
	  您将在进程显示中看到像这样的一行:</para>

	<screen>  114 ??  I      0:00.10 /usr/libexec/getty V19200 ttyu0
  115 ??  I      0:00.10 /usr/libexec/getty V19200 ttyu1</screen>

	<para>如果您看到是这样的:</para>

	  <screen>  114 d0  I      0:00.10 /usr/libexec/getty V19200 ttyu0</screen>

	<para>modem 不接收呼叫, 这意味着 <command>getty</command>
	  已经在通讯端口打开了。 这可以指出线缆有问题或 modem 错误配置,
	  因为 <command>getty</command> 无法打开通讯端口。</para>

	<para>如果您没有看到任何 <command>getty</command> 进程等待打开想要的
	  <devicename>ttyu<replaceable>N</replaceable></devicename> 端口,
	  在 <filename>/etc/ttys</filename> 中双击您的记录看看那儿是否有错误。
	  另外,检查日志文件 <filename>/var/log/messages</filename>
	  看看是否有一些来自 <command>init</command><command>getty</command> 的问题日志。 如果有任何信息,
	  仔细检查配置文件 <filename>/etc/ttys</filename><filename>/etc/gettytab</filename>,还有相应的设备文件
	  <devicename>/dev/ttyu<replaceable>N</replaceable></devicename>,
	  是否有错误,丢失记录,或丢失了设备指定文件。</para>
      </sect3>

      <sect3>
	<title>尝试接入Try Dialing In</title>

	<para>设法拨入系统。 确信使用8位, 没有奇偶检验, 在远程系统上的1阻止位。
	  如果您不能立刻得到一个命令行, 试试每隔一秒按一下
	  <keycap>Enter</keycap>。 如果您仍没有看到一个登录: 设法发送一个
	  <command>BREAK</command>。 如果您正使用一个高速的 modem 来拨号,
	  请在锁定拨号 modem 的接口速度后再试试。</para>

	<para>如果您不能得到一个登录:prompt,再检查一下
	  <filename>/etc/gettytab</filename>,重复检查:</para>

	<itemizedlist>
	  <listitem>
	    <para><filename>/etc/ttys</filename> 中指定的初始可用的名称与
	      <filename>/etc/gettytab</filename> 的一个可用的相匹配。</para>
		</listitem>

	  <listitem>
	    <para>每个 <literal>nx=</literal> 记录与另一个
	      <filename>gettytab</filename> 可用名称匹配。</para>
	  </listitem>

	  <listitem>
	    <para>每个 <literal>tc=</literal> 记录与另一个
	      <filename>gettytab</filename>可用名称相匹配。</para>
	  </listitem>
	</itemizedlist>

	<para>如果您拨号但 FreeBSD 系统上的 modem 没有回应, 确信 modem
	  能回应电话。 如果 modem 看起来配置正确了, 通过检查 modem
	  的指示灯来确认 <acronym>DTR</acronym> 线连接正确。</para>

	<para>如果您做了好几次,它仍然无法工作,打断一会,等会再试试。
	  如果还不能工作, 也许您应该发一封电子邮件给 &a.questions;
	  寻求帮助。</para>
      </sect3>
    </sect2>

  </sect1>

  <sect1 id="dialout">
    <title>拨出设备</title>

    <warning>
      <para>&os; 8.0 开始, 用于串口的设备节点从
	<filename>/dev/cuad<replaceable>N</replaceable></filename> 改为了
	<filename>/dev/cuau<replaceable>N</replaceable></filename>;
	从
	<filename>/dev/ttyd<replaceable>N</replaceable></filename> 改为了
	<filename>/dev/ttyu<replaceable>N</replaceable></filename>&os;&nbsp;7.X 用户需要根据实际情况对这份文档中的例子进行必要的调整。</para>
    </warning>

    <indexterm><primary>拨出服务</primary></indexterm>

    <para>下面将让您的主机通过 modem 连接到另一台计算机上。
      这只要适当地建立一个终端作为远程主机就可以。</para>

    <para>这可以用来登录进一个BBS。</para>

    <para>如果您用 PPP 有问题, 那这种连接可以用来从 Internet
      上下载一个文件。 如果您必须 FTP 一些东西, 而 PPP 断了,
      使用终端会话来 FTP 它们。 然后使用 zmodem 来把它们传输到您的机器上。</para>

    <sect2 id="hayes-unsupported">
      <title>我的Stock Hayes Modem不被支持,我该怎么办?</title>

      <para>事实上, 联机手册对于这个的描述已经过时了。 一个通用的
	Hayes拨号已经内建其中。 只要在您的 <filename>/etc/remote</filename>
	文件中使用 <literal>at=hayes</literal></para>

      <para>Hayes 驱动不够 <quote>聪明</quote> 只能认出一些比较新的 modem
	的高级特性 &mdash;<literal>BUSY</literal><literal>NO DIALTONE</literal>, 或 <literal>CONNECT 115200</literal>
	的信息将被搞乱。 当您使用的时候, 您必须把这些信息关掉。(通过
	<command>ATX0&amp;W</command>)。</para>

      <para>另外,拨号的延迟是 60 秒。 您的 modem
	可能使用另外的时间或提示认为有其他的通讯问题。
	试试 <command>ATS7=45&amp;W</command></para>
    </sect2>

    <sect2 id="direct-at">
      <title>我如何输入这些 AT 命令?</title>

      <indexterm>
	<primary><filename>/etc/remote</filename></primary>
      </indexterm>
      <para><filename>/etc/remote</filename> 文件中增加一个 <quote>direct</quote> 项。
	举例而言, 如果您的调制解调器挂在第一个串口, 即 <filename>/dev/cuau0</filename> 上,
	则应添加下面这行:</para>

      <programlisting>cuau0:dv=/dev/cuau0:br#19200:pa=none</programlisting>

      <para>此处应使用您的 modem 所支持的最高 br bps 速率。
	接下来, 输入 <command>tip cuau0</command> 就可以连到 modem 上了。</para>

      <para>此外, 也可以 <username>root</username> 身份执行 <command>cu</command>
	命令:</para>

      <screen>&prompt.root; <userinput>cu -l<replaceable>line</replaceable> -s<replaceable>speed</replaceable></userinput></screen>

      <para><replaceable>line</replaceable> 是串口
	(例如 <filename>/dev/cuau0</filename>) 而
	<replaceable>speed</replaceable> 则是速率
	(如 <literal>57600</literal>)。 当您输入完 AT
	之后, 按 <command>~.</command> 即可退出。</para>
    </sect2>

    <sect2 id="gt-failure">
      <title>现在pn <literal>@</literal>标记不能工作?</title>

      <para>在电话号码中的 <literal>@</literal> 标记告诉计算机在
	<filename>/etc/phones</filename> 文件中查找一个电话号码。 但
	<literal>@</literal> 标记也是一个在像 <filename>/etc/remote</filename>
	这样的可用文件中的特殊字符。 用一个反斜线符号退出:</para>

      <programlisting>pn=\@</programlisting>
    </sect2>

    <sect2 id="dial-command-line">
      <title>我如何在命令行拨电话号码?</title>

      <para>在您的 <filename>/etc/remote</filename> 文件中通常放着一个叫做
	<quote>generic</quote> 的记录。 例如:</para>

      <programlisting>tip115200|Dial any phone number at 115200 bps:\
        :dv=/dev/cuau0:br#115200:at=hayes:pa=none:du:
tip57600|Dial any phone number at 57600 bps:\
        :dv=/dev/cuau0:br#57600:at=hayes:pa=none:du:</programlisting>

      <para>然后, 可以执行:</para>

      <screen>&prompt.root; <userinput>tip -115200 5551234</userinput></screen>

      <para>如果您更喜欢<command>cu</command>而不是<command>tip</command>,使用一个通用的<literal>cu</literal>记录:</para>

      <programlisting>cu115200|Use cu to dial any number at 115200bps:\
        :dv=/dev/cuau1:br#57600:at=hayes:pa=none:du:</programlisting>

      <para>然后键入:</para>

      <screen>&prompt.root; <userinput>cu 5551234 -s 115200</userinput></screen>
    </sect2>

    <sect2  id="set-bps">
      <title>这么做时是否每次都需要重新输入 bps 速率?</title>

      <para>添加一项 <literal>tip1200</literal><literal>cu1200</literal>, 并将 bps 速率换成更合适的值。
	<command>tip</command> 的默认值是1200 &nbsp;bps, 也就是为什么会有
	<literal>tip1200</literal> 这条记录的原因。
	虽然您并不需要使用 1200&nbsp;bps。</para>
    </sect2>

    <sect2  id="terminal-server">
      <title>我通过一个终端服务器访问了很多主机。</title>

      <para>除非每次都要等到您连接到主机然后键入
	<command>CONNECT <replaceable>host</replaceable></command>,
        否则使用 <command>tip</command><literal>cm</literal> 功能。
	例如, 在 <filename>/etc/remote</filename> 中的这些记录:</para>

      <programlisting>pain|pain.deep13.com|Forrester's machine:\
        :cm=CONNECT pain\n:tc=deep13:
muffin|muffin.deep13.com|Frank's machine:\
        :cm=CONNECT muffin\n:tc=deep13:
deep13:Gizmonics Institute terminal server:\
        :dv=/dev/cuau2:br#38400:at=hayes:du:pa=none:pn=5551234:</programlisting>

      <para>将让您键入 <command>tip pain</command><command>tip
	  muffin</command> 连接到主机 <hostid>pain</hostid><hostid>muffin</hostid>, 和 <command>tip deep13</command>
        连接到终端服务器。</para>
    </sect2>

    <sect2 id="tip-multiline">
      <title><command>tip</command>能为每个站点试用多个线路吗?</title>

      <para>经常有一个问题, 一个大学有几个modem线路, 几千个学生设法使用它们。</para>

      <para><filename>/etc/remote</filename> 中为您的大学添加一个记录,
	然后为 <literal>pn</literal> 功能使用 <literal>@</literal> 标记:</para>

      <programlisting>big-university:\
        :pn=\@:tc=dialout
dialout:\
        :dv=/dev/cuau3:br#9600:at=courier:du:pa=none:</programlisting>

      <para>接着, 在 <filename>/etc/phones</filename>
	中列出大学的电话号码:</para>

      <programlisting>big-university 5551111
big-university 5551112
big-university 5551113
big-university 5551114</programlisting>

      <para><command>tip</command> 将按顺序试用每一个,然后就停止。
	如果想继续测试, 隔一段时间再运行 <command>tip</command></para>
    </sect2>

    <sect2 id="multi-controlp">
      <title>为什么我必须键入
        <keycombo action="simul">
          <keycap>Ctrl</keycap>
          <keycap>P</keycap>
        </keycombo>
        两次才能发出
        <keycombo action="simul">
          <keycap>Ctrl</keycap>
          <keycap>P</keycap>
        </keycombo>
        一次?</title>

      <para><keycombo action="simul"><keycap>Ctrl</keycap><keycap>P</keycap></keycombo>
        是默认的<quote>强制</quote>字符,被用来告诉 <command>tip</command>
        下一个字符是文字的数据。您可以用 <command>~s</command>
        给任何其他的字符设置强制字符,这意思是 <quote>设置一个变量</quote></para>

      <para>在新的一行键入 <command>~sforce=<replaceable>single-char</replaceable></command><replaceable>single-char</replaceable> 是任何简单的字符。 如果您遗漏了
	<replaceable>single-char</replaceable>, 那强制字符就是空字符,
	这可以键入
	<keycombo action="simul">
	  <keycap>Ctrl</keycap><keycap>2</keycap>
	</keycombo><keycombo action="simul">
	  <keycap>Ctrl</keycap><keycap>Space</keycap>
	</keycombo>来完成。 更好的 <replaceable>single-char</replaceable><keycombo action="simul">
	  <keycap>Shift</keycap>
	  <keycap>Ctrl</keycap>
	  <keycap>6</keycap>
	</keycombo>, 这只用在一些终端服务器上。</para>

      <para>通过在您的 <filename>&#36;HOME/.tiprc</filename>
	文件中指定下面这行, 就可以得到您想要的任何强制字符:</para>

      <programlisting>force=<replaceable>single-char</replaceable></programlisting>
    </sect2>

    <sect2 id="uppercase">
      <title>突然我键入的每一样东西都变成了大写??</title>

      <para>您一定是键入了
	<keycombo action="simul">
	  <keycap>Ctrl</keycap>
	  <keycap>A</keycap>
	</keycombo>, 即 <command>tip</command><quote>raise character</quote>,
	会临时地指定成坏掉的 caps-lock键。 使用上面的
	<command>~s</command> 来合理地设置各种
	<literal>raisechar</literal>。 事实上,
	如果您不想使用这些特性的话,您可以用同样的方法设置强制字符。</para>

      <para>这儿有一个很好的示例 <filename>.tiprc 文件</filename>,对
        <application>Emacs</application>用户来说,需要经常按
	<keycombo action="simul">
	  <keycap>Ctrl</keycap><keycap>2</keycap>
	</keycombo><keycombo action="simul">
	  <keycap>Ctrl</keycap><keycap>A</keycap>
	</keycombo></para>

      <programlisting>force=^^
raisechar=^^</programlisting>

      <para><literal>^^</literal><keycombo action="simul">
	  <keycap>Shift</keycap><keycap>Ctrl</keycap><keycap>6</keycap>
	</keycombo>.</para>

    </sect2>

    <sect2 id="tip-filetransfer">
      <title>如何用 <command>tip</command> 做文件传输?</title>

      <para>如果您正在与另一台 &unix; 系统对话, 您可以用
	<command>~p</command>(put) 和 <command>~t</command> (take)
	发送和接收文件。 这些命令可以在远程系统上运行 <command>cat</command><command>echo</command> 来接收和发送文件。 语法是这样的:</para>

      <cmdsynopsis>
	<command>~p</command>
	<arg choice="plain">local-file</arg>
	<arg choice="opt">remote-file</arg>
      </cmdsynopsis>

      <cmdsynopsis>
	<command>~t</command>
	<arg choice="plain">remote-file</arg>
	<arg choice="opt">local-file</arg>
      </cmdsynopsis>

      <para>由于没有错误校验, 所以您需要使用其他协议, 如 zmodem。</para>
    </sect2>

    <sect2 id="zmodem-tip">
      <title>我如何用<command>tip</command>运行zmodem?</title>

      <para>要接收这些文件,可以在远程终端启动发送程序。然后,键入
	<command>~C rz</command> 在本地开始接收它们。 要发送文件,
	可以在远程终端启动接收程序。 然后, 键入 <command>~C sz
	<replaceable>files</replaceable></command>
	把它们发送到远程系统。</para>
    </sect2>
  </sect1>

  <sect1 id="serialconsole-setup">
    <sect1info>
      <authorgroup>
	<author>
	  <firstname>Kazutaka</firstname>
	  <surname>YOKOTA</surname>
	  <contrib>Contributed by </contrib>
	</author>
      </authorgroup>
      <authorgroup>
	<author>
	  <firstname>Bill</firstname>
	  <surname>Paul</surname>
	  <contrib>Based on a document by </contrib>
	</author>
      </authorgroup>
    </sect1info>
    <title>设置串口控制台</title>

    <warning>
      <para>&os; 8.0 开始, 用于串口的设备节点从
	<filename>/dev/cuad<replaceable>N</replaceable></filename> 改为了
	<filename>/dev/cuau<replaceable>N</replaceable></filename>;
	从
	<filename>/dev/ttyd<replaceable>N</replaceable></filename> 改为了
	<filename>/dev/ttyu<replaceable>N</replaceable></filename>&os;&nbsp;7.X 用户需要根据实际情况对这份文档中的例子进行必要的调整。</para>
    </warning>

    <indexterm><primary>serial console</primary></indexterm>

    <sect2 id="serialconsole-intro">
      <title>介绍</title>

      <para>FreeBSD可以通过一个串口只使用一个哑 (dumb) 终端就可以启动一个系统。
	这样一种配置只有两种人能使用: 希望在机器上安装 FreeBSD 的系统管理员,
	他没有键盘或显示器, 还有就是要调试内核或设备驱动程序的开发人员。</para>

      <para>就象 <xref linkend="boot"/> 描述的, FreeBSD
	采用一个三步的启动过程。 最先两步储存在 FreeBSD 启动磁盘的启动
	slice 的启动代码块中。 引导块然后就被加载,
	接着运行第三步启动引导器 (<filename>/boot/loader</filename>)。</para>

      <para>为了设置串口控制台, 您必须配置启动代码块, 启动引导器代码和内核。</para>

    </sect2>

    <sect2 id="serialconsole-howto-fast">
      <title>串口控制台的配置, 简明版</title>

      <para>这一节假定您使用默认的配置, 只希望迅速地获得关于配置串口控制台的概览。</para>

      <procedure>

	<step>
	  <para>使用串口电缆连接 <devicename>COM1</devicename>
            和控制终端。</para>
	</step>

	<step>
	  <para>要在串口控制台上显示所有的引导信息,
	    需要以超级用户的身份执行下面的命令:</para>
	  <screen>&prompt.root; echo 'console="comconsole"' &gt;&gt; /boot/loader.conf</screen>
	</step>

	<step>
	  <para>编辑 <filename>/etc/ttys</filename> 并把
            <devicename>ttyu0</devicename><literal>off</literal> 改为 <literal>on</literal><literal>dialup</literal> 改为 <literal>vt100</literal>。
	    否则通过串口控制台上将不会提示输入口令,
	    从而导致潜在的安全漏洞。</para>
	</step>

	<step>
	  <para>重新启动并观察是否生效。</para>
	</step>

      </procedure>

      <para>如果需要不同的配置, 更进一步的配置讨论可以在
	<xref linkend="serialconsole-howto"/> 找到。</para>
    </sect2>

    <sect2 id="serialconsole-howto">
      <title>串口控制台的设置</title>

      <procedure>
	<step>
	  <para>准备一根串口线缆。</para>

	  <indexterm><primary>null-modem cable</primary></indexterm>
	  <para>您需要使用一个 null-modem 的线缆或标准的串口线和一个 null-modem
	    适配器。 请参考 <xref linkend="serial-cables-ports"/>
	    中有关串口线的讨论。</para>
	</step>

	<step>
	  <para>拔掉键盘。</para>

	  <para>绝大多数的PC在开机检测的时候会检测到键盘,
	    如果没有检测到键盘, 则会出现错误。 一些机器会提示缺少键盘,
	    就不会继续引导系统。</para>

	  <para>如果您的计算机出现错误, 但仍能继续启动, 您可以不必理它。</para>

	  <para>如果您的计算机没有键盘拒绝启动, 那您需要配置 BIOS
	    来避免它。 请参考您的主板的使用说明了解更多细节。</para>

	  <tip>
	    <para>在 BIOS 中将键盘设为 <quote>Not installed</quote> (未安装)。
	      现在您仍然无法使用键盘。 这样做只是告诉 BIOS
	      在启动时不要探测键盘。 您的 BIOS 不应抱怨键盘不存在。
	      即使这一标志设置为 <quote>Not
	      installed</quote> 时, 只要把键盘插上,
	      它就仍可使用。 如果以上的选项不存在于 BIOS 中,
              可尝试寻找 <quote>Halt on Error</quote> 选项。
              把这一项设置为 <quote>All but Keyboard</quote>
              或者是 <quote>No Errors</quote>, 都能器到相同的作用。</para>
	  </tip>

	  <note>
	    <para>如果系统有 PS/2 鼠标, 如果幸运的话,
	      您也可以象键盘一样把它拔下来, 这是因为 PS/2
	      鼠标与键盘的一些硬件是共享的, 您的鼠标插上去,
	      系统会认为键盘仍在那儿。</para>
	  </note>
	</step>

	<step>
	  <para>插一个哑 (dumb) 终端到<devicename>COM1</devicename>:(<devicename>sio0</devicename>)。</para>

	  <para>如果您没有哑终端, 可以使用一个比较老的带有一个 modem
	    程序的PC/XT机器, 或在其他 &unix; 机器上的串口。 如果您没有
	    <devicename>COM1</devicename>: (<devicename>sio0</devicename>),
	    去找一个。 这时, 您就不能只能选择
	    <devicename>COM1</devicename>:来启动系统。
	    如果您已经在另一台设备上使用 <devicename>COM1</devicename>,
	    您必须临时删除那个设备, 然后安装一个新的系统引导块和内核。</para>
	</step>

	<step>
	  <para>确信您的内核配置文件已经为 <devicename>COM1</devicename>:
	    (<devicename>sio0</devicename>) 设置了适当的标记:</para>

	  <para>有关的标记是:</para>

	  <variablelist>
	    <varlistentry>
	      <term><literal>0x10</literal></term>

	      <listitem>
		<para>启用控制台支持。 如果没有设置它,
		  则其他的控制台标记都会被忽略。 现在,
		  绝大多数的设置都有控制台的支持。
		  这个标记的第一个就是首选的。
		  这个单独选项是不能确保串口适用于控制台的,
		  设置下面的标记或加上下面描述的 <option>-h</option> 选项,
		  和这个放在一起。</para>
	      </listitem>
	    </varlistentry>

	    <varlistentry>
	      <term><literal>0x20</literal></term>

	      <listitem>
		<para>无论是否使用了下面将要讨论的
		  <option>-h</option> 选项, 都强制这个单元作为控制台
		  (除非使用了更高优先级的控制台)。
		  标志 <literal>0x20</literal> 必须与 <option>0x10</option> 一起使用。</para>
	      </listitem>
	    </varlistentry>

	    <varlistentry>
	      <term><literal>0x40</literal></term>

	      <listitem>

		<para>预留这个单元 (配合
		  <literal>0x10</literal>) 并让它不能用于普通的使用。
		  您不应在希望作为控制台的串口单元上设置这个标志。
		  这一标志是为内核远程调试准备的。
		  参见 <ulink
		  url="&url.books.developers-handbook;/index.html">开发者手册</ulink>
		  以了解关于远程调试更进一步的情况。</para>
	      </listitem>
	    </varlistentry>
	  </variablelist>

	  <para>例如:</para>

	  <programlisting>device sio0 flags 0x10</programlisting>

	  <para>看看 &man.sio.4; 的联机手册了解更多信息。</para>

	  <para>如果标记没有被设置, 您必须运行UserConfig或重新编译内核。</para>
	</step>

	<step>
	  <para>在启动磁盘的 <literal>a</literal> 分区的根目录创建
	    <filename>boot.config</filename> 文件。</para>

	  <para>这个文件将指导引导块代码如何启动系统。 为了激活串口控制台,
	    您必须有一个或多个下面的选项——如果您要多个选项,
	    在同一行必须都包含它们:</para>

	  <variablelist>
	    <varlistentry>
	      <term><option>-h</option></term>

	      <listitem>
		<para>切换内部和串口控制台。 您使用这个来交换控制台设备。
		  例如, 如果您从内部控制台启动, 您可以使用 <option>-h</option>
		  来直接使用启动引导器和内核来使用串口作为它的控制台设备。
		  另外, 如果您从串口启动, 您可以使用 <option>-h</option>
		  来告诉启动引导器和内核使用显示设备作为控制台。</para>
	      </listitem>
	    </varlistentry>

	    <varlistentry>
	      <term><option>-D</option></term>

	      <listitem>
		<para>切换单一和双重控制台配置。 在单一配置中,
		  控制台将是本机的控制台 (显示设备) 或串口。
		  在双重控制台配置中, 显示设备和串口将同时成为控制台,
		  无论 <option>-h</option> 的选项的情形。 然而,
		  双控制台配置只在引导块运行的过程中起作用。
		  一旦启动引导器获得控制, 由 <option>-h</option>
		  选项指定的控制台将成为唯一的控制台。</para>
	      </listitem>
	    </varlistentry>

	    <varlistentry>
	      <term><option>-P</option></term>

	      <listitem>
		<para>在启动时,探测键盘。如果键盘找不到,
		  <option>-D</option><option>-h</option> 选项会自动设置。</para>

		<note>
		  <para>由于当前版本引导块的空间限制, <option>-P</option>
		    选项只能探测扩展的键盘。 少于101键的键盘将无法被探测到。
		    如果您碰到这个情况, 您必须避免使用 <option>-P</option>
		    选项。 目前还没有绕过这个问题的办法。</para>
		</note>
	      </listitem>
	    </varlistentry>
	  </variablelist>

	  <para>使用 <option>-P</option> 选项来自动选择控制台, 或使用
	    <option>-h</option> 选项来激活控制台。</para>

	  <para>您也可以使用boot联机文档中所描述的其他选项。</para>

	  <para>除了 <option>-P</option> 选项, 所有选项将被传给启动引导器
	    (<filename>/boot/loader</filename>)。 启动引导器将通过检查
	    <option>-h</option> 选项的状态来决定是显示设备成为控制台,
	    还是串口成为控制台。 这表示如果您指定 <option>-D</option> 选项,
	    但在 <filename>/boot.config</filename> 中没有 <option>-h</option>
	    选项, 您在启动代码块时使用串口作为控制台。
	    启动引导器将使用内部显示设备作为控制台。</para>
	</step>

	<step>
	  <para>启动机器</para>

	  <para>当您启动您的FreeBSD时,引导块将把 <filename>/boot.config</filename>
	    的内容发给控制台。例如:</para>

	  <screen>/boot.config: -P
Keyboard: no</screen>

	  <para>如果您把 <option>-P</option> 放在 <filename>/boot.config</filename>
	    中并指出键盘存在或不存在, 那将只出现第二行。
	    这些信息会被定位到串口或内部控制台, 或两者同时, 这完全取决于
	    <filename>/boot.config</filename> 中的选项。</para>

	  <informaltable frame="none" pgwide="1">
	    <tgroup cols="2">
	      <thead>
		<row>
		  <entry align="left">选项</entry>
		  <entry align="left">送出消息的设备</entry>
		</row>
	      </thead>

	      <tbody>
		<row>
		  <entry>none</entry>
		  <entry>内部控制台</entry>
		</row>

		<row>
		  <entry><option>-h</option></entry>
		  <entry>串口控制台</entry>
		</row>

		<row>
		  <entry><option>-D</option></entry>
		  <entry>串口控制台和内部控制台</entry>
		</row>

		<row>
		  <entry><option>-Dh</option></entry>
		  <entry>串口控制台和内部控制台</entry>
		</row>

		<row>
		  <entry><option>-P</option>, 有键盘</entry>
		  <entry>内部控制台</entry>
		</row>

		<row>
		  <entry><option>-P</option>, 无键盘</entry>
		  <entry>串口控制台</entry>
		</row>
	      </tbody>
	    </tgroup>
	  </informaltable>

	  <para>出现上面信息后,
            在引导块加载启动引导器和更多信息被映到屏幕之前将有一个小小的停顿。
	    在通常情况下,您不需要打断启动进程,
            但为了确信设置是否正确,您也可以这样做。</para>

	  <para>在控制台上按 <keycap>Enter</keycap> 以外的任意键就能打断启动进程。
	    引导块将进入命令行模式。 您将看到:</para>

	  <screen>&gt;&gt; FreeBSD/i386 BOOT
Default: 0:ad(0,a)/boot/loader
boot:</screen>

	  <para>检验上面出现的信息, 可能是串口, 或内部控制台, 或两个同时,
	    完全取决于您在 <filename>/boot.config</filename> 中的选项。
	    如果信息出现在正确的控制台, 按 <keycap>Enter</keycap>
	    继续启动进程。</para>

	  <para>如果您要使用串口控制台, 但您没有看到命令行, 那可能设置有问题。
	    这时, 输入 <option>-h</option> 然后按 <keycap>Enter</keycap><keycap>Return</keycap> 来告诉引导块
            (然后是启动引导器和内核) 选择串口作为控制台。 一旦系统起来了,
	    就可以回去检查一下是什么出了问题。</para>
	</step>
      </procedure>

      <para>启动引导器加载完后, 您将进入启动进程的第三步,
	您仍然可以在启动引导器通过设定您喜欢的环境来切换内部控制台和串口控制台。
	参考 <xref linkend="serialconsole-loader"/></para>
    </sect2>

  <sect2 id="serialconsole-summary">
    <title>摘要</title>

      <para>这是几个在这章要讨论的几个设置和选择的控制台的摘要。</para>

      <sect3>
	<title>1: 您为 <devicename>sio0</devicename> 设置标记 0x10</title>

	<programlisting>device sio0 flags 0x10</programlisting>

	<informaltable frame="none" pgwide="1">
	  <tgroup cols="4">
	    <thead>
	      <row>
		<entry align="left">在 /boot.config 中的选项</entry>
		<entry align="left">引导块执行时所用的控制台</entry>
		<entry align="left">引导加载器执行时所用的控制台</entry>
		<entry align="left">内核所用的控制台</entry>
	      </row>
	    </thead>

	    <tbody>
	      <row>
		<entry></entry>
		<entry>内部</entry>
		<entry>内部</entry>
		<entry>内部</entry>
	      </row>

	      <row>
		<entry><option>-h</option></entry>
		<entry>串口</entry>
		<entry>串口</entry>
		<entry>串口</entry>
	      </row>

	      <row>
		<entry><option>-D</option></entry>
		<entry>串口和内部</entry>
		<entry>内部</entry>
		<entry>内部</entry>
	      </row>

	      <row>
		<entry><option>-Dh</option></entry>
		<entry>串口和内部</entry>
		<entry>串口</entry>
		<entry>串口</entry>
	      </row>

	      <row>
		<entry><option>-P</option>, 有键盘</entry>
		<entry>内部</entry>
		<entry>内部</entry>
		<entry>内部</entry>
	      </row>

	      <row>
		<entry><option>-P</option>, 没有键盘</entry>
		<entry>串口和内部</entry>
		<entry>串口</entry>
		<entry>串口</entry>
	      </row>
	    </tbody>
	  </tgroup>
	</informaltable>
      </sect3>

      <sect3>
	<title>2:您为 <devicename>sio0</devicename> 设置标记为 0x30</title>

	<programlisting>device sio0 flags 0x30</programlisting>

	<informaltable frame="none" pgwide="1">
	  <tgroup cols="4">
	    <thead>
	      <row>
		<entry align="left">在 /boot.config 中的选项</entry>
		<entry align="left">引导块执行时所用的控制台</entry>
		<entry align="left">引导加载器执行时所用的控制台</entry>
		<entry align="left">内核所用的控制台</entry>
	      </row>
	    </thead>

	    <tbody>
	      <row>
		<entry></entry>
		<entry>内部</entry>
		<entry>内部</entry>
		<entry>串口</entry>
	      </row>

	      <row>
		<entry><option>-h</option></entry>
		<entry>串口</entry>
		<entry>串口</entry>
		<entry>串口</entry>
	      </row>

	      <row>
		<entry><option>-D</option></entry>
		<entry>串口和内部</entry>
		<entry>内部</entry>
		<entry>串口</entry>
	      </row>

	      <row>
		<entry><option>-Dh</option></entry>
		<entry>串口和内部</entry>
		<entry>串口</entry>
		<entry>串口</entry>
	      </row>

	      <row>
		<entry><option>-P</option>, 有键盘</entry>
		<entry>内部</entry>
		<entry>内部</entry>
		<entry>串口</entry>
	      </row>

	      <row>
		<entry><option>-P</option>, 没有键盘</entry>
		<entry>串口和内部</entry>
		<entry>串口</entry>
		<entry>串口</entry>
	      </row>
	    </tbody>
	  </tgroup>
	</informaltable>
      </sect3>
    </sect2>

    <sect2 id="serialconsole-tips">
      <title>串口控制台的提示</title>

      <sect3>
	<title>设置更高的串口速度</title>

	<para>在默认配置中, 串口的设置是: 速率 9600 波特、 8
	  数据位、 无奇偶校验位、 1 停止位。 如果您希望修改默认的控制台速率,
	  可以采用下列几种方法之一:</para>

	<itemizedlist>
	  <listitem>
	    <para><makevar>BOOT_COMCONSOLE_SPEED</makevar> 配置为希望的速率,
	      并重新编译引导块。 请参见 <xref linkend="serialconsole-com2"/>
	      以了解如何联编和安装新的引导块。</para>

	    <para>如果串口控制台已配置为使用 <option>-h</option> 以外的其它方式引导,
	      或者内核使用的速率与引导块不同, 则必需在内核配置文件中加入下述设置,
	      并重新联编新内核:</para>

	    <programlisting>options CONSPEED=19200</programlisting>
	  </listitem>

	  <listitem>
	    <para>使用内核引导选项 <option>-S</option>.
	      <option>-S</option> 这个命令行选项可以加到 <filename>/boot.config</filename>
	      中。 请参见联机手册 &man.boot.8; 以获得如何在 <filename>/boot.config</filename>
	      中增加选项, 以及其它的可用选项。</para>
	  </listitem>

	  <listitem>
	    <para>在您的 <filename>/boot/loader.conf</filename> 文件中启用 <varname>comconsole_speed</varname>
	      选项。</para>

	    <para>使用这个选项时,您还需要在 <filename>/boot/loader.conf</filename>
	      中配置 <varname>console</varname><varname>boot_serial</varname>, 以及
	      <varname>boot_multicons</varname>。 下面是一个利用
	      <varname>comconsole_speed</varname> 改变串口控制台速率的例子:</para>

	    <programlisting>boot_multicons="YES"
boot_serial="YES"
comconsole_speed="115200"
console="comconsole,vidconsole"</programlisting>
	  </listitem>
	</itemizedlist>
      </sect3>

      <sect3 id="serialconsole-com2">
	<title>使用 <devicename>sio0</devicename> 以外的串口
	  作为控制台</title>

	<para>使用串口而不是 <devicename>sio0</devicename>
	  作为控制台需要做一些重编译。 如果您无论如何都要使用另一个串口,
	  重新编译引导块, 启动引导器和内核。</para>

	<procedure>
	  <step>
	    <para>取得内核源代码 (参考 <xref linkend="updating-upgrading"/>)。</para>
	  </step>

	  <step>
	    <para>编辑 <filename>/etc/make.conf</filename> 文件, 然后设置
	      <literal>BOOT_COMCONSOLE_PORT</literal>作为您要使用
	      (<literal>0x3f8</literal><literal>0x2f8</literal>0x3E80x2E8) 端口的地址。 只有 <devicename>sio0</devicename><devicename>sio3</devicename> (<devicename>COM1</devicename><devicename>COM4</devicename>) 都可以使用; 但多口串口卡将不会工作。
	      不需要任何中断设置。</para>
	  </step>

	  <step>
	    <para>创建一个定制的内核配置文件, 在您要使用的串口添加合适的标记。
	      例如, 如果要将 <devicename>sio1</devicename>
	      (<devicename>COM2</devicename>) 作为控制台:</para>

	    <programlisting>device sio1 flags 0x10</programlisting>

	    <para></para>

	    <programlisting>device sio1 flags 0x30</programlisting>

	    <para>其他端口的控制台标记也不要设。</para>
	  </step>

	  <step>
	    <para>重新编译和安装引导块:</para>

	    <screen>&prompt.root; <userinput>cd /sys/boot</userinput>
&prompt.root; <userinput>make clean</userinput>
&prompt.root; <userinput>make</userinput>
&prompt.root; <userinput>make install</userinput></screen>
	  </step>

	  <step>
	    <para>重建和安装内核。</para>
	  </step>

	  <step>
	    <para>用 &man.bsdlabel.8;
	      将引导块写到启动盘上,然后从新内核启动。</para>
	  </step>
	</procedure>
      </sect3>

      <sect3 id="serialconsole-ddb">
	<title>通过串口线进入DDB调试器</title>

	<programlisting>options BREAK_TO_DEBUGGER
options DDB</programlisting>
      </sect3>

      <sect3>
	<title>在串口控制台上得到一个登录命令行</title>

	<para>您可能希望通过串口线进入登录提示, 现在您可以看到启动信息,
	  通过串口控制台键入内核调试信息。可以这样做。</para>

	<para>用一个编辑器打开 <filename>/etc/ttys</filename> 文件,
	  然后找到下面的行:</para>

      <programlisting>ttyu0 "/usr/libexec/getty std.9600" unknown off secure
ttyu1 "/usr/libexec/getty std.9600" unknown off secure
ttyu2 "/usr/libexec/getty std.9600" unknown off secure
ttyu3 "/usr/libexec/getty std.9600" unknown off secure</programlisting>

	<para><devicename>ttyu0</devicename><devicename>ttyu3</devicename> 相当于
	  <devicename>COM1</devicename><devicename>COM4</devicename>。
	  可以打开或关闭某个端口。 如果您已经改变了串口的速度,
	  还必须改掉标准的 <literal>9600</literal>
          与当前的例如 <literal>19200</literal> 相匹配。</para>

	<para>您也可以改变终端的类型从不知名的到您串口终端的真实类型。
	  编辑完这个文件, 您必须 <command>kill -HUP 1</command>
	  来使这个修改生效。</para>
      </sect3>
    </sect2>

    <sect2 id="serialconsole-loader">
      <title>从启动引导器修改控制台</title>

      <para>前面一节描述了如何通过调整引导块来设定串口控制台。
	这节将讲到在启动引导器中通过键入一些命令和环境变量来指定控制台。
	由于启动引导器会被启动进程的第三步所调用, 引导块以后,
	在启动引导器中的设置将忽略在引导块中的设置。</para>

      <sect3>
	<title>配置串口控制台</title>

	<para>您可以很容易地指定启动引导器和内核来使用串口控制台, 只需要在
	  <filename>/boot/loader.ronf</filename>中写入下面这行:</para>

	<programlisting>console="comconsole"</programlisting>

	<para>无论前一节中的引导块如何配置, 这个设置都会生效。</para>

	<para>您最好把上面一行放在
          <filename>/boot/loader.conf</filename>
          文件的第一行,以便尽早地在启动时看到串口控制台的启动信息。</para>

	<para>同样地,您可以指定内部控制台为:</para>

	<programlisting>console="vidconsole"</programlisting>

	<para>如果您不设置启动引导环境变量控制台,
	  启动引导器和内核将使用在引导块时用 <option>-h</option>
	  选项指定的控制台。</para>

	<para>控制台可以在
	  <filename>/boot/loader.conf.local</filename> 或者是在
	  <filename>/boot/loader.conf</filename> 中指定。</para>

	<para>看看 &man.loader.conf.5; 的联机手册了解更多信息。</para>

	<note>
	  <para>目前,  引导块尚不提供与引导加载器的
	    <option>-P</option> 选项等价的选项,
	    另外, 它也不能根据是否有键盘存在自动决定选择使用内部控制台还是串口控制台。</para>
	</note>
      </sect3>

      <sect3>
	<title>使用串口而不是<devicename>sio0</devicename>作为控制台</title>

	<para>要使用一个串口而不是 <devicename>sio0</devicename> 作为串口控制台
	  需要重新编译启动引导器。下面的步骤跟
	  <xref linkend="serialconsole-com2"/> 描述的相似。</para>
      </sect3>
    </sect2>

    <sect2 id="serialconsole-caveats">
      <title>警告</title>

      <para>这篇文章本意是想告诉人们如何设定没有显示设备或键盘的专用服务器。
	不幸的是, 绝大多数系统没有键盘可以让您启动,
	而没有显示设备就不让您启动。 使用 AMI BIOS 的机器可以通过在 CMOS
	中将 <quote>graphics adapter</quote> 项设为
	<quote>Not installed</quote> 来在启动时不要求显示适配器。</para>

      <para>然而, 许多机器并不支持这个选项,
	如果您的系统没有显示硬件就拒绝启动。 对于这些机器, 即使您没有显示器,
	也必须在机器上插上显示适配器。 建议您试试采用 AMI BIOS 的机器。</para>
    </sect2>
  </sect1>
</chapter>