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
|
---
title: Hoofdstuk 26. Seriële communicatie
part: Deel IV. Netwerkcommunicatie
prev: books/handbook/partiv
next: books/handbook/ppp-and-slip
---
[[serialcomms]]
= Seriële communicatie
:doctype: book
:toc: macro
:toclevels: 1
:icons: font
:sectnums:
:sectnumlevels: 6
:source-highlighter: rouge
:experimental:
:skip-front-matter:
:toc-title: Inhoudsopgave
:table-caption: Tabel
:figure-caption: Afbeelding
:example-caption: Voorbeeld
:xrefstyle: basic
:relfileprefix: ../
:outfilesuffix:
:sectnumoffset: 26
ifeval::["{backend}" == "html5"]
:imagesdir: ../../../images/books/handbook/serialcomms/
endif::[]
ifeval::["{backend}" == "pdf"]
:imagesdir: ../../../../static/images/books/handbook/serialcomms/
endif::[]
ifeval::["{backend}" == "epub3"]
:imagesdir: ../../../../static/images/books/handbook/serialcomms/
endif::[]
include::shared/authors.adoc[]
include::shared/releases.adoc[]
include::shared/nl/mailing-lists.adoc[]
include::shared/nl/teams.adoc[]
include::shared/nl/urls.adoc[]
toc::[]
[[serial-synopsis]]
== Overzicht
UNIX(R) heeft altijd ondersteuning geboden voor seriële communicatie. Het is een feit dat de allereerste UNIX(R)-machines afhankelijk waren van seriële kabels voor gebruikersinvoer en -uitvoer. De dingen zijn flink veranderd sinds de tijd dat de gemiddelde "terminal" uit een 10-tekens-per-seconde seriële printer en een toetsenbord bestond. Dit hoofdstuk beschrijft enkele manieren waarop FreeBSD gebruik maakt van seriële communicatie.
Na het lezen van dit hoofdstuk weet de lezer:
* Hoe terminals met een FreeBSD-systeem te verbinden;
* Hoe een modem te gebruiken om naar computers op afstand te bellen;
* Hoe het mogelijk te maken voor gebruikers op afstand om met een modem op een systeem aan te melden;
* Hoe een systeem van een seriële console op te starten.
Veronderstelde voorkennis:
* Weten hoe een nieuwe kernel ingesteld en geïnstalleerd wordt (crossref:kernelconfig[kernelconfig,De FreeBSD-kernel instellen]);
* Begrijpen hoe rechten en processen in UNIX(R) werken (crossref:basics[basics,UNIX® beginselen]);
* De beschikking hebben over het technische handboek voor de hardware (modem of meerpoortige kaart) die gebruikt wordt met FreeBSD.
[[serial]]
== Inleiding
[WARNING]
====
Vanaf FreeBSD 8.0 zijn de seriële poorten hernoemd van [.filename]#/dev/cuadN# naar [.filename]#/dev/cuauN# en van [.filename]#/dev/ttydN# naar [.filename]#/dev/ttyuN#. FreeBSD 7.X gebruikers moeten de documentatie aanpassen naar deze wijzigingen.
====
[[serial-terminology]]
=== Terminologie
bps::
Bits per seconde: de snelheid waarmee gegevens verstuurd worden
DTE::
Data Terminal Equipment (apparatuur voor gegevensterminal): bijvoorbeeld een computer
DCE::
Data Communications Equipment (apparatuur voor gegevenscommunicatie): een modem
RS-232::
EIA standaard voor hardwarematige seriële communicatie
Deze sectie gebruikt niet de term "baud" als er over snelheden van gegevenscommunicatie gesproken wordt. Baud verwijst naar het aantal elektrische toestandsovergangen dat binnen een tijdsperiode gemaakt mag worden, "bps" (bits per seconde) is de _correcte_ term om te gebruiken (de oude mopperkonten schijnen zich er niet erg druk over te maken).
[[serial-cables-ports]]
=== Kabels en poorten
Om een modem of terminal met een FreeBSD-systeem te verbinden, dienen een seriële poort op een computer en een kabel om verbinding te maken met een serieel apparaat aanwezig te zijn. Indien kennis over hardware en de benodigde kabel reeds aanwezig is, kan deze sectie veilig worden overgeslagen.
[[term-cables]]
==== Kabels
Er zijn verschillende soorten seriële kabels. De twee meest voorkomende types in deze context zijn nulmodem-kabels en standaard ("rechte") RS-232-kabels. De documentatie van de hardware beschrijft het type kabel dat nodig is.
[[term-cables-null]]
===== Nulmodem-kabels
Een nulmodem-kabel geeft sommige signalen, zoals "Aardesignaal" recht door, maar kruist andere signalen. Bijvoorbeeld, de "Verzonden Gegevens"-pin aan de ene kant gaat naar de "Ontvangen Gegevens"-pin aan de andere kant.
Een nulmodem-kabel voor het gebruik met terminals kan ook zelf worden gemaakt (bijvoorbeeld voor kwaliteitsdoeleinden). Deze tabel toont de RS-232C <<serialcomms-signal-names,signalen>> en de pinnummers op een DB-25-aansluiting. De standaard vereist ook een _Aardebescherming_ rechte lijn van pin 1 naar pin 1, maar deze wordt vaak weggelaten. Sommige terminals werken goed met slechts pin 2, 3 en 7, terwijl andere instellingen eisen die afwijken van die in de onderstaande voorbeelden.
.DB-25 naar DB-25 nulmodem-kabel
[cols="1,1,1,1,1", frame="none", options="header"]
|===
<| Signaal
<| Pin #
|
<| Pin #
<| Signaal
|SG
|7
|verbonden met
|7
|SG
|TD
|2
|verbonden met
|3
|RD
|RD
|3
|verbonden met
|2
|TD
|RTS
|4
|verbonden met
|5
|CTS
|CTS
|5
|verbonden met
|4
|RTS
|DTR
|20
|verbonden met
|6
|DSR
|DTR
|20
|verbonden met
|8
|DCD
|===
In de onderstaande tabellen volgen twee schema's die momenteel meer gebruikelijk zijn:
.DB-9 naar DB-9 nulmodem-kabel
[cols="1,1,1,1,1", frame="none", options="header"]
|===
<| Signaal
<| Pin #
|
<| Pin #
<| Signaal
|RD
|2
|verbonden met
|3
|TD
|TD
|3
|verbonden met
|2
|RD
|DTR
|4
|verbonden met
|6
|DSR
|DTR
|4
|verbonden met
|1
|DCD
|SG
|5
|verbonden met
|5
|SG
|DSR
|6
|verbonden met
|4
|DTR
|DCD
|1
|verbonden met
|4
|DTR
|RTS
|7
|verbonden met
|8
|CTS
|CTS
|8
|verbonden met
|7
|RTS
|===
.DB-9 naar DB-25 nulmodem-kabel
[cols="1,1,1,1,1", frame="none", options="header"]
|===
<| Signaal
<| Pin #
|
<| Pin #
<| Signaal
|RD
|2
|verbonden met
|2
|TD
|TD
|3
|verbonden met
|3
|RD
|DTR
|4
|verbonden met
|6
|DSR
|DTR
|4
|verbonden met
|8
|DCD
|SG
|5
|verbonden met
|7
|SG
|DSR
|6
|verbonden met
|20
|DTR
|DCD
|1
|verbonden met
|20
|DTR
|RTS
|7
|verbonden met
|5
|CTS
|CTS
|8
|verbonden met
|4
|RTS
|===
[NOTE]
====
Als een pin aan het ene eind verbonden is met een pinnenpaar aan het andere eind, is dit meestal geïmplementeerd met een korte draad tussen het pinnenpaar in de stekker en een lange draad naar de andere, enkele pin.
====
Bovenstaande ontwerpen lijken het populairst. In een andere variatie (uitgelegd in het boek _RS-232 Made Easy_) worden de volgende verbindingen gemaakt: SG met SG, TD met RD, RTS en CTS met DCD, DTR met DSR en vice-versa.
[[term-cables-std]]
===== Standaard RS-232C-kabels
Een standaard seriële kabel laat alle RS-232C-signalen recht door. Dit betekent dat de "Verzonden Gegevens"-pin aan de ene kant naar de "Verzonden Gegevens"-pin aan de andere kant gaat. Dit type kabel wordt gebruikt om een modem met een FreeBSD-systeem te verbinden en is ook geschikt voor sommige terminals.
[[term-ports]]
==== Poorten
Seriële poorten zijn apparaten die gebruikt worden om gegevens te versturen tussen een FreeBSD gastcomputer en een terminal. Deze sectie beschrijft de bestaande soorten poorten en hoe deze aangesproken worden in FreeBSD.
[[term-portkinds]]
===== Soorten poorten
Er bestaan verschillende soorten seriële poorten. Controleer of een kabel past op de poorten van een terminal en een FreeBSD-systeem alvorens deze te kopen of te maken.
De meeste terminals hebben DB-25-poorten. PC's, inclusief PC's die FreeBSD draaien, hebben DB-25- of DB-9-poorten. Indien een meerpoortige seriële kaart voor een PC beschikbaar is, kan het zijn dat er RJ-12- of RJ-45-poorten aanwezig zijn.
In documentatie die bij hardware zit, staan specificaties over het soort poort dat gebruikt wordt. Vaak volstaat ook een visuele inspectie van een poort.
[[term-portnames]]
===== Poortnamen
In FreeBSD wordt elke seriële poort benaderd door een ingang in de map [.filename]#/dev#. Er zijn twee verschillende soorten ingangen:
* Inbelpoorten heten [.filename]#/dev/ttyuN# waarbij _N_ het poortnummer is, beginnend met nul. In het algemeen kunnen inbelpoorten voor terminals gebruikt worden. Inbelpoorten stellen de eis dat een seriële kabel ervoor zorgt dat het data carrier detect (DCD) signaal correct werkt.
* Uitbelpoorten heten [.filename]#/dev/cuauN#. In het algemeen worden uitbelpoorten niet voor terminals maar voor modems gebruikt. Gebruik een uitbelpoort als een seriële kabel of terminal het carrier detect-signaal niet ondersteunt.
Als er een terminal met de eerste seriële poort ([.filename]#COM1# in MS-DOS(R)) verbonden is, wordt [.filename]#/dev/ttyu0# gebruikt om naar de terminal te verwijzen. Als een terminal op de tweede seriële poort is aangesloten (ook bekend als [.filename]#COM2#), dient [.filename]#/dev/ttyu1# gebruikt te worden, enzovoort.
=== Kernelinstellingen
FreeBSD ondersteunt standaard vier seriële poorten. In de wereld van MS-DOS(R) staan ze bekend als [.filename]#COM1#, [.filename]#COM2#, [.filename]#COM3# en [.filename]#COM4#. FreeBSD ondersteunt momenteel "domme" meerpoortige seriële interfacekaarten, zoals de BocaBoard 1008 en 2016, alsook intelligentere meerpoortige kaarten van fabrikanten als Digiboard en Stallion Technologies. De kernel kijkt echter alleen naar de standaard COM-poorten.
Bekijk de boodschappen tijdens het opstarten van de kernel om te zien of de kernel seriële poorten herkent of gebruik het commando `/sbin/dmesg` om de opstartboodschappen van de kernel te herhalen. Kijk in het bijzonder naar boodschappen die met de tekens `uart` beginnen als u FreeBSD 8.0 of nieuwer gebruikt, of `sio` voor FreeBSD 7.4 of ouder.
[TIP]
====
Gebruik het volgende commando om alleen de boodschappen die het woord `sio` bevatten te zien:
[source,shell]
....
# /sbin/dmesg | grep 'uart'
# /sbin/dmesg | grep 'sio'
....
====
Voor bijvoorbeeld een FreeBSD 7._X_ systeem met vier seriële poorten zijn dit de opstartboodschappen van de kernel die specifiek zijn voor de seriële poorten:
[source,shell]
....
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
....
Als een kernel niet alle seriële poorten herkent, dan dient waarschijnlijk de kernel aangepast te worden in het bestand [.filename]#/boot/device.hints#. Het is ook mogelijk regels uit te schakelen of volledig te verwijderen voor apparaten die niet aanwezig zijn.
Zie de hulppagina man:sio[4] voor meer informatie over het instellen van seriële poorten en meerpoortige kaarten. Bij gebruik van een instellingenbestand dat eerder voor een andere versie van FreeBSD werd gebruikt is voorzichtigheid geboden omdat de apparaatvlaggen en de syntaxis tussen de versies veranderd zijn.
[NOTE]
====
`port IO_COM1` is een substitutie voor `port 0x3f8`, `IO_COM2` is `0x2f8`, `IO_COM3` is `0x3e8` en `IO_COM4` is `0x2e8`, welke redelijk algemene poortadressen zijn voor hun overeenkomstige seriële poorten. Interrupts 4, 3, 5 en 9 zijn redelijk algemene interruptlijnen. Reguliere seriële poorten kunnen _geen_ interrupts delen op ISA-bus-PC's (meerpoortige kaarten hebben elektronica die alle 16550A's op een kaart in staat stellen om één of twee interruptlijnen te delen).
====
=== Speciale apparaatbestanden
De meeste apparaten in de kernel worden benaderd met "speciale apparaatbestanden" die in de map [.filename]#/dev# staan. De apparaten [.filename]#sio# worden benaderd met de apparaten [.filename]#/dev/ttyuN# (inbellen) en [.filename]#/dev/cuauN# (uitbellen). FreeBSD biedt ook initialisatie-apparaten ([.filename]#/dev/ttyuN.init# en [.filename]#/dev/cuauN.init#) en slotapparaten ([.filename]#/dev/ttyuN.lock# en [.filename]#/dev/cuadN.lock#). De initialisatie-apparaten worden gebruikt om telkens als een poort wordt geopend de parameters van de communicatiepoorten te initialiseren, zoals `crtscts` voor modems die gebruik maken van `RTS/CTS`-signalering voor gegevensstroombeheer. De slotapparaten worden gebruikt om vlaggen op poorten op slot te zetten om te voorkomen dat gebruikers of programma's bepaalde parameters veranderen. In de hulppagina's man:termios[4], man:sio[4] en man:stty[1] staat informatie over respectievelijk terminalinstellingen, apparaten op slot zetten en initialiseren en terminalopties instellen.
[[serial-hw-config]]
=== De seriële poort instellen
Het apparaat [.filename]#ttyuN# (of [.filename]#cuauN#) is het gebruikelijke apparaat dat geopend dient te worden voor de applicaties. Wanneer een proces het apparaat opent, heeft het een standaardverzameling aan terminal I/O-instellingen. Bekijk deze instellingen met het volgende commando:
[source,shell]
....
# stty -a -f /dev/ttyu1
....
Als de instellingen van dit apparaat veranderd worden, blijven de instellingen geldig totdat het apparaat gesloten wordt. Als het heropend wordt, gaat het terug naar de standaardverzameling. Om de standaardverzameling te veranderen, dient het apparaat voor de "initiële toestand" geopend te worden en die instellingen veranderd te worden. Om bijvoorbeeld de `CLOCAL`-modus, 8-bits-communicatie en `XON/XOFF`-gegevensstroombeheer voor apparaat [.filename]#ttyu5# standaard aan te zetten:
[source,shell]
....
# stty -f /dev/ttyu5.init clocal cs8 ixon ixoff
....
De systeembrede initialisatie van de seriële apparaten wordt beheerd in [.filename]#/etc/rc.d/serial#. Dit bestand heeft invloed op de standaardinstellingen van seriële apparaten.
Om te voorkomen dat bepaalde instellingen door een applicatie worden veranderd, dienen wijzigingen aan het "slottoestand"-apparaat te worden aangebracht. Om bijvoorbeeld de snelheid van [.filename]#ttyu5# vast te zetten op 57600 bps:
[source,shell]
....
# stty -f /dev/ttyu5.lock 57600
....
Nu blijft een applicatie die [.filename]#ttyu5# en de snelheid van de poort probeert te veranderen zitten op 57600 bps.
Uiteraard dienen de apparaten voor de initiële toestand en de slottoestand alleen voor het account `root` schrijfbaar te zijn.
[[term]]
== Terminals
[WARNING]
====
Vanaf FreeBSD 8.0 zijn de seriële poorten hernoemd van [.filename]#/dev/cuadN# naar [.filename]#/dev/cuauN# en van [.filename]#/dev/ttydN# naar [.filename]#/dev/ttyuN#. FreeBSD 7.X gebruikers moeten de documentatie aanpassen naar deze wijzigingen.
====
Terminals bieden een handige en goedkope manier om een FreeBSD systeem te benaderen als de console van of een netwerk naar een computer niet beschikbaar is. Deze sectie beschrijft hoe terminals met FreeBSD te gebruiken.
[[term-uses]]
=== Types terminals en ze gebruiken
De originele UNIX(R)-systemen hadden geen consoles. In plaats daarvan werd er aangemeld en werden programma's via terminals gedraaid die verbonden waren met de seriële poorten van een computer. Het is goed vergelijkbaar met het gebruik van een modem en terminalsoftware om op een systeem op afstand in te bellen en werk te doen wat alleen uit tekst bestaat.
De consoles van hedendaagse PC's kunnen grafische uitvoer van hoge kwaliteit produceren, maar de mogelijkheid om een aanmeldsessie op een seriële poort tot stand te brengen bestaat nog steeds op bijna elk hedendaags UNIX(R)-achtig systeem. FreeBSD is geen uitzondering. Door gebruik te maken van een terminal die aangesloten is op een ongebruikte seriële poort, kan er aangemeld worden en kan bijna elk tekstprogramma gedraaid worden dat normaalgesproken op de console of in een `xterm`-venster in het X Window-systeem gedraaid wordt.
Een zakelijke gebruiker kan vele terminals aan een FreeBSD-systeem koppelen en deze op de bureaus van medewerkers neerzetten. Een thuisgebruiker kan een reservecomputer, zoals een oudere IBM PC of een Macintosh(R), met de terminal verbinden met een krachtigere computer die FreeBSD draait. Op deze manier kan wat anders een computer voor een enkele gebruiker zou zijn, worden veranderd in een krachtig systeem voor meerdere gebruikers.
Er zijn drie soorten terminals voor FreeBSD:
* <<term-dumb,Domme terminals>>;
* <<term-pcs,PC's die als terminals dienen>>;
* <<term-x,X-terminals>>.
De overige subsecties beschrijven elk van deze soorten.
[[term-dumb]]
==== Domme terminals
Domme terminals zijn gespecialiseerde stukken hardware die computers door seriële kabels kunnen verbinden. Ze worden "dom" genoemd omdat ze alleen maar tekst kunnen weergeven, verzenden en ontvangen. Het is niet mogelijk om programma's op deze terminals te draaien. De computer waar ze op zijn aangesloten heeft de benodigde kracht om tekstverwerkers, compilers, e-mail, spellen, enzovoort te draaien.
Er zijn honderden soorten domme terminals gemaakt door vele fabrikanten, inclusief de VT-100 van Digital Equipment Corporation en de WY-75 van Wyse. Bijna elke soort werkt met FreeBSD. Sommige terminals uit de hoogste klasse kunnen zelfs grafisch weergeven, maar slechts bepaalde softwarepakketten kunnen gebruik maken van deze geavanceerde mogelijkheden.
Domme terminals zijn ook populair in werkomgevingen waarin gebruikers geen toegang tot grafische applicaties nodig hebben, zoals die door het X Window systeem worden geleverd.
[[term-pcs]]
==== PC's die als terminal dienen
Indien een <<term-dumb,domme terminal>> net genoeg mogelijkheden heeft om tekst weer te geven, te verzenden en te ontvangen, dan kan zeker elke reserve-PC een domme terminal zijn. De enige benodigdheden zijn de juiste kabel en wat _terminal-emulatie_ software om op de computer te draaien.
Zo'n opstelling is populair in thuissituaties. Indien bijvoorbeeld persoon A werkt op de console van een FreeBSD-systeem, kan persoon B wat alleen-tekst-werk verrichten op een minder krachtige PC die als terminal met het FreeBSD-systeem verbonden is.
Er zijn minstens twee applicaties beschikbaar in het basissysteem van FreeBSD welke gebruikt kunnen worden om te communiceren door een seriële connectie: man:cu[1] en man:tip[1].
Om een connectie op te zetten vanaf een systeem dat FreeBSD draait naar een seriële connectie van een andere machine kan het volgende gedaan worden:
[source,shell]
....
# cu -l serial-port-device
....
Hierbij is "serial-port-device" de naam is van de speciale apparaatnode die gebruikt wordt voor de seriële poort op het systeem. Deze bestanden heten [.filename]#/dev/cuauN#.
Het "N" gedeelte van de apparaatnaam is het nummer van de seriële poort.
[NOTE]
====
Let op, de apparaatnummers beginnen in FreeBSD bij nul en niet bij één (zoals ze bijvoorbeeld wel doen bij MS-DOS(R) gebaseerde systemen). Dit betekend dat wat MS-DOS(R) gebaseerde systemen [.filename]#COM1# noemt bij FreeBSD meestal [.filename]#/dev/cuau0# genoemd wordt.
====
[NOTE]
====
Sommige mensen preferen andere programma's die beschikbaar zijn via de Ports Collectie. De ports bevatten een aantal programma's die hetzelfde kunnen werken als man:cu[1] en man:tip[1], zoals package:comms/minicom[].
====
[[term-x]]
==== X-terminals
X-terminals behoren tot de meest geavanceerde terminalsoort die beschikbaar is. In plaats van dat ze verbinding maken met een seriële poort, maken ze meestal verbinding met een netwerk zoals Ethernet. In plaats van dat ze alleen tekstapplicaties weergeven, kunnen ze elke X-applicatie weergeven.
X-terminals worden slechts voor de compleetheid geïntroduceerd. Dit hoofdstuk behandelt echter _niet_ de installatie, het instellen of het gebruik van X-terminals.
[[term-config]]
=== Instellen
Deze sectie beschrijft wat in te stellen op een os;-systeem om een aanmeldsessie op een terminal mogelijk te maken. De sectie gaat ervan uit dat er al een kernel is ingesteld met ondersteuning voor een seriële poort waar de terminal op is aangesloten en dat deze verbonden is.
In crossref:boot[boot,Het FreeBSD opstartproces] staat beschreven dat het proces `init` verantwoordelijk is voor het beheer van alle processen en voor de initialisatie tijdens het opstarten van een systeem. Eén van de taken die door `init` wordt uitgevoerd is het lezen van het bestand [.filename]#/etc/ttys# en het starten van een proces `getty` op de beschikbare terminals. Het proces `getty` is verantwoordelijk voor het lezen van een aanmeldnaam en het starten van het programma `login`.
Voer volgende stappen als `root` uit om terminals voor een FreeBSD-systeem in te stellen:
[.procedure]
====
. Voeg een regel aan [.filename]#/etc/ttys# toe voor de ingang in de map [.filename]#/dev# voor een seriële poort als deze er nog niet is;
. Specificeer dat `/usr/libexec/getty` uitgevoerd moet worden op de poort en het juiste type _getty_ van het bestand [.filename]#/etc/gettytab#;
. Specificeer het standaard terminaltype;
. Stel de poort in op "on";
. Specificeer of de poort "secure" dient te zijn;
. `init` dient [.filename]#/etc/ttys# opnieuw te lezen.
====
Als optionele stap kan het wenselijk zijn om een eigen type _getty_ aan te maken voor stap 2 door een ingang in [.filename]#/etc/gettytab# te maken. Dit wordt hier niet beschreven. Meer informatie staat in de hulppagina's man:gettytab[5] en man:getty[8].
[[term-etcttys]]
==== Een regel aan [.filename]#/etc/ttys# toevoegen
Het bestand [.filename]#/etc/ttys# bevat alle poorten op een FreeBSD-systeem waar aanmelden is toegestaan. De eerste virtuele console [.filename]#ttyv0# staat bijvoorbeeld in dit bestand vermeld. Met deze vermelding kan er op de console worden aangemeld. Dit bestand bevat ook vermeldingen voor de andere virtuele consoles, seriële poorten en pseudo-tty's. Vermeld voor een vast aangesloten terminal de [.filename]#/dev#-regel van de seriële poort zonder het [.filename]#/dev#-gedeelte ([.filename]#/dev/ttyv0# wordt bijvoorbeeld [.filename]#ttyv0#).
Een standaard FreeBSD installatie bevat een bestand [.filename]#/etc/ttys# met ondersteuning voor de eerste vier seriële poorten: [.filename]#ttyu0# tot en met [.filename]#ttyu3#. Indien er aan een van deze poorten een terminal wordt gekoppeld is het niet nodig om een regel toe te voegen.
[[ex-etc-ttys]]
.Terminalregels aan [.filename]#/etc/ttys# toevoegen
[example]
====
Stel dat er twee terminals verbonden moeten worden met een systeem: een Wyse-50 en een oude 286 IBM-PC waarop Procomm terminalsoftware draait dat een VT-100 terminal emuleert. De Wyse wordt met de tweede seriële poort verbonden en de 286 met de zesde seriële poort (een poort op een meerpoortige seriële kaart). De overeenkomstige regels in [.filename]#/etc/ttys# zien er als volgt uit:
[.programlisting]
....
ttyu1 "/usr/libexec getty std.38400" wy50 on insecure
ttyu5 "/usr/libexec/getty std.19200" vt100 on insecure
....
* Het eerste veld specificeert normaalgesproken de naam van het speciale terminalbestand zoals dat in [.filename]#/dev# staat.
* Het tweede veld bevat het commando dat voor deze regel uitgevoerd moet worden, meestal is dit man:getty[8]. `getty` initialiseert en opent een lijn, stelt een snelheid in, vraagt om een gebruikersnaam en draait daarna het programma man:login[1].Het programma `getty` accepteert één (optionele) parameter op de opdrachtregel, het type _getty_. Een type _getty_ stelt karakteristieken op een terminallijn in, zoals de bps-snelheid en de pariteit. Het programma `getty` leest deze karakteristieken uit het bestand [.filename]#/etc/gettytab#.Het bestand [.filename]#/etc/gettytab# bevat een hoop regels voor zowel oude als nieuwe terminallijnen. In bijna alle gevallen werken de regels die met de tekst `std` beginnen voor vast aangesloten terminals. Deze regels negeren pariteit. Er is een `std`-regel voor elke bps-snelheid van 110 tot en met 115200. Uiteraard kunnen eigen regels aan dit bestand worden toegevoegd. De hulppagina man:gettytab[5] biedt meer informatie.Zorg er tijdens het instellen van het type _getty_ in het bestand [.filename]#/etc/ttys# voor dat de communicatie-instellingen op de terminal ermee over komen.In bovenstaand voorbeeld gebruikt de Wyse-50 geen pariteit en maakt deze verbinding met 38400 bps. De 286 PC gebruikt geen pariteit en maakt verbinding met 19200 bps.
* Het derde veld bevat het type terminal dat normaalgesproken is verbonden met de tty-lijn. Voor inbelpoorten wordt voor dit veld normaalgesproken `unknown` of `dialup` gebruikt omdat gebruikers bijna elk type terminal of software gebruiken om in te bellen. Voor terminals met een vaste aansluiting verandert het type terminal niet, dus kan in dit veld een echt terminaltype uit het databasebestand man:termcap[5] worden gebruikt.In bovenstaand voorbeeld gebruikt de Wyse-50 het echte terminaltype, terwijl de 286 PC die Procomm draait zo ingesteld wordt dat deze een VT-100 emuleert.
* Het vierde veld geeft aan of de poort aan moet staan. Indien hier `on` staat, start `init` het programma in het tweede veld, `getty`, op. Indien hier `off` staat wordt `getty` niet uitgevoerd en kan er daarom niet op de poort worden aangemeld.
* Het laatste veld geeft aan of de poort veilig is. Indien deze poort als veilig is aangemerkt betekent dit dat er genoeg vertrouwen is om de gebruiker `root` (of iedere andere account met een gebruikers-id 0) aan te laten melden via deze poort. Onveilige poorten staan aanmelden door `root` niet toe. Meld op onveilige poorten eerst aan een account zonder rechten en gebruik daarna man:su[1] of een soortgelijk mechanisme om rootrechten te verkrijgen.Het wordt sterk aangeraden om "insecure" zelfs voor terminals achter gesloten deuren te gebruiken. Het is vrij gemakkelijk om aan te melden en `su` te gebruiken indien rootrechten nodig zijn.
====
[[term-hup]]
==== `init` forceren om [.filename]#/etc/ttys# opnieuw te lezen
Stuur na het maken van de benodigde veranderingen aan het bestand [.filename]#/etc/ttys# een SIGHUP-signaal (ophangen) naar het proces `init` om het te dwingen het instellingenbestand opnieuw te lezen:
[source,shell]
....
# kill -HUP 1
....
[NOTE]
====
`init` is altijd het eerste proces dat op een systeem gedraaid wordt, daarom heeft het altijd PID 1.
====
Indien alles juist is ingesteld, alle kabels juist zijn aangesloten en alle terminals aanstaan, draait er op elke terminal een proces `getty` en is er een aanmeldprompt zichtbaar op de terminals.
[[term-debug]]
=== Problemen met een verbinding oplossen
Zelfs met de grootste aandacht voor details kan er nog steeds iets mis gaan met het instellen van een terminal. Hier is een lijst van symptomen en mogelijke oplossingen.
==== Er verschijnt geen aanmeldprompt
Controleer of de terminal is aangesloten en aan staat. Indien het een PC is die als terminal fungeert, controleer of de terminalemulatiesoftware op de juiste seriële poort draait.
Controleer of de kabel stevig verbonden is met zowel de terminal als de FreeBSD computer en dat de kabel van het juiste soort is.
Controleer of de terminal en FreeBSD dezelfde bps-snelheid en pariteit gebruiken. Indien de terminal een beeldscherm is, controleer dan of de video- en helderheidsniveaus zijn ingesteld. Indien de terminal een printer is, controleer of er voldoende papier en inkt aanwezig zijn.
Controleer of er een proces `getty` draait dat de terminal bedient. Om bijvoorbeeld een lijst van draaiende `getty`-processen te krijgen:
[source,shell]
....
# ps -axww|grep getty
....
Er zou een regel voor de terminal zichtbaar moeten zijn. Het volgende scherm geeft bijvoorbeeld weer dat `getty` op de tweede seriële poort [.filename]#ttyu1# draait en de regel `std.38400` in [.filename]#/etc/gettytab# gebruikt:
[source,shell]
....
22189 d1 Is+ 0:00.03 /usr/libexec/getty std.38400 ttyu1
....
Indien er geen proces `getty` draait, controleer dan of de poort in [.filename]#/etc/ttys# aan staat. Draai `kill -HUP 1` nadat het bestand [.filename]#ttys# is gewijzigd.
Indien het proces `getty` draait maar de terminal nog steeds geen aanmeldprompt weergeeft of als het een prompt weergeeft maar er niet getypt kan worden, kan het zijn dat de terminal of de kabel hardwarematige handshaking niet ondersteunt. Probeer om de regel in [.filename]#/etc/ttys# van `std.38400` in `3wire.38400` te veranderen (draai na het wijzigen van [.filename]#/etc/ttys#`kill -HUP 1`). De regel `3wire` is vergelijkbaar met de regel `std`, maar negeert hardwarematige handshaking. Het kan nodig zijn om de baudsnelheid te verlagen of om softwarematig doorvoerbeheer aan te zetten als `3wire` gebruikt wordt, om overspoelde buffers te voorkomen.
==== Als er rommel in plaats van een aanmeldprompt verschijnt
Controleer of de terminal en FreeBSD dezelfde bps-snelheid en pariteit gebruiken. Controleer de `getty`-processen op het gebruik van het juiste type `getty`. Indien dit niet het geval is, wijzig dan [.filename]#/etc/ttys# en draai `kill -HUP 1`.
==== Tekens verschijnen dubbel en/of het wachtwoord verschijnt tijdens de invoer
Wijzig de terminal (of de terminalemulatiesoftware) van "half duplex" of "local echo" naar "full duplex".
[[dialup]]
== Inbeldienst
[WARNING]
====
Vanaf FreeBSD 8.0 zijn de seriële poorten hernoemd van [.filename]#/dev/cuadN# naar [.filename]#/dev/cuauN# en van [.filename]#/dev/ttydN# naar [.filename]#/dev/ttyuN#. FreeBSD 7.X gebruikers moeten de documentatie aanpassen naar deze wijzigingen.
====
Het instellen van het FreeBSD-systeem voor inbeldiensten is vrijwel gelijk aan het verbinden van terminals, behalve dat er met modems in plaats van terminals wordt gewerkt.
=== Externe en interne modems
Externe modems lijken gemakkelijker voor het inbellen, omdat externe modems vaak semi-permanent ingesteld kunnen worden via parameters die in een niet-vluchtig RAM worden opgeslagen en ze hebben gewoonlijk LED's die de toestand van belangrijke RS-232-signalen weergeven. Knipperende LED's maken indruk op bezoekers, maar LED's zijn ook zeer nuttig om te zien of een modem goed functioneert.
Interne modems hebben vaak geen niet-vluchtig RAM en het kan dus voorkomen dat de instelmogelijkheden beperkt zijn tot het instellen van DIP-schakelaars. Als een intern modem al indicatie-LED's voor signalen heeft, zijn ze moeilijk te zien in de behuizing van een systeem.
==== Modems en kabels
Bij gebruik van een extern modem is uiteraard een juiste kabel nodig. Een standaard RS-232C seriële kabel moet voldoen zolang alle normale signalen zijn aangesloten.
[[serialcomms-signal-names]]
.Signaalnamen
[cols="1,1", frame="none", options="header"]
|===
<| Acroniemen
<| Namen
|RD
|Received Data (ontvangen gegevens)
|TD
|Transmitted Data (verzonden gegevens)
|DTR
|Data Terminal Ready (gegevensterminal gereed)
|DSR
|Data Set Ready (gegevensverzameling gereed)
|DCD
|Data Carrier Detect (RS-232's detector voor signaal lijn-ontvangen)
|SG
|Signal Ground (signaalaarde)
|RTS
|Request to Send (verzoek om te zenden)
|CTS
|Clear to Send (gereed om te zenden)
|===
FreeBSD heeft de signalen RTS en CTS nodig voor doorstroombeheer bij snelheden van meer dan 2400 bps, het signaal CD om te bepalen wanneer een oproep beantwoord of geannuleerd is, en het signaal DTR om een modem opnieuw in te stellen nadat een sessie voltooid is. Op sommige kabels ontbreken sommige benodigde signalen. Dus als zich problemen voordoen, zoals een aanmeldsessie die niet weggaat nadat de verbinding verbroken is, kan dit aan de kabel liggen.
Net als andere UNIX(R)-achtige besturingssystemen gebruikt FreeBSD hardwaresignalen om te bepalen of een oproep beantwoord of weggedrukt is en om met het modem op te hangen en dit opnieuw in te stellen na een oproep. FreeBSD vermijdt het versturen van commando's naar een modem en het bekijken van de toestand van een modem. Dit kan vreemd lijken als bekend is hoe modems met PC-gebaseerde prikbordsystemen (BBS) verbinden.
=== Overwegingen voor de seriële interface
FreeBSD ondersteunt EIA RS-232C (CCITT V.24) communicatie-interfaces gebaseerd op NS8250, NS1645, NS16550 en NS16550A. De 8250- en 16450-apparaten hebben buffers van een enkel karakter. Het 16550-apparaat biedt een buffer van 16 karakters, wat betere systeemprestaties toestaat. Door fouten in platte 16550's is het niet mogelijk de buffer van 16 karakters te gebruiken, dus gebruik indien mogelijk 16550A's. Omdat apparaten met een buffer van een enkel karakter meer werk door het besturingssysteem vereisen dan apparaten met een buffer van 16 karakters, ligt de voorkeur bij seriële interfacekaarten gebaseerd op de 16550A. Indien een systeem veel actieve seriële poorten heeft of zwaar belast wordt, zijn kaarten gebaseerd op de 16550A beter voor communicatie met een lage foutenratio.
=== Snel overzicht
Net als met terminals zet `init` een `getty`-proces op voor elke seriële poort die voor inbelverbindingen is ingesteld. Indien bijvoorbeeld een modem aan [.filename]#/dev/ttyu0# is gekoppeld, kan het commando `ps ax` het volgende weergeven:
[source,shell]
....
4850 ?? I 0:00.09 /usr/libexec/getty V19200 ttyu0
....
Wanneer een gebruiker naar de modemlijn belt en de modems verbinding maken, wordt de CD-lijn (Carrier Detect) door het modem gerapporteerd. De kernel merkt op dat een draaggolf is gesignaleerd en laat `getty` het openen van de poort voltooien. `getty` stuurt een prompt `login:` met de initieel gespecificeerde lijnsnelheid. `getty` bekijkt of er geldige karakters zijn ontvangen en probeert, in een typische opstelling, indien het rommel aantreft (waarschijnlijk omdat de snelheid waarmee het modem verbindt afwijkt van de snelheid van `getty`) de lijnsnelheden aan te passen totdat het redelijke karakters ontvangt.
Nadat een gebruikersnaam is opgegeven voert `getty`[.filename]#/usr/bin/login# uit, die het aanmelden voltooit door te vragen naar het wachtwoord van een gebruiker en daarna de shell van een gebruiker op te starten.
=== Instellingenbestanden
Er zijn drie systeeminstellingenbestanden in de map [.filename]#/etc# die waarschijnlijk gewijzigd moeten worden om inbellen op een FreeBSD-systeem toe te staan. Het eerste bestand, [.filename]#/etc/gettytab#, bevat informatie om de daemon [.filename]#/usr/libexec/getty# in te stellen. Het tweede bestand, [.filename]#/etc/ttys# bevat informatie voor [.filename]#/sbin/init# dat vertelt op welke [.filename]#tty# apparaten een proces `getty` moet draaien. Als laatste kunnen in het script [.filename]#/etc/rc.d/serial# commando's geplaatst worden om poorten te initialiseren.
Er bestaan twee stromingen met betrekking tot inbelmodems op UNIX(R). De ene houdt ervan om modems en systemen in te stellen zodat de lokale computer-naar-modem RS-232-interface met een vaste snelheid werkt, ongeacht de snelheid waarmee een gebruiker-op-afstand inbelt. Het voordeel van deze instelling is dat een gebruiker-op-afstand altijd meteen een aanmeldprompt van een systeem ziet. Het nadeel is dat een systeem niet weet wat de werkelijke gegevenssnelheid van een gebruiker is en dus passen programma's die met een volledig scherm werken, zoals Emacs, hun methode om het scherm te tekenen niet aan om hun reactie beter te maken voor langzame verbindingen.
De andere stroming stelt de RS-232-interface van een modem zo in dat de snelheid ervan varieert met de verbindingssnelheid van een gebruiker-op-afstand. Zo zorgen V.32bis-verbindingen (14,4 kbps) met een modem ervoor dat een modem de RS-232-interface op 19,2 kbps laat draaien, terwijl verbindingen op 2400 bps ervoor zorgen dat de RS-232-interface van een modem op 2400 bps draait. Omdat `getty` meldingen over de verbindingssnelheid van een gegeven modem niet begrijpt, geeft `getty` een bericht `login:` op een initiële snelheid en kijkt het naar de karakters die als antwoord terugkomen. Als een gebruiker rommel ziet, wordt ervan uitgegaan dat deze weet dat de kbd:[Enter] toets ingedrukt moet worden totdat een herkenbaar prompt zichtbaar is. Indien de gegevenssnelheden niet overeenkomen, ziet `getty` alles wat een gebruiker intypt als "rommel", probeert het op de volgende snelheid over te gaan en het geeft opnieuw het prompt `login:`. Deze procedure kan ad nauseam doorgaan, maar normaal gesproken zijn er slechts een stuk of twee toetsaanslagen nodig voordat een gebruiker een juist prompt ziet. Het is duidelijk dat deze aanmeldprocedure er niet zo mooi uitziet als de methode "vaste-snelheid", maar een gebruiker met een langzame verbinding zou betere interactiviteit moeten beleven met programma's die met een volledig scherm werken.
Deze sectie poogt om neutrale informatie over instellingen te geven, maar is geneigd om de gegevenssnelheid van het modem af te laten hangen van de verbindingssnelheid.
==== [.filename]#/etc/gettytab#
[.filename]#/etc/gettytab# is een bestand met informatie over instellingen voor man:getty[8] in de stijl van man:termcap[5]. In de hulppagina van man:gettytab[5] staat de volledige informatie over het formaat van het bestand en de lijst met mogelijkheden.
===== Vaste snelheid instellen
Indien de snelheid van een modem om gegevens te communiceren op een bepaalde waarde wordt vastgezet, is het waarschijnlijk niet nodig om wijzigingen aan te brengen in [.filename]#/etc/gettytab#.
===== Overeenkomstige snelheid instellen
In [.filename]#/etc/gettytab# dient een regel ingesteld te worden om `getty` informatie te geven over de snelheden die voor het modem gewenst zijn. Indien een 2400 bps modem aanwezig is, kan waarschijnlijk de bestaande regel `D2400` gebruikt worden.
[.programlisting]
....
#
# Voor snelle inbelterminals, 2400/1200/300 roterend (er kan met beide kanten begonnen worden)
#
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:
....
Indien er een modem voor hogere snelheden aanwezig is, dient er waarschijnlijk een regel aan [.filename]#/etc/gettytab# toegevoegd te worden. Hieronder staat een regel die gebruikt kan worden voor een 14,4 kbps modem met een maximale interface-snelheid van 19,2 kbps:
[.programlisting]
....
#
# Toevoegingen voor een 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:
....
Dit resulteert in 8-bits verbindingen zonder pariteit.
Het bovenstaande voorbeeld begint met een communicatiesnelheid van 19,2 kbps (voor een V.32bis-verbinding), daarna doorloopt het 9600 bps (voor V.32), 2400 bps, 1200 bps, 300 bps en daarna weer 19,2 kbps. Het doorlopen van de communicatiesnelheid is met de mogelijkheid `nx=` ("volgende tabel") geïmplementeerd. Elk van deze regels gebruikt een regel `tc=` ("tabel continuëren") om de rest van de "standaard"-instellingen voor een bepaalde gegevenssnelheid op te pikken.
Indien er een 28,8 kbps modem aanwezig is en/of het gewenst is om voordeel uit de compressie met een 14,4 kbps te halen, is het nodig om hogere communicatiesnelheden dan 19,2 kbps te gebruiken. Hieronder staat een voorbeeld van een regel voor [.filename]#gettytab# die begint met 57,6 kbps.
[.programlisting]
....
#
# Toevoegingen voor een V.32bis of V.34 modem
# beginnend bij 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:
....
Indien een CPU langzaam of een systeem zwaar belast is en er geen seriële poorten gebaseerd op 16550A aanwezig zijn, kunnen er `sio` "silo"-fouten optreden bij 57,6 kbps.
[[dialup-ttys]]
==== [.filename]#/etc/ttys#
Het instellen van het bestand [.filename]#/etc/ttys# staat beschreven in <<ex-etc-ttys>>. Het instellen van modems is vergelijkbaar maar er moet een ander argument aan `getty` doorgegeven worden en er moet een ander type terminal doorgegeven te worden. Het algemene formaat voor zowel vaste snelheid als overeenkomstige snelheid is:
[.programlisting]
....
ttyu0 "/usr/libexec/getty xxx" dialup on
....
Het eerste item op bovenstaande regel is het speciale apparaatbestand. [.filename]#ttyu0# betekent dat [.filename]#/dev/ttyu0# het bestand is dat door `getty` in de gaten wordt gehouden. Het tweede item, `"/usr/libexec/gettyxxx"` (_xxx_ wordt vervangen door de initiële mogelijkheden van [.filename]#gettytab#) is het proces dat door `init` op het apparaat gedraaid wordt. Het derde item, `dialup`, is het standaard terminaltype. De vierde parameter, `on`, geeft aan `init` aan dat de lijn operationeel is. Er kan een vijfde parameter zijn, `secure`, maar gebruik deze alleen voor terminals die fysiek veilig zijn (zoals de systeemconsole).
Het standaard terminaltype (`dialup` in bovenstaand voorbeeld) mag afhangen van lokale voorkeuren. Het traditionele standaard terminaltype voor inbellijnen is `dialup`, zodat gebruikers hun aanmeldscripts kunnen aanpassen om op te merken wanneer het terminal `dialup` is en automatisch hun terminaltype kunnen aanpassen. Wellicht is het makkelijker om `vt102` als het standaard terminaltype te specificeren, aangezien gebruikers gewoon VT102-emulatie op hun systemen-op-afstand gebruiken.
Nadat [.filename]#/etc/ttys# gewijzigd is, kan aan het proces `init` een signaal HUP gestuurd worden om het bestand opnieuw te laten lezen. Gebruik volgende opdracht om het signaal te versturen:
[source,shell]
....
# kill -HUP 1
....
Indien een systeem voor de eerste keer wordt geïnstalleerd, is het verstandig te wachten totdat een modem juist ingesteld en verbonden is voordat het signaal aan `init` verstuurd wordt.
===== Vaste snelheid instellen
Voor het instellen van een vaste snelheid dient de regel in [.filename]#ttys# een vaste snelheid door te geven aan `getty`. Voor een modem met een vaste poortsnelheid van 19,2 kbps kan de regel in [.filename]#ttys# er als volgt uitzien:
[.programlisting]
....
ttyu0 "/usr/libexec/getty std.19200" dialup on
....
Indien een modem op een andere gegevenssnelheid is ingesteld, dient de juiste waarde voor `std.snelheid` in plaats van `std.19200` ingesteld te worden. Gebruik een geldig type dat in [.filename]#/etc/gettytab# vermeld staat.
===== Overeenkomstige snelheid instellen
Voor het instellen van een overeenkomstige snelheid dient de regel in [.filename]#ttys# te verwijzen naar regel met de juiste begin-"auto-baud" (sic). Indien bijvoorbeeld de boven voorgestelde regel voor een modem met een overeenkomstige snelheid die begint met 19,2 kbps wordt toegevoegd (de regel in [.filename]#gettytab# die het beginpunt `V19200`), kan de regel in [.filename]#ttys# er als volgt uitzien:
[.programlisting]
....
ttyu0 "/usr/libexec/getty V19200" dialup on
....
==== [.filename]#/etc/rc.d/serial#
Hogesnelheidsmodems, zoals V.32, V.32bis, en V.34 modems, moeten gebruik maken van hardwarematig (`RTS/CTS`) gegevensstroombeheer. Er kunnen `stty`-opdrachten aan [.filename]#/etc/rc.d/serial# toegevoegd worden om de vlag voor hardwarematig gegevensstroombeheer in de kernel van FreeBSD voor modempoorten in te stellen.
Om bijvoorbeeld de `termios`-vlag `crtscts` op de apparaten die de in- en uitbelapparaten initialiseren op de eerste seriële poort ([.filename]#COM2#) in te stellen, kunnen de volgende regels aan [.filename]#/etc/rc.d/serial# worden toegevoegd:
[.programlisting]
....
# Seriële poort initieel instellen
stty -f /dev/ttyu1.init crtscts
stty -f /dev/cuau1.init crtscts
....
=== Modeminstellingen
Bij gebruik van een modem waarvan de parameters permanent in niet-vluchtig RAM ingesteld kunnen worden, is er een terminalprogramma (zoals Telix onder MS-DOS(R) of `tip` onder FreeBSD) nodig om parameters in te stellen. Maak een verbinding met een modem met dezelfde communicatiesnelheid als de initiële snelheid die door `getty` gebruikt wordt en stel het niet-vluchtige RAM van een modem in zodat aan deze voorwaarden voldaan wordt:
* CD geldt tijdens verbindingen;
* DTR geldt tijdens gebruik; het loslaten van DTR hangt de verbinding op en stelt het modem opnieuw in;
* gegevensstroombeheer door CTS verzonden;
* gegevensstroombeheer met XON/XOFF uitgezet;
* gegevensstroombeheer door RTS ontvangen;
* Stille modus (geen resultaatcodes);
* Geen opdrachtecho.
Kijk in de documentatie van een modem voor de benodigde opdrachten en/of instellingen van DIP-schakelaars.
Om de bovenstaande parameters bijvoorbeeld op een U.S. Robotics(R) Sportster(R) 14.400 extern modem in te stellen, kunnen de volgende opdrachten aan het modem gegeven worden:
[.programlisting]
....
ATZ
AT&C1;&D2&H1&I0&R2&W
....
In deze fase kunnen ook andere modeminstellingen aangepast worden, zoals of het V.42bis en/of MNP5 compressie wordt gebruiken.
Een U.S. Robotics(R)Sportster(R) 14.400 externe modem heeft ook enkele DIP-schakelaars die ingesteld moeten worden. Voor andere modems kunnen deze instellingen wellicht als voorbeeld dienen:
* Schakelaar 1: UP: DTR Normal
* Schakelaar 2: N/A (Verbal Result Codes/Numeric Result Codes)
* Schakelaar 3: UP: Suppress Result Codes
* Schakelaar 4: DOWN: Geen echo, offline opdrachten
* Schakelaar 5: UP: Auto Answer
* Schakelaar 6: UP: Carrier Detect Normal
* Schakelaar 7: UP: Load NVRAM Defaults
* Schakelaar 8: N/A (Smart Mode/Dumb Mode)
Schakel resultaatcodes voor alle inbelmodems uit of onderdruk ze om problemen te voorkomen die kunnen optreden als `getty` abusievelijk een prompt `login:` geeft aan een modem dat in opdrachtmodus staat en het modem de opdracht echoot of een resultaatcode teruggeeft. Deze sequentie kan tot een uitgebreide, onnozele discussie tussen `getty` en het modem leiden.
==== Vaste snelheid instellen
Stel voor een vaste snelheid een modem zodanig in dat die een constante gegevenssnelheid naar de computer, onafhankelijk van de communicatiesnelheid, behoudt. Op een U.S. Robotics(R) Sportster(R) 14.400 extern modem zetten de volgende opdrachten de gegevenssnelheid naar de computer vast op de snelheid die gebruikt werd om de opdrachten te geven:
[.programlisting]
....
ATZ
AT&B1&W
....
==== Overeenkomstige snelheid instellen
Stel voor een variabele snelheid een modem zodanig in dat het de gegevenssnelheid van zijn seriële poort aanpast aan de snelheid van een binnenkomende oproep. Op een U.S. Robotics(R) Sportster(R) 14.400 extern modem zetten de volgende opdrachten de gegevenssnelheid van het modem, die op fouten gecorrigeerd wordt, vast op de snelheid die gebruikt werd om de opdrachten te geven, maar staan ze toe dat de snelheid van de seriële poort varieert voor verbindingen die niet op fouten gecorrigeerd worden:
[.programlisting]
....
ATZ
AT&B2&W
....
==== De modeminstellingen controleren
De meeste modems die op hoge snelheid werken, bieden opdrachten om de huidige werkparameters van een modem in een min of meer voor mensen leesbare vorm te bekijken. Op het U.S. Robotics(R) Sportster(R) 14.400 extern modem beeldt de opdracht `ATI5` de instellingen af die in het niet-vluchtige RAM zijn opgeslagen. Gebruik om de werkelijke werkparameters van een modem te zien (zoals beïnvloed door de stand van de DIP-schakelaars van een modem) de opdrachten `ATZ` gevolgd door `ATI4`.
Kijk in de handleiding van een modem als er met een ander merk modem gewerkt wordt voor het controleren van de parameters voor het instellen van dat modem.
=== Problemen oplossen
Hier volgen wat stappen die gevolgd kunnen worden om een inbelmodem op een systeem te controleren.
==== Een FreeBSD-systeem controleren
Verbind een modem met een FreeBSD-systeem, start het systeem op en kijk, indien het modem lampjes bevat die de toestand aangeven, of de DTR-indicator oplicht als het prompt `login:` op de systeemconsole verschijnt. Als het oplicht zou dit betekenen dat FreeBSD een `getty`-proces heeft gestart op de juiste communicatiepoort en wacht op het modem om een gesprek aan te nemen.
Geef als de DTR-indicator niet oplicht, na aanmelden op de console, de opdracht `ps ax` om te zien of FreeBSD probeert een `getty`-proces op de juiste poort te draaien. Er dienen tussen de weergegeven processen regels zoals de onderstaande te verschijnen:
[source,shell]
....
114 ?? I 0:00.10 /usr/libexec/getty V19200 ttyu0
115 ?? I 0:00.10 /usr/libexec/getty V19200 ttyu1
....
Er kan ook iets als het volgende verschijnen:
[source,shell]
....
114 d0 I 0:00.10 /usr/libexec/getty V19200 ttyu0
....
Als het modem nog geen gesprek heeft aangenomen, betekent dit dat `getty` het openen van de communicatiepoort voltooid heeft. Dit kan duiden op een probleem met de bekabeling of op een verkeerd ingesteld modem omdat `getty` niet in staat zou moeten zijn om de communicatiepoort te openen totdat CD (kiestoon) door het modem is bevestigd.
Indien er geen enkel `getty`-proces verschijnt dat wacht op het openen van de gewenste poort [.filename]#ttyuN#, controleer dan de regels in [.filename]#/etc/ttys# op vergissingen. Controleer ook het logboekbestand [.filename]#/var/log/messages# om te zien of er logboekberichten van `init` of `getty` met betrekking tot problemen zijn. Indien er problemen zijn, controleer dan nogmaals de instellingenbestanden [.filename]#/etc/ttys# en [.filename]#/etc/gettytab#, alsook de betreffende speciale apparaatbestanden [.filename]#/dev/ttyuN#, op vergissingen, ontbrekende regels of ontbrekende speciale apparaatbestanden.
==== Proberen om in te bellen
Probeer in te bellen op een systeem. Controleer of op het systeem-op-afstand 8 bits, geen pariteit en 1 stopbit gebruikt wordt. Probeer, indien er niet meteen een prompt verschijnt of als er rommel verschijnt, ongeveer eens per seconde op kbd:[Enter] te drukken. Probeer, indien er na een tijd nog geen prompt `login:` verschijnt, een `BREAK` te versturen. Probeer, indien er een modem wordt gebruikt dat op hoge snelheid werkt om te bellen, opnieuw in te bellen nadat de interfacesnelheid van het bellende modem is vastgezet (bijvoorbeeld via `AT&B1` op een U.S. Robotics(R) Sportster(R) modem).
Controleer, indien er nog steeds geen prompt `login:` verschijnt, nogmaals [.filename]#/etc/gettytab# en controleer of:
* De initiële specificatie die in [.filename]#/etc/ttys# voor de lijn staat overeenkomt met een naam van een specificatie in [.filename]#/etc/gettytab#;
* Elke regel `nx=` overeenkomt met een naam van een andere specificatie in [.filename]#gettytab#;
* Elke regel `tc=` overeenkomt met een naam van een andere specificatie in [.filename]#gettytab#.
Controleer, indien er gebeld wordt maar het modem op het FreeBSD-systeem niet reageert, of het modem ingesteld is om de telefoon te beantwoorden als DTR bevestigd is. Controleer, indien het modem juist ingesteld lijkt te zijn, of de DTR-lijn bevestigd is door de indicatielampjes van het modem te controleren (indien die aanwezig zijn).
Neem een pauze en probeer het later nog eens indien alles meerdere malen is geprobeerd en het nog steeds niet werkt. Indien het nog steeds niet werkt, stuur dan een e-mail naar de {freebsd-questions} met een beschrijving van het modem en het probleem en de mensen op de lijst zullen proberen te helpen.
[[dialout]]
== Uitbeldienst
[WARNING]
====
Vanaf FreeBSD 8.0 zijn de seriële poorten hernoemd van [.filename]#/dev/cuadN# naar [.filename]#/dev/cuauN# en van [.filename]#/dev/ttydN# naar [.filename]#/dev/ttyuN#. FreeBSD 7.X gebruikers moeten de documentatie aanpassen naar deze wijzigingen.
====
De volgende tips dienen voor het maken van een verbinding met een andere computer per modem. Dit is geschikt voor het opzetten van een terminalsessie met een gast op afstand.
Dit is nuttig bij het aanmelden op een BBS.
Dit soort verbinding kan extreem behulpzaam zijn om een bestand op het Internet te krijgen indien er problemen zijn met PPP. Indien FTP ergens voor nodig is en PPP kapot is, kan de terminalsessie voor FTP gebruikt worden. Vervolgens kan zmodem gebruikt worden om het naar de machine te verzenden.
[[hayes-unsupported]]
=== Een gewone Hayes-modem wordt niet ondersteund, wat nu?
In feite is de hulppagina voor `tip` verouderd. Er is al een generiek belprogramma voor Hayes ingebouwd. Gebruik `at=hayes` in het bestand [.filename]#/etc/remote#.
Het stuurprogramma voor Hayes is niet slim genoeg om enkele geavanceerde eigenschappen van nieuwere modems te herkennen. Berichten als `BUSY` (in gesprek), `NO DIALTONE` (geen kiestoon) of `CONNECT 115200` (verbinden 115200) verwarren het stuurprogramma. Schakel deze berichten uit bij gebruik van `tip` (door middel van `ATX0&W`).
Verder is de beltimeout voor `tip` 60 seconden. Het modem dient een lagere waarde te gebruiken om te voorkomen dat `tip` denkt dat er een probleem met de communicatie is. Probeer `ATS7=45&W`.
[[direct-at]]
=== Hoe deze `AT`-commando's in te geven?
Maak een zogenaamde "directe" regel in het bestand [.filename]#/etc/remote# aan. Als het modem bijvoorbeeld aan de eerste seriële poort, [.filename]#/dev/cuau0#, is gekoppeld, voeg dan de volgende regel toe:
[.programlisting]
....
cuau0:dv=/dev/cuau0:br#19200:pa=none
....
Gebruik voor de mogelijkheid `br` de hoogst ondersteunde snelheid van het modem in bps. Typ hierna `tip cuau0` om een verbinding met het modem te maken.
Als alternatief kan `cu` als `root` met het volgende commando gebruikt worden:
[source,shell]
....
# cu
-llijn
-ssnelheid
....
De waarde _lijn_ is de seriële poort (bijvoorbeeld [.filename]#/dev/cuau0#) en _snelheid_ is de snelheid (bijvoorbeeld `57600`). Als alle AT-commando's zijn ingevoerd, voer dan `~.` in om het programma te verlaten.
[[gt-failure]]
=== Het teken `@` voor de optie pn werkt niet!
Het teken `@` in de telefoonnummermogelijkheid vertelt `tip` om in [.filename]#/etc/phones# naar een telefoonnummer te kijken. Maar het teken `@` is ook een speciaal teken in specificatiebestanden als [.filename]#/etc/remote#. Gebruik een backslash om hieraan te ontsnappen:
[.programlisting]
....
pn=\@
....
[[dial-command-line]]
=== Hoe een telefoonnummer op de opdrachtregel te draaien?
Voeg een zogenaamde "generieke" regel aan het bestand [.filename]#/etc/remote# toe. Bijvoorbeeld:
[.programlisting]
....
tip115200|Bel elk telefoonnummer met 115200 bps:\
:dv=/dev/cuau0:br#115200:at=hayes:pa=none:du:
tip57600|Bel elk telefoonnummer met 57600 bps:\
:dv=/dev/cuau0:br#57600:at=hayes:pa=none:du:
....
Hierna zijn onder andere de volgende mogelijkheden beschikbaar:
[source,shell]
....
# tip -115200 5551234
....
Indien `cu` boven `tip` geprefereerd wordt, dient een generieke regel voor `cu` gebruikt te worden:
[.programlisting]
....
cu115200|Gebruik cu om elk nummer met 115200bps te bellen:\
:dv=/dev/cuau1:br#57600:at=hayes:pa=none:du:
....
Voer in:
[source,shell]
....
# cu 5551234 -s 115200
....
[[set-bps]]
=== Dient de bps-snelheid telkens ingevoerd te worden?
Voeg een regel toe voor `tip1200` of `cu1200`, maar gebruik een bps-snelheid die geschikt is voor de br-mogelijkheid. `tip` meent dat 1200 bps een goede standaardwaarde is, hierdoor zoekt het naar een regel `tip1200`. Uiteraard hoeft 1200 bps niet gebruikt te worden.
[[terminal-server]]
=== Een aantal hosts met een terminalserver benaderen
Om niet iedere keer te hoeven wachten totdat er verbinding is en `CONNECT host` in te typen, kan de mogelijkheid `cm` van `tip` gebruikt worden. Als voorbeeld bieden de onderstaande regels in [.filename]#/etc/remote# de mogelijkheid om `tip pain` of `tip muffin` in te typen om met de hosts `pain` of `muffin` te verbinden, en `tip deep13` om naar de terminalserver te gaan:
[.programlisting]
....
pain|pain.deep13.com|Forresters machine:\
:cm=CONNECT pain\n:tc=deep13:
muffin|muffin.deep13.com|Franks machine:\
:cm=CONNECT muffin\n:tc=deep13:
deep13:Gizmonics Institute terminalserver:\
:dv=/dev/cuau2:br#38400:at=hayes:du:pa=none:pn=5551234:
....
[[tip-multiline]]
=== Kan tip meer dan één lijn voor elke site proberen?
Dit is een vaak een probleem als een universiteit een handvol modemlijnen en enkele duizenden studenten heeft die ze proberen te gebruiken.
Voeg een regel voor de universiteit toe in [.filename]#/etc/remote# en gebruik `@` voor de mogelijkheid `pn`:
[.programlisting]
....
grote-universiteit:\
:pn=\@:tc=dialout
dialout:\
:dv=/dev/cuau3:br#9600:at=courier:du:pa=none:
....
Voeg hierna de telefoonnummers voor de universiteit toe aan [.filename]#/etc/phones#:
[.programlisting]
....
grote-universiteit 5551111
grote-universiteit 5551112
grote-universiteit 5551113
grote-universiteit 5551114
....
Het commando `tip` probeert elk nummer in de volgorde van de lijst alvorens op te geven. Om de pogingen te herhalen, kan `tip` in een while-lus gedraaid worden.
[[multi-controlp]]
=== Waarom moet kbd:[Ctrl+P] tweemaal worden ingedrukt om kbd:[Ctrl+P] éénmaal te versturen?
kbd:[Ctrl+P] is het standaard "forceer"-karakter, dat gebruikt wordt om `tip` te vertellen dat het volgende karakter letterlijk genomen dient te worden. Het forceerkarakter kan met de ontsnapping `~s`, wat "stel een variabele in" betekent, op elk ander karakter ingesteld worden.
Typ `~sforce=enkel-karakter` in gevolgd door een nieuwe regel. _enkel-karakter_ is elk enkel karakter. Indien _enkel-karakter_ weggelaten wordt, is het forceerkarakter het nulkarakter, wat door middel van kbd:[Ctrl+2] of kbd:[Ctrl+spatie] verkregen kan worden. Een redelijke standaardwaarde voor _enkel-karakter_ is kbd:[Shift+Ctrl+6], die slechts op enkele terminalservers gebruikt wordt.
Het forceerkarakter kan op elk gewenst karakter ingesteld worden door het volgende op te nemen in het bestand [.filename]#$HOME/.tiprc#:
[.programlisting]
....
force=enkel-karakter
....
[[uppercase]]
=== Alle ingevoerde tekst staat opeens in hoofdletters?
Waarschijnlijk is kbd:[Ctrl+A] ingedrukt, het "raisechar" van `tip`, dat speciaal voor mensen met een kapotte caps-lock toets is ontworpen. Gebruik `~s` zoals boven is aangegeven en stel de variabele `raisechar` op iets redelijks in. Het kan zelfs op hetzelfde als het forceerkarakter worden ingesteld, indien het onwaarschijnlijk is dat een van deze mogelijkheden ooit gebruikt wordt.
Hier volgt een voorbeeld voor het bestand [.filename]#.tiprc# dat perfect is voor gebruikers van Emacs die kbd:[Ctrl+2] en kbd:[Ctrl+A] vaak moeten gebruiken:
[.programlisting]
....
force=^^
raisechar=^^
....
De `^^` is kbd:[Shift+Ctrl+6].
[[tip-filetransfer]]
=== Hoe kan met `tip` bestanden worden verstuurd?
In de communicatie met een ander UNIX(R)-systeem kunnen bestanden verzonden en ontvangen worden met de commando's `~p` (put) en `~t` (take). Deze commando's draaien `cat` en `echo` op een systeem op afstand om bestanden aan te nemen en te verzenden. De syntaxis is:
`~p` lokaal-bestand [ bestand-op-afstand ]
`~t` bestand-op-afstand [ lokaal-bestand ]
Er wordt niet op fouten gecontroleerd, het is dus verstandig om een ander protocol te gebruiken, zoals zmodem.
[[zmodem-tip]]
=== Hoe kan zmodem samen met `tip` draaien?
Start om bestanden te ontvangen het verstuurprogramma aan de andere kant. Typ daarna `~C rz` om ze lokaal te ontvangen.
Start om bestanden te versturen het ontvangprogramma aan de andere kant. Typ daarna `~C sz bestanden` om ze naar het systeem aan de andere kant te versturen.
[[serialconsole-setup]]
== Seriële console opzetten
[WARNING]
====
Vanaf FreeBSD 8.0 zijn de seriële poorten hernoemd van [.filename]#/dev/cuadN# naar [.filename]#/dev/cuauN# en van [.filename]#/dev/ttydN# naar [.filename]#/dev/ttyuN#. FreeBSD 7.X gebruikers moeten de documentatie aanpassen naar deze wijzigingen.
====
[[serialconsole-intro]]
=== Inleiding
FreeBSD biedt de mogelijkheid om op een systeem op te starten met slechts een domme terminal en een seriële poort als console. Dit soort opstellingen is handig voor twee soorten mensen: voor systeembeheerders die FreeBSD willen installeren op machines die geen toetsenbord of beeldscherm hebben en voor ontwikkelaars die de kernel of apparaatstuurprogramma's willen debuggen.
Zoals beschreven in crossref:boot[boot,Het FreeBSD opstartproces], gebruikt FreeBSD drie fasen voor het opstarten. De eerste twee fasen bevinden zich in de code van het opstartblok dat zich aan het begin van de opstartslice van FreeBSD op de opstartschijf bevindt. Het opstartblok laadt vervolgens de opstartlader ([.filename]#/boot/loader#) en draait als de code van de derde fase.
Om de seriële console gereed te maken moeten de code in het opstartblok, de code van de opstartlader en de kernel worden ingesteld.
[[serialconsole-howto-fast]]
=== De seriële console instellen, korte versie
Deze sectie neemt aan dat de standaard opstelling wordt gebruikt en dat een kort overzicht voor het opzetten van de seriële console gewenst is.
[.procedure]
====
. Verbind de seriële kabel met [.filename]#COM1# en de leidende terminal;
. Om alle opstartmeldingen op de seriële console te zien, dient het volgende commando als supergebruiker uitgevoerd te worden:
+
[source,shell]
....
# echo 'console="comconsole"' >> /boot/loader.conf
....
+
. Bewerk [.filename]#/etc/ttys# en wijzig `off` in `on` en `dialup` in `vt100` voor de regel [.filename]#ttyu0#. Indien dit niet gebeurt is er geen wachtwoord nodig om met de seriële console te verbinden, wat tot een mogelijk beveiligingslek leidt;
. Start het systeem opnieuw op om te zien of de veranderingen effect hebben.
====
Indien een andere instelling nodig is, is er een diepgaandere uitleg over instellingen beschikbaar in <<serialconsole-howto>>.
[[serialconsole-howto]]
=== De seriële console instellen
[.procedure]
====
. Bereid een seriële kabel voor.
+
Benodigd zijn een nulmodem-kabel òf een standaard seriële kabel samen met een nulmodem-adapter. Zie <<serial-cables-ports>> voor een beschrijving van seriële kabels.
. Ontkoppel het toetsenbord.
+
De meeste PC-systemen zoeken naar het toetsenbord tijdens de Power-On Self-Test (POST) en geven een foutmelding als het toetsenbord niet is gevonden. Sommige systemen klagen luid over het ontbreken van een toetsenbord en gaan niet verder met opstarten totdat het is aangesloten.
+
Indien de computer klaagt over de fout, maar desondanks opstart, is het niet nodig iets speciaals te doen. Sommige machines waarop Phoenix BIOS is geïnstalleerd melden enkel `Toetsenbord faalde` en gaan normaal door met opstarten.
+
Indien de machine weigert zonder toetsenbord op te starten dient het BIOS ingesteld te worden zodat het deze fout negeert (als het dit kan). Raadpleeg het handboek van het moederbord voor verdere aanwijzingen.
+
[TIP]
======
Stel het toetsenbord in op "Niet geïnstalleerd" in de BIOS-instellingen. Het is dan nog steeds mogelijk om het toetsenbord te gebruiken. Dit zorgt er alleen voor dat het BIOS niet naar een toetsenbord zoekt tijdens het aanzetten. Het BIOS dient niet te klagen als het toetsenbord ontbreekt. Het is mogelijk om het toetsenbord aangesloten te laten, zelfs als deze vlag is ingesteld op "Niet geïnstalleerd" en het toetsenbord werkt nog steeds. Kijk, als de bovenstaande optie niet in het BIOS aanwezig is, naar een optie "Halt on Error". Het instellen van deze optie op "All but keyboard" of zelfs op "No Errors" zal hetzelfde effect hebben.
======
+
[NOTE]
======
Als een systeem een PS/2(R)-muis heeft, is het goed mogelijk dat naast het toetsenbord ook de muis losgekoppeld moet worden. Dit komt doordat PS/2(R)-muizen wat hardware met het toetsenbord delen. Als de muis aangesloten blijft, kan het zoeken naar het toetsenbord als resultaat hebben dat het toetsenbord er nog steeds is. Een Gateway 2000 Pentium 90 MHz systeem met een AMI BIOS schijnt zich op deze manier te gedragen. Over het algemeen is dit geen probleem aangezien een muis zonder toetsenbord sowieso weinig nut heeft.
======
+
. Sluit een domme terminal aan op [.filename]#COM1# ([.filename]#sio0#).
+
Indien er geen domme terminal aanwezig is, kan een oude PC met een modemprogramma of de seriële poort van een andere UNIX(R) machine gebruikt worden. Indien er geen [.filename]#COM1# ([.filename]#sio0#) aanwezig is dient deze geregeld te worden. Op dit moment is er geen manier om een andere poort dan [.filename]#COM1# voor de opstartblokken te selecteren, afgezien van deze opnieuw te compileren. Indien [.filename]#COM1# al voor een ander apparaat gebruikt wordt, verwijder dat apparaat dan tijdelijk en installeer een nieuw opstartblok en een nieuwe kernel zodra FreeBSD werkt. Er wordt aangenomen dat [.filename]#COM1# sowieso beschikbaar is op een bestands-/reken-/terminalserver. Als [.filename]#COM1# ècht voor iets anders nodig is (en het niet mogelijk is om dat op [.filename]#COM2# ([.filename]#sio1#) over te zetten), is het sowieso al onverstandig om hiermee bezig te zijn.)
. Controleer of het instellingenbestand van de kernel de juiste vlaggen ingesteld heeft voor [.filename]#COM1# ([.filename]#sio0#).
+
Relevante vlaggen zijn:
+
`0x10`:::
Zet console-ondersteuning voor deze eenheid aan. De andere consolevlaggen worden genegeerd tenzij deze is aangezet. Momenteel kan ten hoogste één eenheid console-ondersteuning hebben. De eerste (in de volgorde van het instellingenbestand) waarvan deze vlag is aangezet heeft de voorkeur. Deze optie zelf maakt de seriële poort geen console. Stel de volgende vlag in of gebruik de onderstaande optie `-h` samen met deze vlag.
+
`0x20`:::
Dwingt deze eenheid om de console te zijn (tenzij er een andere console met hogere prioriteit is), ongeacht de onderstaande optie `-h`. De vlag `0x20` dient samen met de vlag `0x10` gebruikt te worden.
+
`0x40`:::
Reserveert deze eenheid (in samenwerking met `0x10`) en maakt de eenheid ontoegankelijk voor normale toegang. Deze vlag dient niet aangezet te worden op de seriële poort van de eenheid die als seriële console gebruikt gaat worden. De enige functie van deze vlag is de eenheid voor het debuggen van de kernel op afstand aan te merken. Zie het link:{developers-handbook}[Ontwikkelaarshandboek] voor meer informatie over debuggen op afstand.
+
Voorbeeld:
+
[.programlisting]
....
device sio0 at isa? port IO_COM1 flags 0x10 irq 4
....
+
Zie de hulppagina man:sio[4] voor meer details.
+
Indien de vlaggen niet waren ingesteld, dient UserConfig gedraaid te worden (op een andere console) of de kernel opnieuw gecompileerd te worden.
. Maak [.filename]#boot.config# aan in de hoofdmap van de partitie `a` van de opstartschijf.
+
Dit bestand instrueert de code op het opstartblok hoe het systeem opgestart dient te worden. Om de seriële console te activeren, zijn één of meer van de volgende opties nodig. Indien meerdere opties gewenst zijn, dienen ze allemaal op dezelfde regel te staan:
+
`-h`:::
Wisselt tussen de interne en de seriële console. Indien bijvoorbeeld vanaf de interne (video)console opgestart wordt, kan `-h` gebruikt worden om het console-apparaat van de opstartlader en de kernel om te leiden naar de seriële console. Indien vanaf de seriële poort opgestart wordt, kan `-h` gebruikt worden om de opstartlader en de kernel het videoscherm als console te laten gebruiken.
+
`-D`:::
Wisselt tussen opstellingen met een enkele en een dubbele console. In opstellingen met een enkele console is de console òfwel de interne console (videoscherm) òfwel de seriële poort, afhankelijk van bovenstaande optie `-h`. In opstellingen met een dubbele console worden zowel het videoscherm als de seriële poort tegelijkertijd console, ongeacht de toestand van de optie `-h`. De opstelling met een dubbele console heeft alleen effect als het opstartblok draait. Zodra de opstartlader het overneemt, wordt de console die met de optie `-h` gespecificeerd is de enige console.
+
`-P`:::
Zorgt ervoor dat het opstartblok naar het toetsenbord zoekt. Als er geen toetsenbord wordt gevonden, worden de opties `-D` en `-h` automatisch ingesteld.
+
[NOTE]
======
Vanwege ruimtebeperkingen in de huidige versie van het opstartblok, is de optie `-P` alleen in staat om uitgebreide toetsenborden te detecteren. Toetsenborden met minder dan 101 toetsen (en zonder de toetsen F11 en F12) worden mogelijk niet gedetecteerd. Toetsenborden op sommige laptops worden vanwege deze beperking mogelijk niet correct gevonden. Indien dit het geval is met een systeem, vermijd dan de optie `-P`. Helaas is er geen mogelijkheid om dit probleem te omzeilen.
======
+
Gebruik om de console automatisch te selecteren òfwel de optie `-P` òfwel de optie `-h` om de seriële console te activeren.
+
De andere opties beschreven in man:boot[8] kunnen ook gebruikt worden.
+
De opties, behalve `-P`, worden aan de opstartlader ([.filename]#/boot/loader# doorgegeven. De opstartlader bepaalt of de interne videopoort of de seriële poort de console wordt door enkel naar de toestand van de optie `-h` te kijken. Dit betekent dat als de optie `-D`, maar niet de optie `-h` in [.filename]#/boot.config# gespecificeerd wordt, de seriële poort alleen tijdens het opstartblok als console gebruikt kan worden, de opstartlader gebruikt het interne videoscherm als console.
+
. Start de machine op.
+
Als FreeBSD gestart wordt, tonen de opstartblokken de inhoud van [.filename]#/boot.config# op de console. Bijvoorbeeld:
+
[source,shell]
....
/boot.config: -P
Keyboard: no
....
+
De tweede regel verschijnt alleen als `-P` in [.filename]#/boot.config# staat en aangegeven wordt of het toetsenbord aanwezig of afwezig is. Deze berichten gaan of naar de seriële of interne console of naar beide, afhankelijk van de optie in [.filename]#/boot.config#.
+
[.informaltable]
[cols="1,1", frame="none", options="header"]
|===
| Opties
| Bericht gaat naar
|geen
|interne console
|`-h`
|seriële console
|`-D`
|seriële en interne consoles
|`-Dh`
|seriële en interne consoles
|`-P`, toetsenbord aanwezig
|interne console
|`-P`, toetsenbord afwezig
|seriële console
|===
+
Na de bovenstaande berichten is er een korte pauze voordat de opstartblokken doorgaan met het laden van de opstartlader en voordat er verdere berichten op de console worden afgebeeld. Normaalgesproken hoeven de opstartblokken niet onderbroken te worden, maar het kan gedaan worden om er zeker van te zijn dat alles goed is ingesteld.
+
Om het opstartproces te onderbreken, kan op elke andere toets dan kbd:[Enter] gedrukt worden. De opstartblokken vragen dan om verdere actie. Er verschijnt iets als het volgende:
+
[source,shell]
....
>> FreeBSD/i386 BOOT
Default: 0:ad(0,a)/boot/loader
boot:
....
+
Controleer of de bovenstaande boodschap naar de seriële of interne console of beide gaat, naar gelang de opties in [.filename]#/boot.config#. Indien de boodschap op de juiste console verschijnt kan op kbd:[Enter] gedrukt worden om het opstartproces voort te zetten.
+
Als de seriële console gewenst is maar de prompt niet op de seriële terminal verschijnt, is er iets mis met de instellingen. Voer in de tussentijd `-h` in en druk op kbd:[Enter] of kbd:[Return] (indien mogelijk) om aan het opstartblok (en vervolgens de opstartlader en de kernel) te vertellen dat de seriële poort console moet worden. Controleer als het systeem draait wat er verkeerd ging.
====
Nadat de opstartlader is geladen en het derde stadium van het opstartproces bereikt is, kan er nog steeds gewisseld worden tussen de interne console en de seriële console door de juiste omgevingsvariabelen in de opstartlader in te stellen. Zie <<serialconsole-loader>>.
[[serialconsole-summary]]
=== Samenvatting
Hieronder volgt een samenvatting van de verschillende instellingen die in deze sectie en de uiteindelijk gekozen console beschreven zijn.
==== Geval 1: vlaggen ingesteld op 0x10 voor [.filename]#sio#
[.programlisting]
....
device sio0 at isa? port IO_COM1 flags 0x10 irq 4
....
[.informaltable]
[cols="1,1,1,1", frame="none", options="header"]
|===
<| Opties in /boot.config
<| Console tijdens de opstartblokken
<| Console tijdens de opstartlader
<| Console in kernel
|niets
|intern
|intern
|intern
|`-h`
|serieel
|serieel
|serieel
|`-D`
|serieel en intern
|intern
|intern
|`-Dh`
|serieel en intern
|serieel
|serieel
|`-P`, toetsenbord aanwezig
|intern
|intern
|intern
|`-P`, toetsenbord afwezig
|serieel en intern
|serieel
|serieel
|===
==== Geval 2: vlaggen ingesteld op 0x30 voor [.filename]#sio#
[.programlisting]
....
device sio0 at isa? port IO_COM1 flags 0x30 irq 4
....
[.informaltable]
[cols="1,1,1,1", frame="none", options="header"]
|===
| Opties in /boot.config
| Console tijdens de opstartblokken
| Console tijdens de opstartlader
| Console in kernel
|niets
|intern
|intern
|serieel
|`-h`
|serieel
|serieel
|serieel
|`-D`
|serieel en intern
|intern
|serieel
|`-Dh`
|serieel en intern
|serieel
|serieel
|`-P`, toetsenbord aanwezig
|intern
|intern
|serieel
|`-P`, toetsenbord afwezig
|serieel en intern
|serieel
|serieel
|===
[[serialconsole-tips]]
=== Tips voor de seriële console
==== Een hogere snelheid voor de seriële poort instellen
Standaard zijn de instellingen van de seriële poort: 9600 baud, 8 bits, geen pariteit, en 1 stopbit. Indien het wenselijk is om de snelheid te veranderen, zijn de volgened opties beschikbaar:
* Hercompileer de opstart blokken met `BOOT_COMCONSOLE_SPEED` ingesteld op de nieuwe console snelheid. Zie <<serialconsole-com2>> voor gedetailleerde instructies over het bouwen en installeren van nieuwe opstartblokken.
+
Als de seriële poort anders is gespecificeerd dan met `-h` bij het opstarten, of als de seriële console die gebruikt wordt door de kernel anders is dan die gebruikt wordt door de opstart blokken, dan moet de volgende optie aan het kernel instellingen bestand worden toegevoegd en moet de kernel opnieuw gecompileerd worden:
+
[.programlisting]
....
options CONSPEED=19200
....
* Gebruik de `-S` opstartoptie van de kernel. De optie `-S` kan worden toegevoegd aan het bestand [.filename]#/boot.config#. Zie de handleiding man:boot[8] voor een beschrijving over hoe opties kunnen worden toegevoegd aan [.filename]#/boot.conf#, en welke opties ondersteund worden.
* Zet de `comconsole_speed` optie in het [.filename]#/boot/loader.conf# bestand.
+
Deze optie is ervan afhankelijk dat de `console`, `boot_serial` en `boot_multicons` ingesteld staan in [.filename]#/boot/loader.conf#. Een voorbeeld van hoe `comconsole_speed` gebruikt kan worden om de console snelheid aan te passen:
+
[.programlisting]
....
boot_multicons="YES"
boot_serial="YES"
console_speed="115200"
console="comconsole,vidconsole"
....
[[serialconsole-com2]]
==== Een andere seriële poort dan [.filename]#sio0# voor de console gebruiken
Het gebruik van een andere poort dan [.filename]#sio# vergt wat hercompileren. Indien het gewenst is om een andere seriële poort te gebruiken, hercompileer dan de opstartblokken, de opstartlader en de kernel als volgt:
[.procedure]
====
. De broncode van de kernel moet beschikbaar zijn. Zie crossref:cutting-edge[updating-upgrading,FreeBSD updaten en upgraden];
. Bewerk [.filename]#/etc/make.conf# en stel `BOOT_COMCONSOLE_PORT` in op het adres van de te gebruiken poort (0x3F8, 0x2F8, 0x3E8 of 0x2E8). Alleen [.filename]#sio0# tot en met [.filename]#sio3# ([.filename]#COM1# tot en met [.filename]#COM4#) zijn te gebruiken. Seriële kaarten met meerdere poorten werken niet. Interrupts instellen is niet nodig;
. Maak een aangepast kernelinstellingenbestand aan en voeg de juiste vlaggen toe voor de te gebruiken seriële poort. Als bijvoorbeeld [.filename]#sio1# ([.filename]#COM2#) de console moet worden:
+
[.programlisting]
....
device sio1 at isa? port IO_COM2 flags 0x10 irq 3
....
+
Alternatief:
+
[.programlisting]
....
device sio1 at isa? port IO_COM2 flags 0x30 irq 3
....
+
Stel de consolevlaggen voor de andere seriële poorten niet in;
. Hercompileer en installeer de opstartblokken en de opstartlader:
+
[source,shell]
....
# cd /sys/boot
# make clean
# make
# make install
....
+
. Herbouw en installeer de kernel;
. Schrijf de opstartblokken met man:disklabel[8] naar de opstartschijf en start met de nieuwe kernel op.
====
[[serialconsole-ddb]]
==== De debugger DDB gebruiken via de seriële verbinding
Als het wenselijk is om vanuit de seriële console in de kerneldebugger te vallen - nuttig voor diagnose op afstand, maar ook gevaarlijk indien een onbedoelde BREAK op de seriële poort wordt gegenereerd! - compileer de kernel dan met de volgende opties:
[.programlisting]
....
options BREAK_TO_DEBUGGER
options DDB
....
==== Een aanmeldprompt op de seriële console krijgen
Hoewel dit niet nodig is, kan het gewenst zijn om een __aanmeld__prompt over de seriële lijn te krijgen, nu het mogelijk is om opstartboodschappen te zien en de kerneldebugsessie door de seriële console betreden kan worden. Hier volgt hoe het te doen.
Open het bestand [.filename]#/etc/ttys# met een tekstverwerker en zoek de volgende regels:
[.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
....
[.filename]#ttyu0# tot en met [.filename]#ttyu3# komen overeen met [.filename]#COM1# tot en met [.filename]#COM4#. Wijzig `off` in `on` voor de gewenste poort. Als de snelheid van de seriële poort is gewijzigd, wijzig dan `std.9600` zodat het met de huidige instelling overeenkomt, bijvoorbeeld `std.19200`.
Het kan ook wenselijk zijn om het terminaltype te wijzigen van `unknown` naar het eigenlijke type van de seriële terminal.
Voer `kill -HUP 1` uit na het wijzigen van het bestand om de wijzigingen actief te maken.
[[serialconsole-loader]]
=== De console vanuit de opstartlader veranderen
De vorige secties beschreven hoe de seriële console ingesteld kan worden door het instellen van het opstartblok. Deze sectie toont dat het mogelijk is om de console te specificeren door het invoeren van enkele opdrachten en omgevingsvariabelen in de opstartlader. Aangezien de opstartlader tijdens het derde stadium van het opstartproces wordt geactiveerd, na het opstartblok, overheersen de instellingen in de opstartlader de instellingen in het opstartblok.
==== De seriële console instellen
Het is mogelijk om de opstartlader en de kernel gebruik te laten maken van de seriële console door slechts één regel naar [.filename]#/boot/loader.conf# te schrijven:
[.programlisting]
....
console="comconsole"
....
Dit heeft effect ongeacht de instellingen in het opstartblok die in de vorige sectie zijn besproken.
Het is verstandig om bovenstaande regel de eerste regel van [.filename]#/boot/loader.conf# te maken om de opstartboodschappen zo vroeg mogelijk op de seriële console te kunnen zien.
Evenzo kan de interne videoconsole worden gespecificeerd met:
[.programlisting]
....
console="vidconsole"
....
Indien de omgevingsvariabele `console` van de opstartlader niet ingesteld wordt, gebruikt de opstartlader, en vervolgens de kernel, de console die door de optie `-h` in het opstartblok wordt aangegeven.
De console kan worden gespecificeerd in [.filename]#/boot/looader.conf.local# of in [.filename]#/boot/loader.conf#.
Zie man:loader.conf[5] voor meer informatie.
[NOTE]
====
Momenteel heeft de opstartlader een optie die gelijk is aan de optie `-P` van het opstartblok en is er geen voorziening om automatisch de interne console en de seriële console te selecteren afhankelijk van de aanwezigheid van een toetsenbord.
====
==== Een andere seriële poort dan [.filename]#sio# voor de console gebruiken
Compileer de opstartlader opnieuw om een andere seriële poort dan [.filename]#sio# voor de seriële console te gebruiken. Volg de procedure zoals beschreven in <<serialconsole-com2>>.
[[serialconsole-caveats]]
=== Valkuilen
De doelstelling van dit stuk is beheerders in staat te stellen om toegewijde servers te installeren die geen grafische hardware of aangesloten toetsenborden nodig hebben. Hoewel de meeste systemen zonder toetsenbord opstarten, zijn er helaas aardig wat die niet zonder een grafische adapter opstarten. Machines met een AMI BIOS kunnen ingesteld worden om zonder grafische adapter op te starten door de instelling "graphics adapter" in de CMOS-instellingen te wijzigen in "Not installed".
De meeste systemen ondersteunen deze optie echter niet en weigeren om zonder weergavehardware op te starten. Voor deze machines is het nodig om een of andere grafische kaart in een systeem te laten (zelfs al is het een aftandse monochrome kaart) hoewel het niet nodig is om een beeldscherm aan te sluiten. Ook kan geprobeerd worden om een AMI BIOS te installeren.
|