setserial - pobierz/ustaw informacje o porcie szeregowym
setserial [ -abqvVWz ] device [ parameter1
[ arg ] ] ...
setserial -g [ -abGv ] device1 ...
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.
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.
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.
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
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
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: Skonfigurowanie portu szeregowego tak, by
używał nieprawidłowego portu I/O może
zablokować twoją maszynę.
/etc/rc.local /etc/rc.serial
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/.