Vanaf FreeBSD 8.0 zijn de seriële poorten
hernoemd van
/dev/cuadN
naar
/dev/cuauN
en
van
/dev/ttydN
naar
/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 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.
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.
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®-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.
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.
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 /dev/ttyu0
is gekoppeld, kan
het commando ps ax
het volgende
weergeven:
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
/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.
Er zijn drie systeeminstellingenbestanden in de map
/etc
die waarschijnlijk gewijzigd moeten
worden om inbellen op een FreeBSD-systeem toe te staan. Het
eerste bestand, /etc/gettytab
, bevat
informatie om de daemon /usr/libexec/getty
in te stellen. Het tweede bestand,
/etc/ttys
bevat informatie voor
/sbin/init
dat vertelt op welke
tty
apparaten een proces
getty
moet draaien. Als laatste kunnen in
het script /etc/rc.d/serial
commando's
geplaatst worden om poorten te initialiseren.
Er bestaan twee stromingen met betrekking tot inbelmodems op UNIX®. 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 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.
/etc/gettytab
is een bestand met
informatie over instellingen voor getty(8) in de stijl
van termcap(5). In de hulppagina van gettytab(5)
staat de volledige informatie over het formaat van het
bestand en de lijst met mogelijkheden.
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
/etc/gettytab
.
In /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.
# # 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
/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:
# # 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
gettytab
die begint met
57,6 kbps.
# # 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.
Het instellen van het bestand
/etc/ttys
staat beschreven in Voorbeeld 26.1, “Terminalregels aan /etc/ttys
toevoegen”. 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:
ttyu0 "/usr/libexec/getty xxx
" dialup on
Het eerste item op bovenstaande regel is het speciale
apparaatbestand. ttyu0
betekent dat
/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
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 /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:
#
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.
Voor het instellen van een vaste snelheid dient de
regel in ttys
een vaste snelheid door
te geven aan getty
. Voor een modem met
een vaste poortsnelheid van 19,2 kbps kan de regel in
ttys
er als volgt uitzien:
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
/etc/gettytab
vermeld staat.
Voor het instellen van een overeenkomstige snelheid
dient de regel in 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
gettytab
die het beginpunt
V19200
), kan de regel in
ttys
er als volgt uitzien:
ttyu0 "/usr/libexec/getty V19200" dialup on
Hogesnelheidsmodems, zoals V.32, V.32bis, en V.34 modems,
moeten gebruik maken van hardwarematig
(RTS/CTS
) gegevensstroombeheer. Er kunnen
stty
-opdrachten aan
/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
(COM2
) in te stellen, kunnen de
volgende regels aan /etc/rc.d/serial
worden toegevoegd:
# Seriële poort initieel instellen stty -f /dev/ttyu1.init crtscts stty -f /dev/cuau1.init crtscts
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® 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® Sportster® 14.400 extern modem in te stellen, kunnen de volgende opdrachten aan het modem gegeven worden:
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®Sportster® 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.
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® Sportster® 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:
ATZ AT&B1&W
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® Sportster® 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:
ATZ AT&B2&W
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® Sportster® 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.
Hier volgen wat stappen die gevolgd kunnen worden om een inbelmodem op een systeem te 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:
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:
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
ttyuN
,
controleer dan de regels in /etc/ttys
op
vergissingen. Controleer ook het logboekbestand
/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 /etc/ttys
en
/etc/gettytab
, alsook de betreffende
speciale apparaatbestanden /dev/ttyuN
,
op vergissingen, ontbrekende regels of ontbrekende speciale
apparaatbestanden.
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
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® Sportster®
modem).
Controleer, indien er nog steeds geen prompt
login:
verschijnt, nogmaals
/etc/gettytab
en controleer of:
De initiële specificatie die in
/etc/ttys
voor de lijn staat
overeenkomt met een naam van een specificatie in
/etc/gettytab
;
Elke regel nx=
overeenkomt met een
naam van een andere specificatie in
gettytab
;
Elke regel tc=
overeenkomt met een
naam van een andere specificatie in
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 algemene vragen mailinglijst met een beschrijving van het modem en het probleem en de mensen op de lijst zullen proberen te helpen.
All FreeBSD documents are available for download at http://ftp.FreeBSD.org/pub/FreeBSD/doc/
Questions that are not answered by the
documentation may be
sent to <freebsd-questions@FreeBSD.org>.
Send questions about this document to <freebsd-doc@FreeBSD.org>.