Amikor ebben a fejezetben az adatátvitel sebességéről beszélünk, akkor szándékosan nem használjuk a „baud” fogalmát. A baud ugyanis a kommunikációs eszközben adott idő alatt lezajló jelváltások mennyiségét jelöli, miközben itt a „bps” (bit per másodperc) kifejezés használata a helyes (vagy legalább is a szőrszálhasogatók egyelőre megnyugodhatnak).
Ha a FreeBSD rendszerünkhöz egy modemet vagy egy terminált akarunk csatlakoztatni, akkor ahhoz a számítógépünkben szükség lesz egy szabad soros portra és egy megfelelő típusú kábelre. Ha már tisztában vagyunk a rendelkezésre álló hardverrel és a hozzá tartozó kábellel, akkor nyugodtan átléphetjük ezt a részt.
A soros kábeleknek több különböző típusa van. Közülük a céljainknak leginkább megfelelő két legismertebb változatuk az ún. null-modem és a szabványos („egyenes”) RS-232-es soros kábelek. A hardverhez tartozó dokumentációban megtaláljuk, hogy pontosan melyik típus tartozik hozzá.
Egy null-modem kábel bizonyos jeleket, többek közt a „földet” (Signal Ground, SG), egyenesen küldi, másokat viszont felcserélten. Például az „átküldött adat” (Transmitted Data, TD) jelzésű tű a kábel másik végén a „fogadott adat” (Received Data, RD) tűhöz fut be.
A terminálokhoz akár saját magunk is le tudunk gyártani egy null-modem kábelt (például ha a boltiakkal nem lennénk megelégedve). A következő táblázatban az RS-232C jeleit és érintkezőinek számozását láthatjuk egy DB-25-ös csatlakozó esetében. A szabvány a kábel két 1-es tűjét összekapcsoló vonalat védőföldnek (Protective Ground, PD) nevezi, de ezt gyakran el is hagyják. Némely terminál remekül működik mindössze a 2-es, 3-as és 7-es tűk használatával, miközben mások az iménti példától eltérő kiosztást igényelnek.
Jel | Tű | Tű | Jel | |
---|---|---|---|---|
SG | 7 | párja: | 7 | SG |
TD | 2 | párja: | 3 | RD |
RD | 3 | párja: | 2 | TD |
RTS | 4 | párja: | 5 | CTS |
CTS | 5 | párja: | 4 | RTS |
DTR | 20 | párja: | 6 | DSR |
DTR | 20 | párja: | 8 | DCD |
DSR | 6 | párja: | 20 | DTR |
DCD | 8 | párja: | 20 | DTR |
Íme a mostanság elterjedt másik két séma.
Jel | Tű | Tű | Jel | |
---|---|---|---|---|
RD | 2 | párja: | 3 | TD |
TD | 3 | párja: | 2 | RD |
DTR | 4 | párja: | 6 | DSR |
DTR | 4 | párja: | 1 | DCD |
SG | 5 | párja: | 5 | SG |
DSR | 6 | párja: | 4 | DTR |
DCD | 1 | párja: | 4 | DTR |
RTS | 7 | párja: | 8 | CTS |
CTS | 8 | párja: | 7 | RTS |
Jel | Tű | Tű | Jel | |
---|---|---|---|---|
RD | 2 | párja: | 2 | TD |
TD | 3 | párja: | 3 | RD |
DTR | 4 | párja: | 6 | DSR |
DTR | 4 | párja: | 8 | DCD |
SG | 5 | párja: | 7 | SG |
DSR | 6 | párja: | 20 | DTR |
DCD | 1 | párja: | 20 | DTR |
RTS | 7 | párja: | 5 | CTS |
CTS | 8 | párja: | 4 | RTS |
Amikor egy tű az átellenes oldalon két másik tűhöz csatlakozik, akkor azt általában úgy valósítják meg, hogy a két tűt a saját oldalukon összekötik, majd ezt kapcsolják hozzá a harmadik tűhöz.
Ezek a megoldások a legnépszerűbbek. Természetesen a tűk összekötésének több más variációja is létezik (ezekről az RS-232 Made Easy c. könyvben olvashatunk bővebben), ahol az SG párja az SG, a TD párja az RD, az RTS és a CTS párja az DCD, a DTR párja a DSR és ugyanezek fordítva.
A szabványos soros kábel az összes RS-232C jelet közvetlenül átküldi. Vagyis a kábel egyik végén levő „átküldött adat” tű a másik végén is az „átküldött adat” tűhöz csatlakozik. Az ilyen típusú kábeleket többnyire a számítógépek és a modemek között alkalmazzák, de egyes termináltípusok esetében is szükségünk lehet rá.
A soros port olyan eszköz, amelyen keresztül a FreeBSD-s gép és a terminál között adatokat tudunk közvetíteni. Ebben a szakaszban az ilyen portok különféle típusait és ezek használatát ismertetjük FreeBSD alatt.
A soros portoknak több típusa létezik. Mielőtt vásárolnánk egy készítenénk egy soros kábelt, mindenképpen győzödjünk meg róla, hogy csatlakoztatni tudjuk majd a FreeBSD-s rendszerünkhöz és a terminálhoz egyaránt.
A legtöbb terminálon DB-25-ös portot találunk. A személyi számítógépek, köztük azok, amelyeken FreeBSD fut, DB-25-ös és DB-9es portokkal rendelkeznek. Ha a gépünkben egy többportos soros kártya van, akkor ezeken kívül még RJ-12-es és RJ-45-ös portjaink is lehetnek.
A hardverhez tartozó dokumentációból tudjuk kideríteni az adott port konkrét fajtáját, de gyakran a port vizuális vizsgálata is segíthet eldönteni a kérdést.
FreeBSD alatt az egyes soros portokat a
/dev
könyvtárban
található eszközleírókon
keresztül tudjuk elérni. Ezeknek két
típusa van:
A behíváshoz használt portok
nevei
/dev/ttyd
alakúak, ahol az N
N
a
port sorszáma, ami nullától indul.
A behívó portok alapvetően a
terminál esetében használatosak. A
behívó portok használatához
a soros vonalon az „vonal
észlelése” (Data Carrier Detect,
DCD) jelnek kell megbízhatóan
működnie.
A híváshoz használt portok
nevei
/dev/cuad
alakúak. A hívó portokat
terminálok esetében ritkán
alkalmazzák, helyettük inkább csak
modemekhez használják. A
hívó portokat akkor érdemes
használni, ha a soros kábel vagy a
terminál nem ismeri a DCD jelet.N
Ha a terminált az első soros portra (ami
MS-DOS®-ban a COM1
)
csatlakoztattuk, akkor a /dev/ttyd0
segítségével fogunk rá
hivatkozni. Ha viszont a második soros porton
(más néven COM2
)
található, akkor a
/dev/ttyd1
eszközt
használjuk, és így
tovább.
A FreeBSD alapból négy soros portot
támogat. Az MS-DOS® világban ezeket rendre
COM1
, COM2
,
COM3
és
COM4
portoknak nevezik. A FreeBSD jelen
pillanatban ismeri még a „butább”
többportos soros csatolókártyákat is,
például a BocaBoard 1008 és 2016
típusokat, valamint több intelligensebb
többportos kártyát, például a
Digiboard és a Stallion Technologies
gyártmányait. Az alap rendszermag azonban csak a
szabványos COM portokat keresi.
Ha ellenőrizni akarjuk, hogy a rendszermag rendben
megtalálta a soros portokat, akkor figyelmesen olvassuk
el a rendszerindítás során megjelenő
üzeneteket, vagy az /sbin/dmesg
parancs
kiadásával kérdezzük vissza a
rendszermag üzeneteit. Különösen a
sio
kezdetű sorokra kell
figyelnünk.
Az alábbi paranccsal tudjuk leszűrni a
sio
szövegrészt
tartalmazó sorokat:
#
/sbin/dmesg | grep 'sio'
Például, ha négy soros port található a rendszerünkben, akkor a rájuk vonatkozó rendszerüzenetek a következők lesznek:
Ha a rendszermagunk nem ismerte volna fel az összes
soros portot, akkor valószínűleg a
/boot/device.hints
állományt
kell módosítanunk. Tegyük
megjegyzésbe vagy akár teljesen
távolítsuk is el azokat az eszközöket,
amelyekkel nem rendelkezünk.
A soros portok és a többportos kártyák beállításával kapcsolatban a sio(4) man oldalát olvassuk el. Óvatosan bánjunk a FreeBSD megelőző változataiból származó konfigurációs állományokkal, mert az eszközök vonatkozó beállításokat és azok formátuma megváltozhatott azóta.
Az port IO_COM1
a port
0x3f8
, az IO_COM2
a
0x2f8
, az IO_COM3
a
0x3e8
és az
IO_COM4
a 0x2e8
beállítást helyettesíti. Ezek az
adott porthoz tartozó gyakori címeket
képviselik. A 4-es, 3-as, 5-ös és 9
megszakítások is igen általánosak
ezeknél. A hagyományos soros portok viszont az
ISA buszos PC-k esetében nem
képesek a megszakításokon
osztozni. (A többportos kártyák azonban
lehetővé teszik az 16550A számára,
hogy mindössze egy vagy két
megszakítást használjon.)
A rendszermagban található legtöbb
eszköz az ún. „speciális
eszközállományokon” keresztül
érhető el, melyek a /dev
könyvtárban találhatóak. A
sio
eszközök a
/dev/ttyd
(behívó portok) és
N
/dev/cuad
(hívó portok) állományok
használatával érhetőek el. A FreeBSD
ezenkívül még külön
eszközállományokat biztosít az
inicializációhoz
(N
/dev/cuad
)
és a zároláshoz
(N
.init/dev/cuad
).
Az inicializációs állományok a port
megnyitásakor használhatóak a
hozzá tartozó paraméterek
beállítására, például
így tudjuk elküldeni a N
.lockcrtscts
utasítást az olyan modemeknek, amelyek a forgalom
irányítását
RTS/CTS
jelzéseken keresztül
valósítják meg. A zároló
állományokkal a portokra vonatkozó
zárolásokat állíthatjuk be,
így a felhasználók vagy a programok nem
lesznek képesek bizonyos paramétereket
megváltoztatni. A termios(4), sio(4) és
stty(1) man oldalakon olvashatunk részletesebben a
terminálok beállításairól,
valamint az eszközök
zárolásáról és
inicializálásáról.
A ttyd
(vagy N
cuad
)
lesz az az eszköz, amit majd az
alkalmazásainkból el akarunk érni. Amikor
egy futó program megnyit egy ilyen eszközt, mindig
tartoznak hozzá alapértelmezett terminál
I/O beállítások. Ezeket a
következő paranccsal tudjuk lekérdezni:N
#
stty -a -f /dev/ttyd1
Ha megváltoztatjuk az eszköz
beállításait, akkor azok egészen
addig érvényben is maradnak, amíg le nem
zárjuk. Ha tehát ezután újra
megnyitjuk, akkor minden visszaáll az
alapértelmezett állapotra. Az
alapértelmezett beállítások
megváltoztatásához a „kezdeti
állapotot” szimbolizáló eszközt
kell megnyitnunk és átállítanunk.
Például, ha alapból engedélyezni
akarjuk a CLOCAL
módot, a 8 bites
kommunikációt és a
XON/XOFF
típusú
forgalomirányítást a
ttyd5
eszközön, akkor a
következőt gépeljük be:
#
stty -f /dev/ttyd5.init clocal cs8 ixon ixoff
A soros eszközök rendszerszintű
inicializálását az
/etc/rc.d/serial
állomány
vezérli. Lényegében ez határozza
meg az összes soros eszköz alapértelmezett
beállítását.
Ha bizonyos beállítások
megváltoztatását tiltani szeretnénk
az alkalmazások felé, akkor azt a
„zárolt állapotot” tartalmazó
eszközben kell rögzítenünk.
Például, ha a ttyd5
eszköz sebességét fixen 57600 bps-ra
akarjuk beállítani, akkor írjuk be
ezt:
#
stty -f /dev/ttyd5.lock 57600
Ezután ha egy alkalmazás megnyitja a
ttyd5
eszközt és
megpróbálja a port sebességét
átállítani, akkor az továbbra is
57600 bps marad.
A kezdeti és a zárolt állapotot
képező eszközöket általában
csak a root
felhasználó
számára szabad írhatóvá
tenni.
Ha kérdése van a FreeBSD-vel kapcsolatban, a
következő címre írhat (angolul):
<questions@FreeBSD.org>.
Ha ezzel a dokumentummal kapcsolatban van kérdése, kérjük erre a címre írjon:
<gabor@FreeBSD.org>.