Povídá se, že v oblasti sítí stále ještě existují lidé, kteří vlastní pouze jediný počítač PC a kteří nemají dostatek peněz na internetové spojení typu T1. Aby však získali svou "každodenní dávku konferencí a pošty", spoléhají na spojení pomocí protokolu SLIP, na sítě typu UUCP a na systémy BBS, které využívají veřejné telefonní sítě.
Tato kapitola má pomoci všem lidem, kteří jsou odkázáni pouze na modemy. Do přílišných podrobností se ale v této kapitole pouštět nemůžeme, například jak nakonfigurovat modem pro volání. Všechna tato témata budou zpracována v dokumentu Grega Hankinse Serial HOWTO.
V Linuxu je k dispozici mnoho komunikačních balíků. Spoustu z nich tvoří terminálové programy, které umožňují uživateli propojení s jiným počítačem a které se tváří, jakoby uživatel seděl před jednoduchým terminálem. Tradičním unixovým terminálovým programem je kermit. Je však značně zastaralý. Dnes jsou dostupné mnohem komfortnější programy, které podporují adresář s telefonními čísly, skriptové jazyky, jež se používají pro volání a připojování ke vzdáleným počítačovým systémům atd. Jeden z nich se nazývá minicom. Je podobný některým terminálovým programům, které možná znají dřívější uživatelé operačního systému DOS. Existují také komunikační balíky na bázi X, například seyon.
Rovněž je k dispozici množství linuxových balíků pro BBS. Některé z těchto balíků je možné nalézt na FTP-serveru sunsite.unc.edu v adresáři /pub/Linux/system/Network.
Kromě terminálových programů existuje software, který při přenosu dat z vašeho nebo do vašeho počítače nevyužívá sériovou linku interaktivním způsobem. Výhodou této metody je výrazně kratší čas potřebný k automatickému stažení několika desítek kilobajtů. Typickým příkladem je on-line čtení pošty z poštovní schránky nebo hledání zajímavých článků v systému BBS. Na druhou stranu však tento způsob vyžaduje mnohem větší diskový prostor, protože načítá i bezcenné informace.
Typickým představitelem tohoto typu softwaru je UUCP. Jedná se o programový balík, který kopíruje data z jednoho hostitele na druhý, spouští programy na vzdáleném hostiteli atd.
V soukromých sítích je často používán pro přenos pošty nebo konferencí. V následující kapitole bude popsán balík UUCP od Iana Taylora, který také běží v prostředí Linuxu. Další neinteraktivní komunikační software se používá například v sítích Fidonet. Jsou k dispozici i aplikace přenesené na platformu Linuxu, například ifmail.
Internetový protokol pro sériové linky SLIP se nachází někde na rozmezí, dovoluje jak interaktivní, tak i neinteraktivní použití. Mnoho lidí využívá protokol SLIP pro připojení ke ýkolní síti nebo k některému jinému druhu veřejného SLIP-serveru. Mohou tak využívat služby protokolu FTP a jiné. Protokol SLIP lze ale použít také k propojení několika lokálních sítí pevnými nebo částečně pevnými linkami. Toto využití je zajímavé pouze pokud současně použijeme zařízení ISDN.
Zařízení, pomocí nichž umožňuje jádro Unixu přístup k sériovým zařízením, se obvykle nazývají tty. Je to zkratka názvu společnosti Teletype (TM) , která bývala v počátcích unixové éry jedním z hlavních výrobců terminálů. V současnosti se tento termín používá pro jakékoliv znakově založené datové terminály. V průběhu této kapitoly budeme tento termín používat výhradně k označení zařízení jádra.
Linux rozlišuje tři třídy tty: (virtuální) konzoly, pseudoterminály (podobné obousměrnému potrubí, které používají aplikace jako je X11) a sériová zařízení. Posledně zmíněná třída je rovněž považována za tty, poněvadž umožňuje interaktivní spojení po sériové lince; sériová zařízení lze používat s využitím telefonní linky buďto z pevně připojeného terminálu, nebo ze vzdáleného počítače.
Zařízení tty mají spoustu konfiguračních parametrů, které lze nastavovat pomocí systémového volání ioctl(2). Mnoho z nich se vztahuje pouze na sériová zařízení, protože ty vyžadují ke správě různých typů spojení výrazně vyšší flexibilitu.
Mezi nejvýznamnijší parametry linek patří rychlost a parita. Existují však i tzv. registry, které řídí konverzi mezi malými a velkými písmeny, převod znaků CR (carriage return) na LF (linefeed) atd. Ovladač tty může také podporovat různé linkové disciplíny, které mohou zcela změnit chování ovladače zařízení. Například linuxový ovladač SLIP je implementován jako speciální linková disciplína.
Pro způsob měření rychlosti linky je příznačná určitá dvojznačnost. Správným termínem je tzv. bitová rychlost, která se vztahuje na rychlost přenosu linky a měří se v bitech za sekundu (zkráceně bps). Někdy lidé tento termín označují jako tzv. přenosovou rychlost, což není tak úplně správné. Tyto termíny totiž nelze zaměňovat. Přenosová rychlost se vztahuje k fyzickým charakteristikám daného sériového zařízení, konkrétně k taktovacímu kmitočtu, ve kterém jsou přenášeny pulsy. Bitová rychlost označuje spíše aktuální stav existujícího sériového spojení mezi dvěma body, konkrétně průměrný počet bitů přenesený za sekundu. Je důležité vědět, že tyto dvě hodnoty se obvykle liší, protože většina zařízení kóduje do elektrického impulsu více než jeden bit.
Stejně jako ke všem unixovým zařízením, je i k sériovým zařízením přistupováno pomocí speciálních souborů zařízení, které se nachází v adresáři /dev. K ovladačům sériových zařízení se vztahují dvě skupiny souborů zařízení. Každému portu odpovídá jeden soubor zařízení z každé skupiny souborů zařízení. Zařízení se bude chovat v závislosti na typu souboru, který se používá pro přístup k tomuto zařízení.
První skupina souborů zařízení se použije kdykoliv, kdy je k portu přistupováno ve směru do počítače; má hlavní číslo 4 a soubory se nazývají ttyS0, ttyS1 atd. Druhá skupina se použije pro vytáčení směrem z počítače; soubory se nazývají cua0 atd. a jejich hlavní číslo je rovno 5.
Vedlejší čísla jsou pro oba typy stejná. Máte-li modem připojen na jednom z portů COM1 až COM 4, bude vedlejší číslo rovno číslu COM-portu plus 63. Pokud se vaše nastavení liší nebo používáte například kartu, která podporuje několik sériových linek, podívejte se, prosím, do dokumentu Serial HOWTO.
Budeme předpokládat, že váš modem je připojen na port COM2. Jeho vedlejší číslo tak bude mít hodnotu 65 a hlavní číslo bude rovno 5, protože modem budeme používat pro volání z počítače. Mělo by existovat zařízení cva1, které bude mít tyto hodnoty. Vypište si sériová zařízení tty z adresáře /dev. Sloupce 5 a 6 by měly ukazovat hlavní a vedlejší čísla v uvedeném pořadí:
$ ls -1 /dev/cua*
crw-rw-rw- 1 root root 5, 64 Nov 30 19:31 /dev/cua0
crw-rw-rw- 1 root root 5, 65 Nov 30 22:08 /dev/cua1
crw-rw-rw- 1 root root 5, 66 Oct 28 11:56 /dev/cua2
crw-rw-rw- 1 root root 5, 67 Mar 19 1992 /dev/cua3
Jestliže takové zařízení neexistuje, musíte je vytvořit: přihlaste se jako superuživatel a napište:
# mknod -m 666 /dev/cua1 c 5 65
# chown root.root /dev/cua1
Někteří lidé doporučují vytvořit soubor /dev/modem, který by sloužil jako symbolické spojení s vaším modemovým zařízením, takže si příležitostní uživatelé nemusí pamatovat poněkud neintuitivní cua1. Nemůžete ale v jednom programu používat soubor modem a ve druhém skutečný název souboru zařízení. To proto, že programy používají tzv. zamykací soubory (lock file), které signalizují, že dané zařízení je právě používáno. Podle úmluvy je například název zamykacího souboru pro cua1 LCK..cua1. Použijete-li pro stejný port různé názvy souborů zařízení, pak programy správně nerozliší zamykací soubory a budou současně přistupovat ke stejnému zařízení. Výsledkem bude, že nebude pracovat ani jedna z aplikací.
V současné době podporuje Linux širokou ýkálu sériových karet, které využívají standard RS-232C, který je momentálně nejběžnějším pro sériovou komunikaci ve světě počítačů PC.
K přenosu jednotlivých bitů a synchronizaci využívá několik elektronických obvodů. Další linky lze využít k signalizaci výskytu tzv. nosné (carrier) (kterou používají modemy) a k signalizaci počátku výměny informací, tzv. handshake (podání ruky).
Ačkoliv je hardwarový handshake volitelný, je velice užitečný. Umožňuje oběma stanicím vzájemné předávání informací o stavech - zda je jedna strana připravena na příjem dalších dat nebo zda by měla druhá strana počkat, až strana, která je na příjmu, dokončí zpracování příchozích dat. K tomuto účelu se používají tzv. linky "Clear to Send" (CTS) a "Ready to Send" (RTS), které provádějí cosi na způsob hardwarového handshake, konkrétně "RTS/CTS".
V počítačích PC je rozhraní RS-232 obvykle řízeno čipem UART, který je odvozen od čipu 16 450 firmy National Semiconductor nebo od jeho novější verze NSC 16 550A. Některé skupiny zařízení (nejvýraznějšími z nich jsou interní modemy vybavené čipovou sadou firmy Rockwell) používají ale úplně odlišné čipy, které byly naprogramovány tak, aby se chovaly jako čip 16 550.
Hlavní odlišností čipů 16 450 a 16 550 je podpora vyrovnávací paměti FIFO o velikosti 16 bajtů, která je implementována v novějším čipu 16 550, zatímco čip 16 450 disponuje pouze vyrovnávací pamětí o velikosti 1 bajt. Tento rys omezuje použití čipu 16 450 pro maximální přenosové rychlosti 9 600 bps, ale čip kompatibilní s 16 550 lze použít i pro rychlosti vyšší.
Kromě těchto čipů podporuje Linux i čip 8250, což byl původní čip počítačů PC AT.
Jádro implicitně kontroluje čtyři standardní sériové porty COM1 až COM4. Těmto portům jsou přidělena vedlejší čísla v rozmezí od 64 do 67, viz Výše uvedený popis.
Pro přesné nastavení sériových portů slouží příkaz setserial, jehož autorem je Ted Ts(tm)o, a s ním i skript rc.serial. Tento skript lze vyvolat při zavádění systému z adresáře /etc/rc. Ke konfiguraci sériových zařízení jádra používá skript rc.serial příkaz setserial. Typický skript rc.serial vypadá následovně:
# /etc/rc.serial - Konfigurační skript sériové linky
#
# Detekce přerušení
/sbin/setserial -W /dev/cua*
# Konfigurace sériových zařízení
/sbin/setserial /dev/cua0 auto_irq skip_test autoconfig
/sbin/setserial /dev/cua1 auto_irq skip_test autoconfig
/sbin/setserial /dev/cua2 auto_irq skip_test autoconfig
/sbin/setserial /dev/cua3 auto_irq skip_test autoconfig
# Zobrazení konfigurace sériových zařízení
/sbin/setserial -bg /dev/cua*
Vysvětlení parametrů najdete v dokumentaci příkazu setserial.
Pokud nebude detekována vaše sériová karta, nebo pokud příkaz setserial -bg zobrazí nesprávná nastavení, je třeba konfiguračnímu skriptu explicitně poskytnout správné hodnoty.
Uživatelé interních modemů s čipovou sadou firmy Rockwell potvrzují, že se s tímto problémem již setkali. Pokud bude například čip UART detekován jako čip NSC 16 450, i když je ve skutečnosti kompatibilní s čipem NSC 16 550, je nutné změnit konfigurační příkaz na:
/sbin/setserial /dev/cua1 auto_irq skip_test autoconfig uart 16550
Podobné volby existují i pro specifikaci konkrétního COM-portu, základní adresy a nastavení IRQ. Podívejte se prosím do manuálu příkazu setserial(8).
Pokud váš modem podporuje hardwarový handshake, měli byste se ujistit, že je opravdu povolen. Protože většina komunikačních programů předpokládá, že je hardwarový handshake povolen, nesnaží se ho implicitně zapínat; takže je třeba to provést ručně. Nejlépe je to provést ve skriptu rc.serial za pomoci příkazu stty:
$ stty crtscts < /dev/cua1
Ke kontrole aktivity hardwarového handshake použijte příkaz:
$ stty -a < /dev/cua1
Tento řádek vypíše stav všech registrů příslušného zařízení; znaménko minus předcházející zobrazenému registru tento registr vypíná, například -crtscts.