Linux, a porty szeregowe.

by Greg Hankins, greg.hankins@cc.gatech.edu
v1.10, 31 March 1997
Wersja polska: Piotr Pogorzelski piotr.pogorzelski@ippt.gov.p
w1.0; Listopad 1997


Niniejszy dokument opisuje zagadnienia związane z konfiguracją i obsługą portów szeregowych i programów komunikacyjnych.

1. Wprowadzenie.

Przed Tobą Linux Serial-HOWTO. Wszystko na temat konfiguracji modemów i terminali pod Linux-em. Trochę sztuczek na temat portów szeregowych i porad na temat najczęstszych kłopotów. Niniejszy dokument koncentruje się na sytemech pracujących na komputerach klasy x86, choć zawarte w nim informacje mogą być prawdziwe również dla innych architektur sprzętowych.

1.1 Prawa autorskie.

Prawa autorskie Linux Serial HOWTO należą do Grega Hankinsa. Dokumenty HOWTO mogą być powielane i redystybuowane w całości lub w części, na dowolnym nośniku fizycznym lub elektronicznym, tak długo, jak niniejsza notka o prawach autorskich jest umieszczana na wszystkich kopiach. Dystrybucja komercyjna jest dozwolona, a wręcz do niej zachęcamy. Autor chciałby być poinfirmowany o takim fakcie.

Wszelkie tłumaczenia, prace powstałe na bazie tego dokumentu lub prace zawierające fragmenty tego dokumentu muszą być objęte tymi samymi warunkami, co oryginał. To znaczy, że nie możesz na dokumenty powstałe z HOWTO nakładać dodatkowych ograniczeń na ich rozpowszechnianie. W pewnych warunkach możemy odstąpić od tej reguły; prosze skontaktować się w tym celu z koordynatorem HOWTO - adres można znaleźć dalej w dokumencie.

Chcemy aby ten dokument był rozpowszechniany na wszelkie możliwe sposoby, chcemy również zachować prawa autorskie do tego dokumentu i chcielibyśmy być informowani o wszelskich nowych planach redystrybucji dokumentów HOWTO.

Jeśli masz jakieś pytania, skontaktuj się z Gregiem Hankinsem, koordynatorem projektu Linux HOWTO -
gregh@sunsite.unc.edu tel. +1 404 853 9989.

1.2 Nowe wersje tego dokumentu.

Nowe wersje Serial HOWTO będą dostępne pod adresem ftp://sunsite.unc.edu:/pub/Linux/docs/HOWTO/Serial-HOWTO i na wszystich kopiach (mirrorach). Dokument jest dostępny również w innych formatach, mozna je znaleźć w katalogu other-formats. Serial-HOWTO jest dostęne również pod adresem http://sunsite.unc.edu/LDP/HOWTO/Serial-HOWTO.html i co miesiąc będzie wysyłane na comp.os.linux.answers.

Najnowsze wersje tłumaczenia można jak zwykle znaleźć na stroanch http://www.jtz.org.pl/.

1.3 Uwagi i komentarze.

Prosze, przysyłajcie wszelkie uwagi, komentarze oraz dodatkowe materiały. Zawsze jestem chętny usłyszeć co myślicie o HOWTO. Zawsze staram się wprowadzać ulepszenia. Powiedzcie mi dokładnie czego znie zrozumieliście, lub co mogłoby być napisane jaśniej. Możecie się ze mną skontakować pisząc na adres greg.hankins@cc.gatech.edu. Na każdy list odpiszę, choć może mi to zając tydzień albo więcej, w zależności jak jestem aktualnie zajęty. Otrzymuje mnóstwo listów od root-a i ze źle skonfigurowanych komputerów. Wysyłajcie do mnie listy, ze sprawdzonych kont pocztowych. Jeśli nie odpowiem w ciągu dwóch tygodni, napiszcie do mnie raz jeszcze.

Można mnie złapać pod adresem:
Greg Hankins
College of Computing
801 Atlantic Drive
Atlanta, GA 30332-0280
to pocztą slimaczą, lub http://www.cc.gatech.edu/staff/h/Greg.Hankins/.

Proszę, podawajcie wersje dokumentu, ten dokument nosi numer 1.10.

1.4 Zrzeczenie się odpowiedzialności.

Podane tutaj przykłady lub odpowiedzi nie muszą być odpowiednie dla wszystkich komputerów.

2. Obsługiwany sprzęt.

Linux potrafi współpracować z następującymi urządzeniami szeregowymi.

2.1 Standardowe karty portów szeregowych komputerów PC.

Uwaga: ze względu na konflikt adresów nie możesz używać jednocześnie portu COM4 i karty video IBM8514.

2.2 Modemy Plug And Play (PnP).

Modemy PnP będą pracowały pod Linux-em. Jednakże odradzam ich użytkowanie, ponieważ są trudne we współżyciu. Jest kilka rzeczy, których możesz spróbować:

2.3 Karty wieloportowe (z układem 16450/16550A).

Zasadniczo Linux obsługuje dowolną kartę portów szeregowych, która wykorzystuje układy UART 8250, 16450, 16550, 16550A (lub zgodne) lub modemy wewnętrzne emulujące jeden z tych układów.

Specjalna uwaga na temat BB-1004 i BB-1008. Obie nie obsługują linii DCD i RI, i dlatego nie nadają się do obsługi modemów wejściowych. Zastosowane do innych celów będą się sprawować poprawnie.

2.4 Inteligentne karty wieloportowe.

Przegląd urządzeń Comtrol, Cyclades, Digi i Stallion można znaleźć w numerze Czerwiec 1995 Linux Journal. Artykuł jest dostępny pod adresem http://www.ssc.com/lj/issue14.

2.5 Nieobsługiwane urządzenia szeregowe.

Modemy, które nazywają siebie ``Winmodems'', np. USR Sportster Winmodem i IBM Aptiva MVAVE, nie są obsługiwane przez Linux-a. Te modemy korzystają z prywatnych, niedostępnych rozwiązań technicznych i wymagają specjalnych sterowników. Unikaj modemów tego typu. Co więcej, z tych samych powodów, trzymaj się z daleka od modemów wymagajacych sterowników RPI Rockwella.

3. Jak nazywają sie porty szeregowe?

Każdy port I/O umożliwia wymianę danych pomiędzy komputerem i otoczeniem. Istnieje wiele rodzajów portów I/O, porty szeregowe, równoległe, sterowniki dysków, karty ethernetowe itp. My będziemy omawiać porty szeregowe, ponieważ modemy i terminale są urządzeniami korzystającymi z portów szeregowych. Każdy port szeregowy musi posiadać adres I/O i przerwanie (IRQ). Istnieją 4 porty szeregowe odpowiadające odpowiednio COM1-COM4:

        ttyS0 (COM1) adres 0x3f8 IRQ 4
        ttyS1 (COM2) adres 0x2f8 IRQ 3
        ttyS2 (COM3) adres 0x3e8 IRQ 4
        ttyS3 (COM4) adres 0x2e8 IRQ 3
        

Jeśli podczas startu Linux nie rozpozna żadnego portu szeregowego upewnij się, że obsługa portów szeregowych jest wkompilowana w jądro. W tym dokumencie przyjeliśmy, że ttyS0 odnosi się do portu COM1, ttyS1 do COM2, ttyS2 do COM3 i ttyS3 do COM4. Zauważ, że domyślnie porty współdzielą przerwania IRQ. Jednakże nie można korzystać ze wszystkich portów w konfiguracji domyślnej, trzeba na nowo przydzielić przerwania. Informacje na temat ustawiania IRQ znajdziesz w rozdziale Czy mogę używać więcej niż dwóch urządzeń portów szeregowych?

W niektórych systemach tworzone są dodatkowe dwa pliki urządzeń, /dev/modem dla modemu i /dev/mouse dla myszy. Oba są dowiązaniami symbolicznymi do właściwych urządzeń w katalogu dev, które podałeś podczas Instalacji systemu (chyba, że posiadasz mysz sbus, wtedy /dev/mouse będzie wskazywać na urządzenie bus mouse).

Wiele dyskutowano na temat użyteczności /dev/mouse i /dev/modem. Ja mocno odradzam korzystania z tych dowiązań. W szczególności, jeśli planujesz korzystać ze swojego modemu do dzwonienia do twojego komputera (dialin), a będziesz korzystał z /dev/modem, to możesz napotkać na problemy związane z plikami blokad (lock files). Jeśli ten pomysł podoba Ci się, korzystaj z niego, lecz upewnij się, że wspomniane dowiązania wskazują na właściwe urządzenia. Jednakże jeśli usuniesz te dowiązania, wtedy niektóre aplikacje będą wymagać zmianiy konfiguracji (np. minicom).

3.1 Urządzenia portów szeregowych i numery w dev.

        /dev/ttyS0 major 4, minor 64    /dev/cua0 major 5, minor 64
        /dev/ttyS1 major 4, minor 65    /dev/cua1 major 5, minor 65
        /dev/ttyS2 major 4, minor 66    /dev/cua2 major 5, minor 66
        /dev/ttyS3 major 4, minor 67    /dev/cua3 major 5, minor 67
        
Proszę zwróć uwagę, że wszystkie dystrybucje powinny same utworzyć pokazane powyżej pliki urządzeń. Czy tak się stało możesz to sprawdzić wydając polecenie:
linux% ls -l /dev/cua*
linux% ls -l /dev/ttyS*

Tworzenie plików urządzeń w katalogu /dev.

Jeśli nie znalazłeś pliku urządzenia, musisz go utworzyć za pomocą polecenia mknod.

Przykład: załóżmy, że potrzebujesz utworzyć urządzenie ttyS0:

        linux# mknod -m 666 /dev/cua0 c 5 64
        linux# mknod -m 666 /dev/ttyS0 c 4 64
        

Możesz w tym celu wykorzystać skrypt MAKEDEV, dostępny w katalogu /dev lub archiwach ftp. Znacznie upraszcza tworzenie plików urządzeń. Na przykład jeśli chesz utworzyć urządzenie ttyS0 wystarczy napisać:

        linux# cd /dev
        linux# ./MAKEDEV ttyS0
        

Skrypt zajmie się utowrzeniem urządzeń wyjściowych (cua) i wejściowych (ttyS).

3.2 Uwagi na temat kart wieloportowych.

Pliki urządzeń wykorzystywane przez karty wieloportowe zależą od rodzaju karty. Szczegóły można znaleźć w rc.serial, który znajduje się w dystrybucji programu setserial. Jeśli starasz się uruchomić kartę wieloportową bardzo polecam zaopatrzyć się w najnowszą wersję programu setserial. Prawdopododobnie będziesz musiał własnoręcznie utworzyć pliki specjalne urządzeń. Skorzystaj albo z programu mknod albo skryptu MAKEDEV. Pliki urządzeń kart wieloportowych charakteryzują się tym, że numer główny (major number) jest równy 64 + numer portu karty. Jeśli chiałbyś utworzyć plik urządzenia dla portu ttyS17 muszisz wydać polecenie:

        linux# mknod -m 666 /dev/cua17 c 5 81
        linux# mknod -m 666 /dev/ttyS17 c 4 81
        

Zauważ, że ``64 + 17 = 81''. Korzystając ze skryptu MAKEDEV trzeba napisać:

        linux# cd /dev
        linux# MAKEDEV ttyS17
        

Uwaga: dokumentacja SIIG dla IO1812 dotycząca portów COM5-COM8 zawiera błąd. Powinno być COM5=0x250, COM6=0x258, COM7=0x260 i COM8=0x268.

Uwaga: Rejestr stanu (status register) karty DIGI PC/8 znajduje się pod adresem 0x140.

Uwaga: Korzystając z karty AST Fourport może być potrzebne umiesczenie w skrypcie rc.serial parametru skip_test.

3.3 Uwagi na temat inteligentnych kart wieloportowych.

Przeczytaj dokumentacje dostarczaną ze sterownikiem. Te karty korzystają ze specjalnych urządzeń, nie ze standardowych. Informacje ich dotyczące różnią się w zależności od posiadanego sprzętu.

4. Interesujące oprogramowania, o którym powinieneś wiedzieć.

4.1 Co to takiego getty?

getty to program, który obsługuje proces wejścia do systemu Unix. Będziesz musiał używać getty jeśli chcesz dzwonić do swojego Linux-a. Nie potrzebujesz getty jeśli zamierzasz jedynie dzwonić ze swojego Linux-a w świat. W świecie Linux-a rozpowszechnione są trzy wersje tego programu: getty_ps, mgetty i agetty. Każdy z nich posiada własną składnie i pramatery wywołania, upewnij się, że korzystach z poprawnych dla wersji getty, której używasz.

Trochę o getty_ps.

Większość dystrybucji instaluje pakiet getty_ps. Zawiera on dwa programy getty. getty stosowany do konsoli wirtualnych i terminali, oraz uugetty wykorzystywany do modemów. Skoncentruję się na getty_ps, ponieważ korzystam z tej właśnie wersji getty.

Kilka słów na temat mgetty.

mgetty jest wersja getty przeznaczoną do modemów. Pozwala na logowanie się przez modem, dostarcza obsługę FAXu i rozpoznaje połączenia PPP. Dokumentacja mgetty jest bardzo dobra i nie potrzebuje uzupełnień. Znajdziesz w niej informacje na temat instalacji i konfiguracji programu. Najnowsze informacje o pakiecie możesz znaleźćpod adresem http://www.leo.org/~doering/mgetty/.

I na koniec agetty.

agetty to trzeci wariant getty. Jest to prosta, w pełni funkcjonalna implementacja getty bardzo dobrze nadająca się do obsługi wirtualnych konsol i teminali.

4.2 Co to takiego setserial?

setserial to program, który pozwala na sprawdzanie i zmianę różnego rodzaju atrybutów portów szeregowych, adresów, przerwań i innych parametrów. Aby dowiedzieć się, która wersja jest zainstalowana na twoim komputerze należy uruchomić program bez żadnych argumentów.

Kiedy twój Linux startuje, konfigurowane są tylko porty ttyS{0-3}, wykorzystane są standardowe ustawienia IRQ równe 3 i 4. Dlatego jeśli posiadasz inne karty portów szeregowych lub porty ttyS{0-3} nie mają standardowych ustawień przerwań IRQ, to aby zostały prawidłowo sonfigurowane musisz skorzystać z programu setserial. Pełny spis dostępnych opcji znajduje się na stronach podręcznika (man setserial).

5. Jak mogę zadzwonić z mojego modemu?

5.1 Wymagania sprzętowe.

Po pierwsze upewnij się czy masz dobry kabel. Modem wymaga kabla prostego, bez żadnych krzyżowań przewodów. Każdy sklep komputerowy posiada w swej ofercie taki kabel. Pamiętaj aby miał odpowiednie wtyczki. Jeśli używasz gniazda DB25, to zawsze bedzie to męskie DB25. Nie pomyl go z gniazdem portu równoległego, którego gniazdo to damskie DB25. Podłącz modem do jednego z portów szeregowych. Jeśli potrzebujesz pomocy skorzystaj z dokumentacji modemu.

Uwagi na temat modemów wewnętrznych.

Do podłączenia modemu wewnętrznego nie potrzebujesz kabla modemowego. Modem wewnętrzny nie potrzebuje również portu szeregowego, posiada własny. Muszisz jedynie poprawnie skonfigurować przerwanie, oraz adresy portów We/Wy, tak aby nie było wykorzystywane przez inne urządzenia. Jeśli utknąłeś skorzystaj z dokumentacji modemu. Jeśli potrzebujesz rady na temat wyboru przerwania IRQ zobacz Czy mogę używać więcej niż 2 porty szeregowe?.

Na niektórych płytach głównych musisz wyłączyć port szeregowy, który ma zostać zastąpiony przez modem. Robi się to przełączając odpowiednnie zworki lub zmieniając ustawienia w BIOSie. Przeczytaj instrukcje do płyty głównej.

Z powodu błędu w karcie graficznej IBM8514, możesz napotkać na kłopoty konfigurując twój modem wewnętrzny na porcie ttyS3. Jeśli linux nie znajdzie modemu na porcie ttyS3 możesz wykorzystać setserial, wtedy modem będzie pracował prawidłowo. Modemy wewnętrzne skonfigurowane na portach ttyS{0-2} nie powinny mieć klopotów z wykrycem ich przez system.

5.2 Rozmowy z twoim modemem.

Zanim zaczniesz korzystać z bardziej skomplikowanych programów komunikacyjnych, do testów skorzystaj z kermit-a lub innego prostego programu (minicom?). Ostanią wersję kermita można zawsze znaleźć pod adresem ftp://sunsite.unc.edu:/pub/Linux/apps/comm i na jego kopiach. Powiedzmy, że twój modem jest przyłączony do portu ttyS3 i potrafi obsłużyć prędkość 115200 bps. Powinieneś wtedy napisać:

linux# kermit
C-Kermit 6.0.192, 6 Sep 96, for Linux
 Copyright (C) 1985, 1996,
  Trustees of Columbia University in the City of New York.
Default file-transfer mode is BINARY
Type ? or HELP for help.
C-Kermit>set line /dev/ttyS3
C-Kermit>set carrier-watch off
C-Kermit>set speed 115200
/dev/ttyS3, 115200 bps
C-Kermit>c
Connecting to /dev/ttyS3, speed 115200.
The escape character is Ctrl-\ (ASCII 28, FS)
Type the escape character followed by C to get back,
or followed by ? to see other options.
ATE1Q0V1                           ; wpisz to i naciśnij Enter
OK                                 ; modem powinien odpowiedzieć w ten
                                   ; sposób 

Jeśli modem odpowie na polecenie AT możesz założyć, że twój modem po stronie Linux-a działa poprawnie. Spróbuj połączyć się z innym modemem (np. numer 0202122 - nasza kochana TPSA - przyp. tłumacza). Napisz

        ATDT0202122,, 

Jeśli twoja linia nie obsługuje wybierania tonowego zamiast ATDT napisz ATDP. Jeśli nawiązałeś połączenie, to znaczy, że twój modem działa.

Aby wróćic na konsole Kermita trzymajac wciśniety Ctrl wciśnij backslasz '\', zwolnij Ctrl i wciśnij C.

 Ctrl-\-C (Back at linux) C-Kermit>quit linux#

To był prosty test przy wykorzystaniu prymitywnych, ręcznych metod wybierania numeru. Normalnie należy pozwolić Kermitowi na automatyczne wybranie numeru, korzystając z jego bazy numerów i zaawansowanych metod nawiązywania połaczeń. Np. korzystając z modemu USR Robotics należy zrobić tak:

linux# kermit
C-Kermit 6.0.192, 6 Sep 1997, for Linux
 Copyright (C) 1985, 1996,
  Trustees of Columbia University in the City of New York.
Default file-transfer mode is BINARY
Type ? or HELP for help
C-Kermit>set modem type usr        ; wybuerz rodzaj modemu
C-Kermit>set line /dev/ttyS3       ; wybierz urządzenie
C-Kermit>set speed 115200          ; ustaw domyślną prędkość
C-Kermit>dial 7654321              ; wybierz numer
 Number: 7654321
 Device=/dev/ttyS3, modem=usr, speed=115200
 Call completed.<BEEP>
Connecting to /dev/ttyS3, speed 115200
The escape character is Ctrl-\ (ASCII 28, FS).
Type the escape character followed by C to get back,
or followed by ? to see other options.

Welcome to ...

login:

Jeśli potrzebujesz wskazówek zobacz rozdział Programy komunikacyjne.

Kiedy dzwonisz wykorzystując swój modem, ustaw prędkość portu szeregowego na największą jaka jest obsługiwana przez twój komputer. Instalacje Linux-a z biblioteką libc w wersji 5.x lub nowszej obsługują prdkości do 115200bps. libc znajduje się zwykle w katalogu /lib, zobacz jaką wersję posiadasz. Jeśli twój Linux nie rozpoznaje prędkości 57600 lub 115200bps, musisz skorzystać z programu setserial aby ustawić port na większą prędkość. Jak to zrobić jest opisane w rozdziale Jak ustawić port szeregowy na większe predkości?. Następnie w programi komunikacyjnym ustaw prędkość portu na 38400.

5.3 Konfiguracja modemów wyjściowych.

Jeśli będziesz korzystał z modemu tylko do dzwonienia, możesz go skonigurować w niemal dowolny sposów. Jeśli jednak chcesz go wykorzystywać jako modem wejściowy, musisz skonfigurowac modem w taki sposób, aby wykorzystywał tę samą prędkość z jaką zamierzasz uruchomić program getty. Więc jeśli zamierzasz uruchomić getty z prędkościa 38400 bps. podczas konfigiracji modemu ustaw prędkość na 38400. Ma to na celu zpobiec nieporzumienim wynikłym ze złego dopasowania prędkości między portem szeregowym, a modemem. Zasadniczo, ustawienia fabryczne włączające korekcję błędów i sprzętowe sterowanie przepływem danych są najlepszymi ustawieniami modemów wyjściowch. Dokładne informacje o tych ustawieniach znajdziesz w dokumentacji modemu.

5.4 Sprzetowe sterowanie przepływem danych.

Jeśli twój modem obsługuje sprzętowe sterowanie przepływem danych (RTS/CTS), stnowczo polecam wykorzystanie tego. Jest to szczególnie ważne w przypadku modemów posiadającą kompresję. Wpierw musisz włączyć RTS/CTS na samym porcie szeregowym. Najlepiej jest to zrobić w skryptach startowych /etc/rc.d/rc.local lub /etc/rc.d/rc.serial. Upewnij się ze te pliki są uruchamiane z głównego skryptu rc.sysinit. Dla każdego portu, dla którego chcesz uruchomic CTR/CTS należy wykonać polecenie:

        stty crtscts < /dev/ttyS3
        

Musisz również włączyć RTS/CTS w modemie. Jak to zrobić znajdzesz w dokumentacji modemu, ponieważ różni się to między modelami. Pamiętaj o zapamiętaniu konfiguracji modemu (w jego pamięci stałej), oczywiście jeśli twoj modem to potrafi.

6. Jak dzwonić na zewnątrz i do mojego komputera, wykorzystując jednocześnie getty_ps?

Skonfiguruj modem w taki sposób, aby prawidłowo wybierał numery. Jeśli nie czytałeś rozdziału Jak mogę zadzwonić z mojego modemu? zrób to teraz! Podałem tam bardzo ważne informacje. Nie musisz czytać tego rozdziału, jeśli zamiesza jedynie dzwonic ze swojego modemu.

6.1 Konfiguracja modemu do dzwonienia na zewnątrz i przyjmowania połączeń.

Aby mieć wyjście przez modem i jednocześnie obsługiwać przychodzące połączenia, musisz skonfigurować modem w specjalny sposób (znów za pomocą poleceń AT.):

E1       wyświetlane wprowadzanych poleceń
Q0       wyświetlanie kodów rezultatów
V1       bądź bardziej rozgadany, podawaj więcej informacji
S0=0     nigdy nie odpowiadaj na połączenie (uugetty obsługuje
przychodzące połączenia, za pomocą opcji waitfor).

Jeśli nie ustawisz tych opcji, ciąg znaków inicjujący modem, może nie wykonać poprawnie swej pracy, niwecząc całą procedurę. Lecz o plikach konfiguracyjnych później.

&C1 DCD włączone tylko po nawiązaniu połączenia
&S0 DSR zawsze włączone
        Przełączenie DTR resetuje modem (w zależności od producenta - RTFM).

Powyższe ustawienia mają wpływ na zachowanie modemu podczas nawiązywania i zakańczania połączenia.

Jeśli twój modem nie potrafi zapamiętać konfiguracji, możesz wcześniej opisane ustawienia zapamiętać w tzw. "INIT string". Zaraz o tym napiszemy. Niektóre modemy posiadają mikroprzełączniki służące do zmiany konfiguracji modemu (zmiany wartości rejestrów). Upewnij się że są poprawnie ustawione.

Zacząłem zbierać listę sprawdzonych konfiguracji, dla różnych typów modemów. Jeśli masz ochotę przysłać mi swoją, proszę bardzo. Jeśli chciałbyś otrzymać jedną z konfiguracji, po prostu przyslij list. Posiadane przez mnie informacje są dostępne pod adresem ftp://ftp.cc.gatech.edu/pub/people/gregh/modem-configs.

Uwaga: aby zmusić mój Courier V.34 do poprawnego zerowania po spadku DTR musiałem ustawić &D2 i S13=1 (ustawienie bitu 0 rejestra S13). Otrzymałem potwierdzenia, że ten sposób działa również w przypadku USR Sportster V.34.

Uwaga: Niektóre modele Supra traktują DCD inaczej niż inne modemy. Jeśli używasz Supry spróbuj ustawić &C0, a nie &C1. Aby poprawnie obsługiwać DTR trzeba również ustawić &D2.

6.2 Instalacja getty_ps.

Pobież najnowszą wersję z sunsite.unc.edu:/pub/Linux/system/serial. Jeśli planujesz korzystać z wysokich prędkości (57600 i 115200bps), musisz zdobyć wersję 2.0.7j lub nowszą. Muszisz mieć również libc 5.x lub nowszą.

getty_ps jest domyślnie skonfigurowane zgodnie ze standardem FSSTND (FileSystem STaNDard). To znaczy, że programy binarne będą w katalogu /sbin, a pliki konfiguracyjne będą się nazywały /etc/conf.{uu}getty.ttySN. Pliki blokady (lock files) będą umieszczane w katalogu /var/lock. Upewnij się, że katalog /var/lock istnieje.

Jeśli nie chesz zgodności z FSSTND, programy binarne zostaną umieszczone w /etc, pliki konfiguracyjne zostaną nazwane /etc/default/{uu}getty.ttySN, a pliki blokady będą umieszczane w katalogu /usr/spool/uucp. Jeśli korzystasz z UUCP, zaleceamy ten drugi sposób, ponieważ Taylor UUCP napotka na problemy, jeśli przeniesiesz pliki blokady w miejsce, które nie bedzie sprawdzane (przez uucp w poszukawaniu plików blokady).

W celu rejestracji komunikatów getty_ps korzysta z syslogd. Jeśli chesz skonfigurować syslogd przeczytaj strony podręcznika dla syslogd(1) i syslog.conf(5). Komunikaty są rejestrowane z priorytetem LOG_AUTH, błędy wykorzystują LOG_ERR, a informacje odpluskwiające LOG_DEBUG. Jeśli nie chcesz korzystać z syslogd tylko chesz aby komunikaty były zapisywane do pliku (domyślnie będzie to /var/adm/getty.log) , to musisz zmodyfikować plik tune.h w zrodłach getty_ps.

Zastanów się i zdecyduj się czy chcesz zachować zgodność ze standardem FSSTND i czy chesz korzystać z syslogd, zmodyfikuj odpowiednio pliki Makefile, config.h i tune.h znajdujące się w katalogu źródłowym pakietu getty_ps. Następnie zainstaluj programy zgodnie z instrukcjami.

Od tej chwili, wszystkie odwolania do getty należy traktować jako odwołania do getty_ps. Natomiast uugetty będzie odnosiło się do uugetty pochodzącego z pakietu getty_ps.

6.3 Konfiguracja uugetty.

Dla przychodzących i wychodzących połączeń modemowych, chcemy zastosować uugetty. uugetty sprawdza czy odpowiednie pliki nie są zablokowane. Trzeba poprawić plik /etc/gettydefs, aby zawierał pozycje dotyczące modemu (pamiętaj, że te pozycje wzajemnie na siebie wskazują (są od siebie zależne), jednak nie mają zastosowania do połączeń z ustaloną prędkością - między każdą pozycją konieczny jest pusty wiersz):

 
# Modem entries 
115200# B115200 CS8 # B115200 SANE -ISTRIP HUPCL #@S @L @B login: #57600

57600# B57600 CS8 # B57600 SANE -ISTRIP HUPCL #@S @L @B login: #38400

38400# B38400 CS8 # B38400 SANE -ISTRIP HUPCL #@S @L @B login: #19200

19200# B19200 CS8 # B19200 SANE -ISTRIP HUPCL #@S @L @B login: #9600

9600# B9600 CS8 # B9600 SANE -ISTRIP HUPCL #@S @L @B login: #2400

2400# B2400 CS8 # B2400 SANE -ISTRIP HUPCL #@S @L @B login: #115200

Jeśli posiadasz modem 9600 bps lub szybszy, z kompresją danych, wtedy możesz zablokować prędkość portu szeregowego i pozwolić aby modem sam wykonywał przejścia na inne prędkości bps. W takim przypadku zamiast wypróbowywania poszczególnych pozycji pliku /etc/gettydefs, wystarczy aby była tylko jedna pozycja opisujaca ustawienia modemu:

# 115200 fixed speed
F115200# B115200 CS8 # B115200 SANE -ISTRIP HUPCL #@S @L @B login: #F115200

Jeśli tój modem obsługuje sprzętowe sterowanie RTC/CTS, możesz do pliku /etc/gettydefs dodac opcję CRTSCTS:

# 115200 fixed speed with hardware flow control
F115200# B115200 CS8 CRTSCTS # B115200 SANE -ISTRIP HUPCL CRTSCTS #@S @L @B login: #F115200

Jeśli chcesz możesz zmusic uugetty do wyświetlania ciekawych informacji w nagłówku (login banner). W dalszych przykładach pokazuję jak wyświetlić nazwę systemu (komputera), numer portu, prędkość bps. Możesz dodać własne informacje:

               @B    Aktualna (sprawdzona w momencie napotkania @B ) prędkość bps.
               @D    Aktualna data w formacie MM/DD/YY.
               @L    Linia szeregowa do któej przyłączone jest getty.
               @S    Nazwa systemu (komputera).
               @T    Aktualny czas, w formacie HH:MM:SS (24-godziny).
               @U    Liczba aktualnie przcujących użytkowników. Jest to liczba
                           pozycji w pliku /etc/utmp o niezerowym polu ut_name.
               @V    Warość stałej VERSION, zdefiniowanej w plkiku ustawień
                           standardowych.
               Aby wyświetlić pojedynczy znak @ musisz napisac '\@\ lub '@@'.
        

Następnie upewnij się, że istnieją odpowiednie pliki urządzeń wejściowych i wyjściowych, i że modem jest włączony. Jeśli twoj modem jest podłączony do portu ttyS3 muszą istnieć pliki /dev/cua3 i /dev/ttyS3. Jeśli odpowiendnie pliki urządzeń nie istnieją wróć do rozdziału Tworzenie plików urządzeń w katalogu <tt>/dev</tt> i utwórz niezbędne pliki urządzeń. Jeśli chcesz mieć możliwość dzwonienia, podczas gdy uugetty czeka na nadejscie połączeń z zewnątrz, skorzystaj z urządzeń /dev/cua zamiast /dev/ttyS.

Po zakończeniu edycji /etc/gettydefs możesz sprawdzić, czy składnia pliku jest poprawna wydając polecenie:

        linux# getty -c /etc/gettydefs
        

6.4 Przystosowywanie uugetty.

Istniej mnóstwo parametrów, które możesz modyfikować oddzielnie dla każdego posiadanego portu. Przechowywane są w odzielnych plikach, każdy port może miećswój plik. Program uugetty zawsze wpierw sprawdza zawartość pliku /etc/conf.uugetty zawierajacego wspólne parametry dla wszystkich portów, a dopiero później wczytuje z /etc/conf.uugetty.ttySN konfiguracje konkretnego portu. Przykładowe pliki konfiguracyjne można znaleźć w zródłach pakietu. Zwykle są w każdej dystrybucji Linux-a. Nie przedstawiamy ich tutaj ze wzgledu na ich objętość. Jeśli używasz starszych wersji getty_ps (tzn. wcześniejszych od 2.0.7e) lub nie korzystasz ze schematu FSSTND, domyślnym plikiem konfiguracyjnym będzie /etc/default/uugetty.ttySN. Mój plik /etc/conf.uugetty.ttyS3 wygląda tak:

# przykładowy plik konfiguracyjny modemu standardu Hayes 
# umożliwiający przyjmowanie połączeń z zewnątrz 
# 
# alternatywny plik blokaty, który należy sprawdzać. Jeśli istnieje, 
# wtedy uugetty jest uruchamiane ponownie, a więc modem jest 
# równiez powtórnie inicjowany

ALTLOCK=cua3
ALTLINE=cua3
# uzywana linia 
INITLINE=cua3
# czas po jakim przerywamy, jeśli brak reakcji użytkownika
TIMEOUT=60
# Ciag znaków zaierające polecenia inicjujące modem
# format: (oczekiwane) (wysyłane) ... (sekwencja)
INIT="" AT\r OK\r\n
WAITFOR=RING
CONNECT="" ATA\r CONNECT\s\A
#  istawiamy opóżnienie przez pokazaniem nagłówka Loginu.
DELAY=1
#DEBUG=010

Aby uugettty było uruchomione i nasłuchiwało na porcie, musisz do pliku /etc/initab dopisać wiersz (wstawiając odpowiednie informacje typu port,prędkość,typ terminala):

S3:456:respawn:/sbin/uugetty ttyS3 F38400 vt100

Zrestartuj proces init:

linux# init q 

Parametr podany w pliku /etc/inittab określający predksość w bps powinien wskazywać możliwie jak największą prędkość.

Teraz Linux będzie oczekiwał na połączenia przychodzące przez port szeregowy. Zadzwoń z innego komputera i wejdź do swojego systemu.

uugetty posiada mnóstwo opcji. Zobacz stronę podręcznika dla getty(1m). Prócz innych ciekawych cech dostępne są funkcje ringback i udostępnianie modemu w zależnośći od pory dnia/nocy. RTFM :-).

7. Jak skonfigurować terminal przyłączony do mojego komputera PC?

Instrukcje zawarte w tym rozdziale przedstawiają w jaki sposób przyłączyc do portu szeregoweg onaszego Linux-a terminal lub inny komputer.

7.1 Wymagania sprzętowe.

Upewnij się, że posiadasz dobry kabel. Kabel bezmodemowy (null modem cable) kupiony w sklepie komputerowym będzie dobry. Tylko to musi być kabel bezmodemowy!. Wiele sklepów nazywa ten kabel kablem do drukarki szeregowej. Pamiętaj aby podłączyć modem do portu szeregowego (męski DB25 lub DB9), a nie równoległego.

Gniazdo DB25 potrzebuje co najmniej kabla o takich połączeniach:

 
        PC male DB25                            Terminal DB25
        TxD   Transmit Data         2 --> 3     RxD   Receive Data
        RxD   Receive Data          3 <-- 2  TxD   Transmit Data
        SG    Signal Ground         7 --- 7     SG    Signal Ground

Jeśli chesz korzystać ze sprzętowego uzgadniania prędkości, musisz mieć pełny kabel bezmodemowy:

        PC male DB25                            Terminal DB25
        TxD   Transmit Data         2 --> 3     RxD   Receive Data
        RxD   Receive Data          3 <-- 2     TxD   Transmit Data
        RTS   Request To Send       4 --> 5     CTS   Clear To Send
        CTS   Clear To Send         5 <-- 4     RTS   Request To Send
        DSR   Data Set Ready        6
                                    |
        DCD   Carrier Detect        8 <-- 20    DTR   Data Terminal Ready
        SG    Signal Ground         7 --- 7     SG    Signal Ground
                                          6     DSR   Data Set Ready
                                          |
        DTR   Data Terminal Ready  20 --> 8     DCD   Carrier Detect

Jeśli masz gniazdo DB9 spróbuj takich połączeń:

        PC DB9                                  Terminal DB25 
        RxD   Receive Data          2 <-- 2  TxD   Transmit Data
        TxD   Transmit Data         3 --> 3     RxD   Receive Data
        SG    Signal Ground         5 --- 7     SG    Signal Ground

I na koniec pełny kabel DB9-DB25 wygląda tak:

        PC DB9                                  Terminal DB25
        RxD   Receive Data          2 <-- 2     TxD   Transmit Data
        TxD   Transmit Data         3 --> 3     RxD   Receive Data
                                          6     DSR   Data Set Ready
                                          |
        DTR   Data Terminal Ready   4 --> 8     DCD   Carrier Detect
        GND   Signal Ground         5 --- 7     GND   Signal Ground
        DCD   Carrier Detect        1
                                    |
        DSR   Data Set Ready        6 <-- 20    DTR   Data Terminal Ready
        RTS   Request To Send       7 --> 5     CTS   Clear To Send
        CTS   Clear To Send         8 <-- 4     RTS   Request To Send
        (RI   Ring Indicator        9 not needed)
(Tak, piny 2 i 3 w złączkach DB9 i DB25naprawdę mają przeciwne znaczenie).

Jeśli nie używasz pełnego kabla bezmodemowego, możesz być zmuszony do zrobienia następującej sztuczki: po stronie komputera połącz ze sobą RTS i CTS, oraz DSR,DCD i DTR. W ten sposób jeśli komputer zażyczy sobie sygnału uzgadniania, otrzyma go, od samego siebie.

Teraz, kiedu masz już dobry kabel podłącz terminal do komputera. Jeśli możesz powiedz terminalowi aby ignorował sygnały sterujące modeme. Spróbuj ustawić następujące parametry terminala: prędkosć 9600 bps, 8bitów danych, 1 bit stopu, brak bitu parzystości.

7.2 Konfigurowanie getty.

Zainstaluj getty_ps zgodnie z instrukcjami zawartymi w rozdzaiale 7.2. Dodaj do pliku /etc/gettydefs pozycję opisującą twój terminal:

# 38400 bps Dumb Terminal entry
DT38400# B38400 CS8 CLOCAL # B38400 SANE -ISTRIP CLOCAL #@S @L login: #DT38400

# 19200 bps Dumb Terminal entry
DT19200# B19200 CS8 CLOCAL # B19200 SANE -ISTRIP CLOCAL #@S @L login: #DT19200

# 9600 bps Dumb Terminal entry
DT9600# B9600 CS8 CLOCAL # B9600 SANE -ISTRIP CLOCAL #@S @L login: #DT9600

Jeśli chesz możesz w zachęcie do sysytemu wyświetlać różne interesujące informacje. W moich przykładach wyświetlana jest nazwa systemu i nazwa linii. Możesz dodać inne rzeczy:

       @B    Aktualna (sprawdzona w momencie napotkania @B ) prędkość bps.
       @D    Aktualna data w formacie MM/DD/YY.
       @L    Linia szeregowa do któej przyłączone jest getty.
       @S    Nazwa systemu (komputera).
       @T    Aktualny czas, w formacie HH:MM:SS (24-godziny).
       @U    Liczba aktualnie przcujących użytkowników. Jest to liczba
             pozycji w pliku /etc/utmp o niezerowym polu ut_name.
       @V    Warość stałej VERSION, zdefiniowanej w plkiku ustawień
             standardowych.
       Aby wyświetlić pojedynczy znak @ musisz napisac '\@\ lub '@@'.

Po zmodyfikowaniu /etc/gettydef możesz się upewnić, że składnia pliku jest poprawna wydając polecenieL

linux# getty -c /etc/gettydefs

Każdemu z istniejących portów szeregowych można przydzielić mnóstwo parametrów. Umieszcza się je w odzielnych plikach, po jednym dla każdego z portów. Każdy proces uugetty będzie korzystał z parametrów zawartych w pliku /etc/conf/uugetty, a z /etc/conf.uugetty.ttySN będzie korzystał jedynie proces obsługujący port ttySN. Przykładowe pliki z opcjami można znaleźć w źródłach pakietu getty_ps, który jest dostarczany niemal z każdą dystrybucją. Aby aoszczędzić miejsca nie prezentujemy ich tutaj. Pmiętaj, że jeśli korzystasz z getty w wersji starszej niż 2.0.7e, lub nie stosujesz się do zasad FSSTND, to domyślny plik konfiguracyjny będzie nosił nazwę /etc/default/conf.uugetty. Mój plik /etc/conf.uugetty.ttyS3 wygląda następująco:

        # sample uugetty configuration file for a Hayes compatible modem to allow
        # incoming modem connections
        #
        # alternate lock file to check... if this lock file exists, then uugetty is
        # restarted so that the modem is re-initialized
        ALTLOCK=cua3
        ALTLINE=cua3
        # linia, którą należy zainicjować
        INITLINE=cua3
        # timeout po jakim nalezy się rozłaczyć jeśli nie ma ruchu
        TIMEOUT=60
        # ciąg znaków konfigurujący modem 
        # format: <oczewiname> <dowyslania> ... (sekwencja pogawedki)
        INIT="" AT\r OK\r\n
        WAITFOR=RING
        CONNECT="" ATA\r CONNECT\s\A
        #niniejszy wiersz wprowadza opóźnienie przed wysłaniem 
        #informacji (login banner)
        DELAY=1
        #DEBUG=010
        

Aby uruchomić getty na porcie szeregowym wprowadż odpowiednie zmiany do pliku /etc/inittab (podmieniając odpowiednio informacje, tak aby pasowały do twojego systemu):

        S1:456:respawn:/sbin/uugetty -d /etc/default/uugetty.ttyS3 ttyS3 F115200 vt100
        

Zrestartuj init:

        linux# init q 
        

W tym momencie powinieneś zobaczyć zachętę wejścia do systemu. Być może musisz wcisnąć wpierw kilkakrotnie <return>, aby zwrócić na siebie uwagę terminala.

7.3 Uwagi o konfiguracji komputera PC jako terminala

Wielu ludzi konfiguruje swoje komputery PC do pracy jako terminal przyłączony do serwera z Linux-em. Stare komputery 8088 lub 286 są do tego celu doskonałe. Wszystko co potrzebujesz to dyskietka startowa z DOSem i program komunikacyjny emulujący terminal. Do tego celu bardzo dobrze nadaje się kermit. Skompilowane wersje kermita niemal dla każdego systemu operacyjnego można znaleźć pod adresem http://www.columbia.edu:/kermit. Do tego celu nadają się również takie dosowe programy jak telix czy procomm. Pamiętaj aby prawidłowo skonfigurować program komunikacyjny, wprowadź poprawny numer portu.

8. Czy mogę używać więcej niż 2 porty szeregowe?

Nie musisz czytać tego rozdziału jeśli nie chcesz używać więcej niż 2. portów szeregowych (pod warunkiem, że nie masz karty wieloportowej).

Jeśli masz jeszcze jakiś wolny port szeregowy, to odpowiedź brzmi: tak, możesz go wykorzystać.

Liczba wykorzystanych portów szeregowych jest ograniczona liczbą dostępnych przerwań IRQ i adresów portów We/Wy.Jest o ograniczenie szyny komputera PC, nie Linux-a. Każde urządzenie szeregowe musi mieć przydzielone własne przerwanie IRQ i adres portu. Urządzeniem szeregowym może być port szeregowy, wewnętrzny modem lub karta wieloportowa.

Wieloportowe karty portów szeregowych są projektowane w specjalny sposób, który umożliwia posiadanie wielu portów szeregowych, które współdzielą jedno przerwanie IRQ. Linux pobiera z nich dane wykorzystując do tego rózne adresy dla każdego z portów na karcie.

8.1 Wybór przerwań dla urządzeń szeregowych.

Twój komputer standardowo ma przerwanie IRQ=4 przydzielone portom ttyS0, ttyS2 i IRQ=3 do portów ttyS1, ttyS3. Aby skorzystać z więcej niż jednego urządzenia szeregowego będziesz musiał dla niego przeznaczyć oddzielne przerwanie IRQ. Dobrym pomysłem jest przydzielenie przerwania wykorzystywanego przez port równoległy. Twój PC jest zwykle konfigurowany w ten sposób, że portom równoległym przydzielane są przerwania 5 i 7. Bardzo rzadko używa się dwóch portów równoległych. Co więcej możesz przydzielić przerwanie poru rónoległedo do portu szeregowego i nadal korzystać z portu równoległego. Zmiany przerwań IRQ i innych parametrów można wykonać za pomocą programu setserial. Czasami możesz być zmuszony do zmiany ustawień mikroprzęłączników, zobacz w dokumentacji karty.

Będziesz musiał tak to wszystko skonfigurować, aby każde z urządzeń szeregowych miało jedno i tylko jedno przerwanie. Poniżej moja konfiguracja - umieszczona w pliku /etc/rc.d/rc.local :

                /etc/setserial /dev/cua0 irq 3          # myszka
                /etc/setserial /dev/cua1 irq 4          # terminal Wyse 
                /etc/setserial /dev/cua2 irq 5          # Zoom modem 
                /etc/setserial /dev/cua3 irq 9          # USR modem
        

Standardowe przydziały IRQ:

              IRQ  0    Timer channel 0
              IRQ  1    Keyboard
              IRQ  2    Cascade for controller 2
              IRQ  3    Serial port 2
              IRQ  4    Serial port 1
              IRQ  5    Parallel port 2
              IRQ  6    Floppy diskette
              IRQ  7    Parallel port 1
              IRQ  8    Real-time clock
              IRQ  9    Redirected to IRQ2
              IRQ 10    not assigned 
              IRQ 11    not assigned
              IRQ 12    not assigned
              IRQ 13    Math coprocessor
              IRQ 14    Hard disk controller 1
              IRQ 15    Hard disk controller 2
        

Nie ma Najlepszego wyboru przerwań IRQ. Po prostu upewnij się, że nie jest wykorzystywane przez kilka urządzeń jednocześnie. Dobrym wyborem jest jedno z 2, 3, 4, 5 i 7. ``not assigned'' (nie przydzielone) oznacza, że aktualnie żadne urządzenie go nie używa. Pamiętaj, że IRQ 2 to to samo co IRQ 9. Możesz je nazwyac jak chcesz, sterownik portów szeregowych jest bardzo wyrozumiały. Jeśli posiadasz kartę z 16-to bitową szyną, możesz wtedy dodatkowo korzystać z przerwań 10,11,12 i 15.

Upewnij się, że nie korzystasz z przerwańIRQ 0, 1, 6, 8, 13 lub 14. Są wykorzystywane przez płytę główną. Bedzie bardzo nieszczęśliwa jeśli będziesz próbował zabrać jej przerwanie. Jak już wszystko zrobisz, sprawdź ponownie, zobacz /proc/interrupts i upewnij się, że nie ma konfliktów.

8.2 Ustawianie adresów urządzeń szeregowych.

Następnie musisz ustawić adres portu. Sprawdź podręcznik do karty, gdzie są opisane ustawienia mikroprzełączników. Podobnie, jak w przypadku przerwań, jeden adres może być wykorzystywany tylko przez jedno urządzenie. Porty szeregowe są zwykle skonfigurowane dla następujących adresów:

        ttyS0 address 0x3f8
        ttyS1 address 0x2f8
        ttyS2 address 0x3e8
        ttyS3 address 0x2e8

Wybierz adresy dla każdegu urządzenia szeregowego, następnie odpowiednio ustaw mikroprzełączniki. Ja mam swój modem na porcie ttyS3, mysz na ttyS0 i terminal na ttyS2.

Kiedy zrestartujesz system, Linux powinien zobaczyć porty szeregowe pod adresami, które ustawiłeś. IRQ raportowane podczas startu mogą nie odpowiadać tym ustawionym przez mikroprzełączniki na karcie. Nie martw się tym. Linux podczas startu nie wykonuje rozpoznania przerwań IRQ, ponieważ jest to trudne i może być mylne. Aby powiedzić Linux-owi, które przerwanie jest używane przez dany port trzeba skorzystać z programu setserial.

9. Jak ustawić port szeregowy na większe prędkości? Jaką prędkość powinienem stosować do mojego modemu?

Ta część powinna pomóc w doborze prędkości z jaką modem komunikuje się z programem lub getty.

Przetestuj swoje ustawienia uruchamiając setserial z wiersza komend i jeśli wszystko pracuje poprawnie umieść odpowiednie polecenia w pliku /etc/rc.d/rc.serial lub w /etc/rc.d/rc.local, wtedy będą wykonywane przy starcie systemu. Ja ustawiam prędkość 115200 portu ttyS3 poleceniem:

        /sbin/setserial /dev/cua3 spd_vhi
        

Upewnij się, że korzystasz z odpowiedniej ścieżki dostępu do programu setserial i poprawnych nazw urządzeń. Możesz sprawdzić aktualne ustawienia portu szeregowego wydając polecenie

        setserial -a /dev/ttyS3
        

10. Narzędzia i programy komunikacyjne.

Jak już wszystko zacznie działać, możesz przyjżeć się tym bardziej zaawansowanym programom. Jeśli nie ma ich w twojej dystrybucji, wszystkie są dostępne w standardowych archiwach FTP.

11. Sztuczki i chwyty.

Kilka sztuczek, które mogą Ci się przydać ...

11.1 Kermit i zmodem.

Abu korzystać z protokołu zmodem w programie kermit, dodaj do pliku .kermrc następujace dane:

        define rz !rz < /dev/cua3 > /dev/cua3
        define sz !sz \%0 > /dev/cua3 < /dev/cua3
        
Pamiętaj o podaniu prawidłowego portu, tego, do którego przyłączone jest modem. Nastepnie w wierszu zachęty programu kermit po prostu napisz rz lub sz <filename>.

11.2 Automatyczne ustawinie rodzaju terminala.

Aby automatycznie ustawiac typ terminala dla wszystkich sesji prowadzonych przez daną linie, dodaj do pliku /etc/inittab odpowiednią informację. Gdybym miał terminala vt100 przyłączony do portu ttyS1 dodałbym opcję wt100 do wiersza opisującego tę linię:

        S1:456:respawn:/sbin/getty ttyS1 DT9600 vt100
        

Możesz również korzystać z programu tset, który potrafi określić rodzaj terminala i nie jest zależny od żadnych ustawień domyślnych.

11.3 Kolorowe ls przy połączeniach przez porty szeregowe.

Jeśli użycie kolorów ls bruździ w ustawieniach terminala trzeba to wyłączyć. ls --color i ls --colour wykorzystuje kolory. Niektóre dystrybucje korzystają domyślnie z "kolorowego" ls. Sprawdz /etc/profile i /etc/csh.cshrc czy nie znajdziesz tam aliasów dla ls. Możesz również sam zrobić alias ls na ls --no-color, jeśli nie chcesz zmieniać domyślnej konfiguracji systemu.

11.4 Drukowanie na drukarce przyłączonej do terminala.

Istnieje program o nazwie vtprint, który potrafi to zrobić. ftp://ftp.sdsu.edu/pub/vtprint lub http://www.sdsu.edu/~garrett.

Inny program, który to umożliwia nosi nazwę xprt. ftp://sunsite.unc.edu/pub/Linux/system/printing.

11.5 Czy Linux potrafi automagicznie skonfigurować urządzenia szeregowe?

Tak. Aby Linux mógł rozpoznać i skonfigurować urządzenie szeregowe dodaj do pliku startowego (/etc/rc.d/rc.local lub /etc/rc.d/rc.serial) następujące polecenie:

        /sbin/setserial /dev/cuaN auto_irq skip_test autoconfig
        
Zrób to dla każdego portu, który chcesz skonfigurować. Pamiętaj aby podać nazwę pliku urządzenia, które rzeczywiście istnieje w twoim komputerze.

Uwagi na temat kart wieloportowych.

Informacje o adesach portów i przerwaniach dla kart wieloportowych znajdziesz w pliku rc.serial w pakiecie setserial. Zawiera mnóstwo szczegółów na temat kart wieloportowych, włączając adresy portów i nazwy urządzeń.

11.6 Korzystanie z konsoli przez port szeregowy.

W numerze 36 znajdzesz artykuł Linux Journal, http://www.ssc.com/lj/issue36/index.html wyjaśniający w jaki sposób korzystać z konsoli przez port szeregowy. Niestety listy wysyłane do autora powracają. Mam nadzieje, że wkrótce artykuł pojawi się w serwisie Linux Journal pod podanym wcześniej adresem.

11.7 Wyższe prędkości transmisji.

Jeśli w systemach z dyskami (E)IDE zauwazysz niskią szybkość transmisji przez porty szeregowe i bledy (overruns) portu szeregowego skorzystaj z programu hdparm. Jest to narzędzie, które umożliwia modyfikacje parametrów urządzeń (E)IDE, włączając odblokowywanie innych przerwań w czasie trwania przerwani IRQ dysku. Zwiększy to czułość systemu i ułatwi mu szybszą reakcję na wydarzenia eliminując błędy występujące na porcie szeregowym (overruns). Pamiętaj aby bardzo dokładnie przeczytać dokumentacje programu ponieważ niektóre sterowniki/dyski nie lubią takich ustawień i mogą zniszczyć system plików znajdujący sie na dysku.

Zwróć również uwagę na narzędzie o nazwie irqtune umożliwiające zmianę prirytetów przerwań IRQ poszczególnych urządzeń, na przykład portu szeregowego, na którym pracuje Twój modem. Może to z zwiększyć szybkość przesyłania informacji przez port szeregowy twojego komputera. Dokumnet FAQ dotyczący irqtune jest dostępny pod adresem http://www.best.com/~cae/irqtune.

12. Krok dalej.

Nie musisz czytać tego rozdziału, jego celem jest wprowadzenie czytelnika w świat telekomunikacji i wnętrze UNIXa.

12.1 Co to są pliki blokady (lockfiles)?

Plik blokady to zwykły plik, którego istnienie po prostu oznacza, że dane urządzenie jest w użyciu. Przechowywane są w katalogu /usr/spool/uucp lub /var/lock. Pliki blokady pod Linux-em noszą nazwę LCK..name. name oznacza nazwę urządzenia lub nazwą komputera w formie UUCP. Pewne procesy tworzą pliki blokady aby mieć wyłączny dostęp do urządzeń. Np. jeśli będziesz dwonił swoim modemem pojawi się plik blokady mówiący innym procesom, że ktoś już używa tego urządzenia. Pliki blokady zwierają zwykle PID procesu zajmującego zasób. Większość programów odczytuje pliki blokady i sprawdza czy proces o podanym w tym pliku identyfikatorze PID nadal istnieje. Jeśli sprawdzenie wykaże, że taki proces istnieje, czyli plik blokady jest ważny, to proces który sprawdzał plik blokady powinien zakończyć działanie. Jeśli taki proces już nie istnieje, niektóre programy usuwają przeterminowany plik blokady i korzystają z urządzenia zakładając nowy własny plik blokady. Inne programy po prostu kończą działanie informując Cię, że urządzenie jest w użyciu.

12.2 ``baud'' vs. ``bps''.

``baud'' i ``bps'' są prawdopodobnie najczęściej niepoprawnie używanymi terminami w branży komputerowo/telekomunikacyjnej. Wiele osób używa tych terminów zamiennie, podczas gdy każdy z nich oznacza coś innego!

baud

Prędkość modulacji (baud rate) jest miarą ile razy na sekundę zmienia się sygnał wysyłany przez modem (modulator-demodulator). Spotykane zwykle prędkości wynoszą 50, 75, 110, 300, 600, 1200 i 2400. Większość szybkich modemów działa z prędkością 2400. Ze względu na ograniczenia linii telefonicznych ciężko jest uzyskać prędkości większe niż 2400 i działają tylko w specyfcznych warunkach. Nazwa ``baud'' pochodzi od nazwiska Emila Baudot, wynalazcy asynchronicznego telegrafu.

bps

Prędkość bps jest miarą przesyłane jinformacji w jednostce czasu (bity na sekunde). Standardowe prędkości bps wynoszą 50, 75, 110, 300, 1200, 2400, 9600, ... 115200. Modemy z kompresją V42bis (kompresja 4:1) posiadają teoretyczną prędkość do 115200 bps. O tym zwykle myslą ludzie, kiedy używają mylnie pojęcia ``baud''.

Skoro szybkie modemy dzialają z prędkościs 2400 bodów, w jaki sposów przesyłają informacje z prędkościa 14400 bps? Modemy uzyskują zależność bps > bod-y dzięki kodowaniu w jednym bodzie kilku bitów. Jeśli 2 lub więcej bitów jest zakodowanych w jednym bodzie, prędkość bps przekracza liczbę bodów na sekunde. Jeśli twój modem łączy się z prędkością 14400 to znaczy, że przesyła 6 bitów w jednym bodzie.

Jak powstało całe to zamieszanie? Dawniej, kiedy dzisiejsze przestarzałe modemy były jednymi z najszybszych, prędkośc bps była zwykle równa ilości bodów na sekunde. Jeden bod zawieral jeden bit. Ludzie używali tych nazw wymiennie, oba pojęcia miały te ame wartości. Np. modem o prędkości 300 bps wysyłał 300 bodów na sekunde. Wszystko się zmieniło, kiedy pokazały się szybsze modemy i prędkość przesyłanych bitów przekroczyła prędkość wysylanych bodów.

12.3 Co to jest UART? Jaki ma wpływ na osiągi portu szeregowego?

UART ((Universal Asyncronous Receiver Transmitter) są układami znajdującymi się na karcie portów szeregowych. Ich zadaniem jest zamiana danych na bity, przesyłanie bitów przez linię szeregową i odbudowa danych na podstawie otrzymanych bitów. Układy UART operują na informacji podzielonej na bajty, który może być również reprezentacją znaku ASCII.

Powiedzmy, ze posiadasz terminal przyłączony do twojego PC. Kiedy wprowadzasz znak, terminal przekazuje go do nadajnika (również pewnego rodzaju układu UART). Nadajnik przesyła ten bajt przez linię szeregową, bit po bicie z określoną prędkościa. Po stronie PC, odbierający układ UART pobiera kolejne bity i buduje z nich bajty, które wstawia kolejno do bufora.

Istnieją dwa różne rodzaje układów UART. Powszechnie znane głupe 8250 i 16450, oraz zawierające kolejkę FIFO, sprytniejsze 16550A. Aby zrozumieć róznicę przestudiujmy co się dzieje, kiedy układ UART wysyła lyb otrzymuje bajt informacji.

Układ UART sam z siebie nie potrafi nic zrobić. Tylko wysyła i odbiera bity. Za akżdym razem, kiedy jeden bajt został wysłany lub odebrany CPU otrzymuje sygnał przerwania od urządzenia szeregowego. Wtedy procesor przenosi otrzymany bajt z bufora układu UART gdzieś do pamięci, lub przekazuje układowi UART do wysłania kolejny bajt. Układy 8250 i 16450 posiadają bufor o rozmiarze jednego bajtu. To oznacza, że za każdym razem, kiedy jeden bajt jest wysłany lub odebrany procesor otrzymuje sysgnał przerwania. Przy małych prędkościach wszystko jest w porządku. Lecz przy wyższych prędkościach, procesor jest tak zajęty obsługą układu UART, że nie ma czasu na inne zadania. W niektórych przypadkach procesor nie nadąża z samą obsługą układu UART i bajt zawarty w buforze ukladu UART jest nadpisywany (niszczony) ponieważ został tam umieszczony następny bajt, zanim poprzedni został przeniesiony w bezpieczne miejsce.

To jest sytuacja, w której przydaje się układ 16550A. Ten układ posiada bufor FIFO o rozmiarze 16 bajtów. To znaczy, że może wysłać lub odebrać 16 bajtów, zanim jest zmuszony wysłać do procesora sygnał przerwania. Poza tym prócz tego ,ze sam układ może poczekać, to jeszcze procesor może przenieść za jednym razem wszystkie 16 bajtów. Choć poziom generowania przerwań rzadko jest równy 16, jest to nadal ogromna przewaga nad innymi układami UART, posiadajacymi 1-no bajtowy bufor. Procesor otrzymuje mnej przerwań i ma czas na obsługę innych zadań. Dane nie są gubione i wszyscy są szczęśliwi. (Istnieją jeszcze układy 16550, lecz są traktowane tak, jak 16450 ze względu na blędy jakie zawierają).

Zasadniczo układy 8250 i 16450 powinny się sprawować poprawnie do prędkości 38400 bps. Przy wyższych prędkościach możesz mieć okazję zobserwować utratę danych i zmiejszenie czasu odpowiedzi przy pracy zdalnej. Inne systemy operacyjne (nie sprzeczajmy się co to jest sytem operacyjny), jak DOS nie są wielozadaniowe więc mogą sobie lepiej radzić z układami 8250 lub 16450. Dlatego niektórzy nie widzą utraty danych, zanim nie przesiądą się na Linux-a.

Inteligentne karty wieloportowe nie posiadają układów UART, lecz układy DSP, które wykonują dodatkowe buforowanie i sterowanie jescze bardziej odciążając procesor. Np Cyclades Cyclom i Stallion EasyIO korzystają z układu Cirrus Logic CD-1400 RISC.

Pamiętaj, że głupie układy UART nie są złe. Nie są wystarczająco dobre do dużych prędkości. Nie powinieneś mieć żadnych kłopotów podłączająć mysz lub terminal do portu pracującego na takim układzie. Lecz w przypadku modemów o wysokiej prędkości 16550A jest koniecznością.

Karty z układami 16550 możesz kupić niewiele drożej, zapytaj się swego sprzedawcy jakiego rodzaju układy znajdują się na karcie. Lub jeśli chcesz unowocześnić swoją kartę wystarczy nabyć układy 16550A i włożyć w miejsce starych 16450. Mają zgodny rozkład nóżek. Część kart ma montowane układy 16450 na specjalnych podstawkach, jeśli nie możesz sprzedać starą kartę i kupić nową. Prawdopodobnie zaoszczędzisz sobie w ten sposów bielu kłopotów. Ich cena nie powinna przekroczyć US$ 50.

12.4 Jaka jest naprawdę różnica między urządzeniami /dev/cuaN itt>/dev/ttySN devices?

Różnica polega na sposobie otwierania tych urządzeń. Urządzenia wejściowe /dev/ttySN są otwierane w trybie blokowania aż do sygnału CD (ktoś się właśnie połączył). Więc jeśli ktoś chce korzystać z urządzenia /dev/cuaN nie ma konfliktu z programem nasłuchującym urządzenie /dev/ttySN.

To rozróżnienie jest potrzebne aby umożliwić przez ten sam modem połączenia przychodzace (ttySN) i wychodzące (cuaN).

13. Radzenie sobie z kłopotami.

13.1 Cały czas pojawia się komunikat ``line NNN of inittab invalid''.

Upewnij się, że stosujesz odpowiednia składnie w pliku /etc/inittab zgodną z twoją wersja programu init. Różne wersje tego programu obecne w świecie Linux-a mają różną składnię. Również upewnij się, że używasz poprawnej składni dla twojej wersji getty.

13.2 Kiedy próbuję zadzwonić dostaję komunikat ``/dev/cuaN: Device or resource busy''.

Ten problem może się pojawiać, gdy DCD i DTR nie są ustawione poprawnie. DCD powinno być włączone tylko wtedy, gdy jest rzeczywiste połączenie (gdy ktoś do ciebie zadzwonił i w danej chwili wykorzystuje modem i port szeregowy), a nie kiedy getty nasłuchuje na porcie. Sprawdź czy twój modem jest skonfigurowany, aby włączać DCD tylko podczas trwania połączenia. DTR powinno być włączone zawsze, gdy coś sprawdza lub nasłuchuję linię, jak getty, kermit lub inny program komunikacyjny.

Inną powszechną przyczyną omunikatu ``device busy'' (urządenie zajęte) jest skonfigurownie portu szeregowego w taki sposob, że używa przerwania IRQ przydzielonego do innego urządzenia. Podczas inicjowania portu sterownik, pyta się Linux-a o pozwolenie na wykorzystanie przerwania sprzętowego. Linux pamięta, które przerwanie zostało mu przydzielone i jeśli twoje przerwanie zostało już przydzielone, urządzenie (np. port szeregowy) nie bedzie mogło zostać prawidłowo zainicjowane. Urządzenie nie ma za bardzo jak powiedzieć Ci o tym, poza przypadkiem kiedy próbujesz go użyc. Przekazuje wtedy błąd ``device busy''. Sprawdź przerwania wszystkich swoich kart (szeregowych, sieciowych, SCSI, itd.). Szukaj konfliktów przerwań IRQ.

13.3 Cały czas otrzymuję ``Id SN respawning too fast: disabled for 5 minutes''.

Upewnij się, że Twój modem jest skonfigurowany poprawnie. Przyjżyj się rejestrom E i Q. Przyczyną może być pogawędka modemu z programem getty.

Upenij się ,że poprawnie wywołujesz getty w pliku /etc/inittab/. Używanie błędnej składni lub nieporawnych nazw urządzeń jest przyczyną licznych kłopotów.

Upewnij się, że /etc/gettydefs ma poprawną składnie. W tym celu wydaj polecenie:

        linux# getty -c /etc/gettydefs
        

Przyczyna może leżeć w niepoprawnej inicjalizacji programu uugetty. Patrz pytanie ``getty lub uugetty nadal nie pracuje poprawnie''.

13.4 Porty szeregowe są powolne, lub mogą przesyłać informacje tylko w jedną strone.

Prawdopodobnie konflikt IRQ. Upewnij się, żę IRQ nie są wspólne. Sprawdź wszystkie karty (szeregowe, sieciowe, SCSI, itd.). Upewnij się, że ustawienia mikroprzełączników i parametry ustawiane przez setserial są poprawne dla wszystkich urządzeń szeregowych. Sprawdź /proc/interrupts i /proc/ioports w poszukiwaniu konfliktów.

13.5 Moj modem blokuje się po tym, jak ktoś się rozączy, lub uugetty nie uruchimi się ponownie.

Przyczyna może leżeć w tym, że kiedy spada sygnał DTR twój modem się nie zeruje. Widziałem jak diody RD i SD na moim modemie szalały, kiedy cos takiego mi się zdarzyło. Twój modem musi się zerować. Wiekszość modemów zgodnych z Hayes wymaga ustawienia &D3, lecz w moim USR Courier musiałem ustawić &D2 i S13=1. Sprawdź w dokumnetacji modemu.

13.6 Mam terminal podłączony do mojego PC, lecz po wpisaniu identyfikatora blokuje się.

Prawdopodobnie pozycja dotycząca tego terminala w pliku /etc/gettydefs nie zawiera opcji CLOCAL. I prawdopodobnie nie używasz pełnego kabla bezmodemowego (full null modem cable). Musisz ustawić opcję CLOCAL, dzieki której Linux ignoruje sygnały strujące modemem. To powinno wyglądać mniej więcej tak:

# 38400 bps Dumb Terminal entry
DT38400# B38400 CS8 CLOCAL # B38400 SANE -ISTRIP CLOCAL #@S @L login: #DT38400

# 19200 bps Dumb Terminal entry
DT19200# B19200 CS8 CLOCAL # B19200 SANE -ISTRIP CLOCAL #@S @L login: #DT19200

# 9600 bps Dumb Terminal entry
DT9600# B9600 CS8 CLOCAL # B9600 SANE -ISTRIP CLOCAL #@S @L login: #DT9600

13.7 Moj modem traci dane przy większych prędkościach.

Jeśli próbujesz uruchomić swój modem z prędkością co najmniej 19200 bps i nie posiadasz układów UART 16550A, powinieneś je wymienić. Patrz rozdział Co to jest UART.

13.8 Podczas startu Linux nie raportuje portów szeregowych w sposób jaki je ustawiłem.

To prawda. Linux nie wykonuje podczas startu rozpoznania IRQ, jedynie strawdza istnienie urządzeń szeregowych. Dlatego nie przejmuj się tym co wypisuje podczas startu na temat IRQ, ponieważ po prostu zakłada standardową konfiguracje. Dzieje się tak ponieważ wykrywanie przerwań IRQ nie jest pewne i mogą być odczytane niepoprawnie.

Dlatego pomimo, że moj ttyS2 jest skonfigurowany na IRQ 5 nadal widzę:

        Jan 23 22:25:28 misfits vmunix: tty02 at 0x03e8 (irq = 4) is a 16550A
        

Musisz powiedzieć Linux-owi o przerwaniach IRQ, korzystając z programu setserial. Po uruchomieniu systemu możesz zajżeć do pliku /proc/interrupts i zobaczyć, jak zostały przydzielone.

13.9 rz i/lub sz nie działają kiedy pracuje na moim Linux-ie przez modem.

Jeśli przy próbie transferu plików Linux szuka urządzenia /dev/modem sprawdź zawartość plików /etc/profile i /etc/csh.cshrc. W niektórych dystrybucjach (szczególnie w Slackware) może tam być zdefiniowana garść aliasów, które wywołują całe zamieszanie. Poraw je lub po prostu usuń.

13.10 Widzę na ekranie śmiesznie wyglądające znaczki.

Tak się dzieje, gdy wyślesz na konsolę wirtualną dane binarne, lub czasami przy połączeniach przez porty szeregowe. Jednym ze sposobów na przywrócenie normalengo wyglądu ekranu jest napisanie echo ^v^[c lub:

 linux% echo
        <ctrl>v<esc>c 

13.11 getty lub uugetty nadal nie dziala.

getty_ps posiada opcję DEBUG. Zmień plik konfiguracyjny /etc/conf.{uu}getty.ttySN i dodaj opcję DEBUG=NNN. NNN może przyjmować kombinacje podanych poniżej wartości ( w zależności o tego jakie informacje chcesz otrzymywać):

        D_OPT   001            ustawianie opcji
        D_DEF   002            przetwarzanie domyśłnych plików konfiguracyjnych
        D_UTMP  004            obsługa utmp/wtmp
        D_INIT  010            inicjowanie liniii (INIT)
        D_GTAB  020            przetwarzanie pliku gettytab
        D_RUN   040            inna diagnostyka czasu wykonania
        D_RB    100            odpluskwianie obcji ringback
        D_LOCK  200            obsługa pliku blokady
        D_SCH   400            obsługa zaplanowanych zdarzeń
        D_ALL   777            wszystko
        

Na początek mozna ustawić DEBUG=010.

Jeśli korzystasz z syslogd, informacje odpluskwiające będą pojawiać się w plikach dzienników. Jeśli syslogd nie jest uruchomiony komunikaty dotyczące odpluskwiania getty będa zachowywane w /tmp/getty:ttySN, a dotyczące uugetty w pliku /tmp/uugetty:ttySN oraz w pliku /var/adm/getty.log. Przypatrz się tej informacji i postaraj się zrozumieć co się dzieje. Prawdobodobnie będziesz musiał dostroić kilka parametrów w plikach konfiguracyjnych i ponwnie skonfigurwać modem.

Możesz spróbować mgetty. Część ludzi miała z nim więcej szczęścia.

14. Inne źródła informacji.

15. Współpraca przy tworzeniu tego dokumentu.

Nie było możliwe napisania tego dokumentu samemeu. Jego większa część została napisana przeze mnie, przepisałem również wiele cudzych poprawek aby zachować ciągłość schematu i stylu. Dziękuje wszystkim, którzy mi pomogli lub skomentowali ten dokument. Pełna lista adresów byłaby abyt długa (ponad 50 adresów). Sczególne podziękowania należą sie Tedowi T'so, który cierpliwie odpowiadał na pytania dotyczące urządzeń szeregowych, Krisowi Glesonowi, który opiekuje się pakietem getty_ps i Gertowi Doeringowi, opiekunowi mgetty.

16. Od tłumacza

Zdaje sobie sprawę, że niniejsze tłumaczenie zawiera mnóstwo błędów. Niestety nie jestem w stanie dokładnie sprawdzić całego dokumentu i świadomie pozostawiam tę pracę czytelnikowi. Będę wdzięczny za wszelkie uwagi na temat tego dokumentu, wytykanie błędów, literówek, składni i wszelkie inne, które mogą przyczynić się do jego ulepszenia.

Wszelkie tego typu uwagi proszę przesyłać na adres piotr.pogorzelski@ippt.gov.pl

Inne przetłumaczone dokumenty można znaleźć na stronie http://www.jtz.org.pl/. Zapraszamy!.

piotr.pogorzelski@ippt.gov.pl.

Koniec Serial-JTZ, polskiego tłumaczenia Serial-HOWTO czy jak to się zwie. # # # #

Hosting by: Hurra Communications Sp. z o.o.
Generated: 2007-01-26 18:02:22