26.2. Bevezetés
Vissza | 26. fejezet - Soros vonali kommunikáció | Előre

## 26.2. Bevezetés

### 26.2.1. Alapfogalmak

bps

  Bit per másodperc — az adatátvitel sebessége

DTE

  Adatterminál eszköz (Data Terminal Equipment) — ez például a számítógépünk

DCE

  Adatkommunikációs eszköz (Data Communications Equipment) — ez a modem

RS-232

  a hardveres soros vonali kommunikációhoz szükséges EIA szabványú kábel

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).

### 26.2.2. Kábelek és portok

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.

#### 26.2.2.1. A kábelek fajtái

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á.

##### 26.2.2.1.1. A null-modem kábelek

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.

26.1. táblázat - A DB-25 DB-25 közti null-modem kábel

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.

26.2. táblázat - A DB-9 DB-9 közti null-modem kábel

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

26.3. táblázat - DB-9 DB-25 közti null-modem kábel

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

### Megjegyzés:

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.

##### 26.2.2.1.2. Szabványos RS-232C kábelek

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á.

#### 26.2.2.2. A portok

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.

##### 26.2.2.2.1. A portok típusai

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.

##### 26.2.2.2.2. A portok nevei

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`N`` alakúak, ahol az `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`N`` 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.

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.

### 26.2.3. A rendszermag beállítása

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.

### Tipp:

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:

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

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.

### Megjegyzés:

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.)

### 26.2.4. Speciális eszközállományok

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`N`` (behívó portok) és `/dev/cuad`N`` (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 (`/dev/cuad`N`.init`) és a zároláshoz (`/dev/cuad`N`.lock`). 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 `crtscts` 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.

### 26.2.5. A soros port beállítása

A `ttyd`N`` (vagy `cuad`N``) 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:

`#` `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.

Vissza | Fel | Előre
26. fejezet - Soros vonali kommunikáció | Főoldal | 26.3. Terminálok

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>.