FreeBSD kézikönyv
Előző | Fejezet 26. Soros vonali kommunikáció | Következő

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

Táblázat 26-1. 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.

Táblázat 26-2. 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

Táblázat 26-3. 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.

Előző | Tartalom | Következő
Soros vonali kommunikáció | Fel | Terminálok

Ha kérdése van a FreeBSD-vel kapcsolatban, a következő címre írhat (angolul): <freebsd-questions@FreeBSD.org>.
Ha ezzel a dokumentummal kapcsolatban van kérdése, kérjük erre a címre írjon: <gabor@FreeBSD.org>.