NAZWA¶
setserial - pobierz/ustaw informacje o porcie szeregowym
SKŁADNIA¶
setserial [ -abqvVWz ] device
[ parameter1
[ arg
] ] ...
setserial -g [ -abGv ] device1 ...
OPIS¶
Uwaga! To tłumaczenie może być nieaktualne!
setserial jest programem przeznaczonym do ustawiania i/lub raportowania
danych konfiguracyjnych związanych z portem szeregowym. Dane te
zawierają port I/O, numer IRQ, to czy klawisz break powinien być
interpretowany jako Secure Attention Key, itd.
Podczas normalnego bootowania, inicjalizowane są jedynie porty COM 1-4;
używane są przy tym domyślne wartości portów I/O i
IRQ. Aby zainicjalizować dodatkowe porty szeregowe, lub aby zmienić
konfiguracje portów 1-4, musisz użyć programu
setserial.
Zazwyczaj jest on wołany ze skryptu
rc.serial, który z kolei
jest normalnie uruchamiany z
/etc/rc.local.
Argument(y)
device określa, które urządzenie szeregowe ma
być skonfigurowane lub odpytane. Zazwyczaj przyjmuje postać
/dev/cua[0-3].
Bez parametrów,
setserial drukuje rodzaj portu np. 8250, 16450,
16550, 16550A), sprzętowy port I/O, sprzętową linię IRQ,
szybkość i niektóre flagi operacyjne.
Przy podanej opcji
-g, argumenty setserial są interpretowane jako
lista urządzeń, dla których należy wydrukować
charakterystykę.
Bez opcji
-g, pierwszy argument jest interpretowany jako urządzenie
do zmodyfikowania lub do wydrukowania charakterystyki, a dodatkowe argumenty
interpretowane są jako parametry, które powinny być
zaaplikowane do tego urządzenia.
W większości wypadków wymagane są uprawnienia
superużytkownika. Jednak kilka opcji portów mogą ustawiać
zwykli użytkownicy i opcje te zostaną zaznaczone jako wyjątki w
tym podręczniku.
OPCJE¶
Setserial przyjmuje następujące opcje:
- -a
- Podczas raportowania konfiguracji urządzenia
szeregowego, drukuj wszelkie dostępne informacje.
- -b
- Podczas raportowania konfiguracji urządzenia
szeregowego, drukuj zestawienie konfiguracji urządzenia, które
może być wystarczające do wypisania podczas procesu
bootowania w skrypcie /etc/rc.
- -G
- Wydrukuj informację o konfiguracji portu szeregowego w
postaci, która może zostać zassana do setseriala jako
argumenty linii poleceń.
- -q
- Bądź cicho. Setserial wydrukuje wtedy
mniej linii na wyjściu.
- -v
- Bądź gadatliwy. Setserial wydrukuje wtedy
dodatkowy status na wyjściu.
- -V
- Wyświetl wersję i zakończ.
- -W
- Dokonaj dzikiej inicjalizacji przerwań i zakończ.
Opcja ta nie jest istotna w jądrach po wersji 2.1.
- -z
- Zeruj flagi szeregowe przed rozpoczęciem ich
ustawiania. Jest to związane z automatycznym zachowywaniem flag
szeregowych z flagą -G.
PARAMETRY¶
Portowi szeregowemu można przyznać niżej wymienione parametry.
Wszystkie wartości argumentów są wartościami
dziesiętnymi, chyba że poprzedzone są "0x".
- port port_number
- Opcja port ustawia port I/O, jak opisano
wyżej.
- irq irq_number
- Opcja irq ustawia sprzętowe IRQ, jak opisano
wyżej.
- uart uart_type
- Opcja ta jest używana do ustawienia typu UART-a.
Dozwolone typy to none, 8250, 16450, 16550, 16550A, 16650, 16650V2,
16654, 16750, 16850, 16950, i 16954. Użycie typu UART none
wyłączy port.
Niektóre modemy wewnętrzne są oznaczone jako mające
"UART 16550A z buforem 1K" Jest to kłamstwo. Nie mają
w rzeczywistości UART-a kompatybilnego z 16550A; zamiast niego
mają UART kompatybilny z 16450 z 1K buforem odbiorczym dla
zapobiegania spustoszeniom u odbiorcy. Jest to istotne, ponieważ nie
mają one transmitującego FIFO. Dlatego nie są kompatybilne
z UART-em 16550A i proces autokonfiguracji zidentyfikuje je
prawidłowo jako 16450. Jeśli spróbujesz obejść
to, używając parametru uart, pojawią się
porzucone znaki podczas transmisji plików. UART-y te mają zwykle
inne problemy: parametr skip_test powinien być
również często podawany.
- autoconfig
- Gdy podano ten parametr, setserial poprosi
jądro o próbę automatycznego skonfigurowania portu
szeregowego. Port I/O musi być ustawiony prawidłowo; jądro
spróbuje określić typ UART, a dodatkowo jeśli podano
parametr auto_irq, Linux spróbuje też automatycznie
określić IRQ. Parametr autoconfig powinien być
podawany po parametrach port,auto_irq, i
skip_test.
- auto_irq
- Spróbuj podczas autokonfiguracji określić
IRQ. Właściwość ta nie zawsze musi dać
prawidłowy wynik; niektóre konfiguracje sprzętowe mogą
ogłupić jądro. Ogólnie, bezpieczniej jest nie
używać właściwości auto_irq, lecz raczej
samemu podawać wartość IRQ, używając parametru
irq.
- ^auto_irq
- Nie próbuj określić IRQ podczas
autokonfiguracji.
- skip_test
- Pomiń test UART podczas autokonfiguracji.
Niektóre modemy wewnętrzne nie mają UART-ów
kompatybilnych z National Semiconductor, lecz zamiast nich tanie imitacje.
Niektóre z nich nie wspierają w pełni trybu detekcji
loopback, którego używa jądro do upewnienia się, czy
pod podanym adresem jest rzeczywiście UART. Dlatego dla
niektórych modemów będzie trzeba podać ten parametr
aby można było zainicjalizować UART prawidłowo.
- ^skip_test
- Nie pomijaj testu UART podczas
autokonfiguracji.
- baud_base baud_base
- Opcja ta ustawia podstawową prędkość
(baud rate), która jest częstotliwością zegara
podzieloną przez 16. Normalnie jest to 115200, co jest zarazem
największą prędkością wspieraną przez
UART.
- spd_hi
- Gdy aplikacja żąda 38.4kb, używaj 57.6kb.
Parametr ten może być ustawiany przez nieuprzywilejowanego
użytkownika.
- spd_vhi
- Gdy aplikacja żąda 38.4kb, używaj 115kb.
Parametr ten może być ustawiany przez nieuprzywilejowanego
użytkownika.
- spd_shi
- Użyj 230kb gdy aplikacja żąda 38.4kb.
Parametr ten może być podawany przez użytkownika
nieuprzywilejowanego.
- spd_warp
- Użyj 460kb gdy aplikacja żąda 38.4kb.
Parametr ten może być podawany przez użytkownika
nieuprzywilejowanego.
- spd_cust
- Gdy aplikacja żąda 38.4kb, użyj ustawionego
dzielnika do ustawienia szybkości. W tym wypadku,
prędkość jest określona przez baud_base
podzielone przez divisor(dzielnik). Parametr ten może być
podawany przez nieuprzywilejowanego użytkownika.
- spd_normal
- Gdy aplikacja żąda 38.4kb, używaj 38.4kb.
Parametr ten może być ustawiany przez nieuprzywilejowanego
użytkownika.
- divisor divisor
- Opcja ta ustawia konfigurowalny dzielnik. Dzielnik
będzie używany gdy wybrana zostanie opcja spd_cust, a
port szeregowy będzie ustawiony przez aplikację na 38.4kb.
Parametr ten może być podawany przez nieuprzywilejowanego
użytkownika.
- sak
- Ustaw klawisz break na Secure Attention Key.
- ^sak
- wyłącz Secure Attention Key.
- fourport
- Skonfiguruj port jako kartę AST Fourport.
- ^fourport
- Wyłącz konfigurację AST Fourport.
- close_delay delay
- Podaj ilość czasu w setnych sekundy, podczas
których DTR powinien zostać w stanie obniżonym na linii
szeregowej po tym, jak urządzenie wydzwaniające (callout device)
jest zamykane, zanim blokowane urządzenie wdzwaniające się
(dialin device) znów podniesie DTR. Domyślną
wartością tej opcji jest 50 lub pół sekundy.
- closing_wait opóźnienie
- Podaj ilość czasu w setnych sekundy, podczas
której jądro powinno czekać na dane nadawane z portu
szeregowego podczas jego zamykania. Jeśli podane zostanie
"none", nie będzie oczekiwania. Jeśli podane zostanie
"infinite", jądro będzie czekać w
nieokreślenie długo na przybycie buforowanych danych.
Domyślnym ustawieniem jest 3000 lub 30 sekund opóźnienia.
Ta wartość domyślna jest wskazana dla większości
urządzeń. Jeśli wybrane zostanie długie
opóźnienie, to port szeregowy może się zawiesić
na długi czas podczas zamykania. Jeśli wybrany będzie zbyt
krótki czas, to istnieje ryzyko utraty danych. Jeśli
urządzenie jest bardzo wolne, jak w ploterze, to można
wybrać większe wartości.
- session_lockout
- Blokuj dostęp do portu wydzwaniającego
(/dev/cuaXX) na przestrzeni różnych sesji. To znaczy, że
gdy proces otworzy port, to żaden inny proces nie może go
już otworzyć, dopóki pierwszy proces go nie zamknie.
- ^session_lockout
- Nie blokuj portu wydzwaniającego na przestrzeni
sesji.
- pgrp_lockout
- Blokuj port wydzwaniający (/dev/cuaXX) na przestrzeni
różnych grup procesów. To znaczy, że gdy proces
otworzył port, to żaden inny proces z innej grupy procesów
nie może go otworzyć, dopóki ten proces go nie
zamknie.
- ^pgrp_lockout
- Nie blokuj portu wydzwaniającego na przestrzeni
różnych grup procesów.
- hup_notify
- Poinformuj proces blokowany na otwieraniu linii
wdzwaniającej, gdy proces skończy używać linii
wydzwaniającej (zarówno przez zamknięcie jej, lub przez
zawieszenie jej) przez zwrócenie (funkcji?) open EAGAIN.
Zastosowanie tego parametru odnosi się do getty, które są
blokowane na liniach wdzwaniających portów szeregowych.
Umożliwia to getty zresetowanie modemu (który może
mieć dzięki aplikacji używającej urządzenia
wydzwaniającego zmienioną konfigurację) przed ponownym
blokowaniem.
- ^hup_notify
- Nie informuj procesu blokowanego na otwieraniu linii
wdzwaniającej, gdy urządzenie wydzwaniające jest
odwieszone.
- split_termios
- Traktuj ustawienia termios używane przez
urządzenie wydzwaniające i ustawienia urządzenia
wdzwaniającego osobno.
- ^split_termios
- Używaj tej samej struktury termios do przechowywania
ustawień urządzenia wdzwaniającego i
wydzwaniającego.
- callout_nohup
- Jeśli dany port szeregowy jest otworzony jako
urządzenie wydzwaniające, nie odwieszaj tty gdy porzucony
zostanie CD.
- ^callout_nohup
- Nie pomijaj odwieszania tty gdy port szeregowy jest
otworzony jako urządzenie wydzwaniające. Oczywiście musi
być włączona flaga HUPCL termios, jeśli odwieszenie ma
się pojawić.
- low_latency
- Minimalizuj opóźnienia odbioru z urządzenia
szeregowego kosztem większego zaangażowania CPU. (Normalnie jest
5-10ms opóźnienie nim znaki zostaną przekazane dyscyplinie
linii.) Jest to domyślnie wyłączone, lecz niektóre
aplikacje czasu rzeczywistego mogą tego potrzebować.
- ^low_latency
- Optymalizuj efektywne przetwarzanie przez CPU znaków
szeregowych kosztem płacenia średniego opóźnienia
5-10ms nim znaki zostaną przetworzone. Jest to domyślne.
ROZWAŻANIA O KONFIGUROWANIU PORTÓW SZEREGOWYCH¶
Ważnym jest, by zauważyć iż setserial zwyczajnie mówi
jądru Linuksa, gdzie powinien spodziewać się znaleźć
port I/O i linie IRQ określonego portu szeregowego. Nie konfiguruje on
sprzętu! Aby to uczynić, musisz fizycznie zaprogramować
kartę szeregową, zazwyczaj przez przestawienie zworek, lub
przełączenie przełączników DIP.
Sekcja ta udostępni pewne wskazówki pomocne w decydowaniu jak
skonfigurować porty szeregowe.
"Standardowe powiązania MS-DOS" zostały pokazane niżej:
/dev/ttyS0 (COM1), port 0x3f8, irq 4
/dev/ttyS1 (COM2), port 0x2f8, irq 3
/dev/ttyS2 (COM3), port 0x3e8, irq 4
/dev/ttyS3 (COM4), port 0x2e8, irq 3
Z powodu ograniczeń w projekcie architektury szyn AT/ISA, normalnie linia
IRQ nie może być dzielona między dwoma lub więcej portami
szeregowymi. Jeśli spróbujesz tak zrobić, jeden lub obydwa z
tych portów staną się niedostępne, gdy spróbujesz
używać ich naraz. Ograniczenie to można obejść przez
specjalne wieloportowe karty szeregowe, które są skonstruowane do
dzielenia wielu portów szeregowych na jednej linii IRQ. Karty wspierane
przez Linuksa zawierają AST FourPort, Accent Async, Usenet Serial II,
Bocaboard BB-1004, BB-1008, i BB-2016, oraz HUB-6.
Wybór alternatywnej linii IRQ jest trudny, gdyż prawie wszystkie z
nich są już w użytku. Następująca tabela zawiera
wykaz "standardowych przydziałów MS-DOS" dla linii IRQ:
IRQ 3: COM2
IRQ 4: COM1
IRQ 5: LPT2
IRQ 7: LPT1
Wiele osób uważa, że IRQ 5 jest dobrym wyborem,
zakładając że w komputerze aktywny jest tylko jeden port
równoległy. Innym dobrym wyborem jest IRQ 2 (aka IRQ 9);
chociaż to IRQ jest czasem używane przez karty sieciowe i bardzo
rzadko przez karty VGA (dla przerwania vertical retrace). Jeśli twoja
karta VGA jest tak skonfigurowana, spróbuj to wyłączyć,
tak być mógł wykorzystać to IRQ dla innej karty. Nie jest
to niezbędne pod GNU/Linuksem i większością innych
systemów operacyjnych.
Jedynymi innymi dostępnymi liniami IRQ są 3, 4 i 7, a są one
prawdopodobnie używane przez inne porty szeregowe i równoległe.
(Jeśli twoja karta szeregowa ma 16-bitowy edge connector i wspiera
wyższe numery IRQ, to dostępne sa też IRQ 10, 11, 12 i 15.)
W maszynach klasy AT, IRQ 2 jest widziane jako IRQ 9 i Linux interpretuje je w
ten sposób.
Przerwania inne niż 2 (9), 3, 4, 5, 7, 10, 11, 12, i 15,
nie powinny
być używane, gdyż są przyznane innym elementom
sprzętowym i ogólnie nie mogą być zmieniane. Oto
"standardowe" przyznania:
IRQ 0 Kanał timera 0
IRQ 1 Klawiatura
IRQ 2 Kaskada kontrolera 2
IRQ 3 Port szeregowy 2
IRQ 4 Port szeregowy 1
IRQ 5 Port równoległy 2 (Zarezerwowane w PS/2)
IRQ 6 Stacja dysków
IRQ 7 Port równoległy 1
IRQ 8 Zegar czasu rzeczywistego
IRQ 9 Przekierowane na IRQ2
IRQ 10 Zarezerwowane
IRQ 11 Zarezerwowane
IRQ 12 Zarezerwowane (Pomocnicze urządzenie w PS/2)
IRQ 13 Koprocesor matematyczny
IRQ 14 Kontroler dysku twardego
IRQ 15 Zarezerwowane
KONFIGURACJA WIELOPORTOWA¶
Niektóre wieloportowe układy szeregowe, dzielące wiele
portów na jednym IRQ używają jednego lub więcej
portów do określania czy są tam aktywne porty, które
należy obsłużyć. Jeśli twój układ
wieloportowy obsługuje te porty, to powinieneś z nich
skorzystać aby zapobiec potencjalnym zablokowaniom, gdy zginie
przerwanie.
Aby ustawić te porty, musisz przekazać
set_multiport jako
parametr i wypisać za nim parametry wieloportowe. Parametry wieloportowe
przybierają postać podania sprawdzanego
portu,
maski,
wskazującej, które bity rejestru są znaczące oraz,
ostatecznie parametru
dopasowania, (match), określającego,
które bity znaczące tego rejestru muszą pasować, gdy nie
ma już niczego do zrobienia.
Można podać do czterech takich kombinacji. Pierwsze kombinacje powinny
być podawane przez ustawianie parametrów
port1,
mask1
i
match1. Następne przez ustawianie
port2,
mask2 i
match2, itd. Aby wyłączyć sprawdzanie wieloportowe,
ustaw
port1 na zero.
Aby obejrzeć bieżące ustawienia wieloportowe, podaj w linii
poleceń parametr
get_multiport.
Oto pewne ustawienia wieloportowe dla popularnych układów szeregowych:
AST FourPort port1 0x1BF mask1 0xf match1 0xf
Boca BB-1004/8 port1 0x107 mask1 0xff match1 0
Boca BB-2016 port1 0x107 mask1 0xff match1 0
port2 0x147 mask2 0xff match2 0
Konfiguracja ESP Hayesa¶
Setserial może być również używany do
konfigurowania portów na układzie ESP Hayesa.
Można do tego używać następujących parametrów:
- rx_trigger
- Jest to poziom wyzwalania (w bajtach) FIFO odbiorczego.
Większe wartości powodują mniej przerwań i lepszą
wydajność; jednak zbyt duże wartości powodują
utratę danych. Dostępne wartości to 1 do 1023.
- tx_trigger
- Jest to poziom wyzwalania (w bajtach) FIFO nadawczego.
Większe wartości mogą powodować mniej przerwań i
lepszą wydajność; jednak zbyt duże wartości
powodują zdegradowaną wydajność nadawania.
Dostępne wartości to 1 do 1023.
- flow_off
- Jest to poziom (w bajtach) przy którym port ESP zrobi
"flow off" dla zdalnego nadajnika (tj. powie mu by przestał
nadawać więcej bajtów). Dostępne wartości to 1 do
1023. Wartość ta powinna być większa od poziomu
wyzwalania odbiorczego i poziomu flow on.
- flow_on
- Jest to poziom (w bajtach) przy którym port ESP zrobi
"flow on" dla zdalnego nadajnika (tzn. powie mu by wznowił
nadawanie bajtów) po "flow off". Dostępne
wartości to 1 do 1023. Wartość ta powinna być mniejsza
niż poziom "flow off", lecz większa niż poziom
wyzwalania odbiorczego.
- rx_timeout
- Jest to ilość czasu, przez którą port
ESP powinien czekać po odebraniu ostatniego znaku przed
sygnalizowaniem przerwania. Prawidłowe wartości to 0 do 255.
Zbyt duża wartość zwiększy opóźnienia, a
zbyt mała spowoduje niepotrzebne przerwania.
UWAGA¶
UWAGA: Skonfigurowanie portu szeregowego tak, by używał
nieprawidłowego portu I/O może zablokować twoją
maszynę.
PLIKI¶
/etc/rc.local /etc/rc.serial
ZOBACZ TAKŻE¶
tty(4),
ttys(4), kernel/chr_drv/serial.c
AUTOR¶
Oryginalna wersja setserial została napisana przez Ricka Sladkeya
(jrs@world.std.com) i została zmodyfikowana przez Michaela K. Johnsona
(johnsonm@stolaf.edu).
Ta wersja została od tej pory napisana ponownie od zera przez Theodore Ts'o
(tytso@mit.edu) 1/1/93. Wszelkie błędy i problemy są
wyłącznie jego odpowiedzialnością.
Powyższe tłumaczenie pochodzi z nieistniejącego już Projektu
Tłumaczenia Manuali i
może nie być aktualne. W razie
zauważenia różnic między powyższym opisem a
rzeczywistym zachowaniem opisywanego programu lub funkcji, prosimy o
zapoznanie się z oryginalną (angielską) wersją strony
podręcznika za pomocą polecenia:
- man --locale=C 8 setserial
Prosimy o pomoc w aktualizacji stron man - więcej informacji można
znaleźć pod adresem
http://sourceforge.net/projects/manpages-pl/.