NOME
setserial − fornisce/imposta informazioni per le porte seriali in Linux
SINTASSI
setserial [ −abqvVW ] dispositivo [ parametro1 [ arg ] ] ...
setserial -g [ −abv ] dispositivo1 ...
DESCRIZIONE
setserial è un programma inteso a impostare e/o riportare le informazioni di configurazione associate a una porta seriale. Queste informazioni includono le porte I/O e l’IRQ che sta utilizzando una particolare porta seriale, e precisano se il tasto break debba essere interpretato come il tasto Secure Attention oppure no, e così via.
Durante il normale processo di avvio, vengono inizializzate solo le porte COM 1-4, usando le porte I/O e i valori IRQ predefiniti, secondo l’elenco che segue. Per qualunque porta seriale addizionale, o per assegnare alle porte COM 1-4 una configurazione non standard, dovrebbe essere usato il programma setserial. Esso viene tipicamente chiamato da uno script rc.serial, normalmente eseguito tramite /etc/rc.local.
L’argomento (o gli argomenti) dispositivo specifica il dispositivo seriale che deve essere modificato o interrogato. Avrà normalmente la seguente forma: /dev/cua[0-3].
Se non viene specificato alcun parametro, setserial stamperà il tipo di porta (per esempio, 8250, 16450, 16550, 16550A, etc.), la porta hardware di I/O, la linea hardware di IRQ, la sua "baud base," e qualcuna delle sue opzioni.
Se viene data l’opzione −g , gli argomenti passati a setserial verranno interpretati come una lista di dispositivi per la quale devono essere stampate le caratteristiche dei dispositivi stessi.
Senza l’opzione −g , il primo argomento di setserial viene interpretato come il dispositivo da modificare o le cui caratteristiche devono essere stampate, e ogni argomento addizionale verrà interpretato come un parametro da assegnare a quel dispositivo seriale.
Per la maggior parte, sono richiesti i privilegi da superutente per impostare i parametri di configurazione di una porta seriale. Alcuni parametri di porta seriale possono tuttavia essere impostati da utenti normali e saranno menzionati in questa pagina di manuale come eccezioni.
OPZIONI
Setserial accetta le seguenti opzioni:
−a |
Riportando la configurazione di un dispositivo seriale, stampa ogni informazione disponibile. | ||
−b |
Riportando la configurazione di un dispositivo seriale, stampa un sommario della configurazione del dispositivo, che potrebbe essere adatto alla stampa durante il processo di avvio, durante l’esecuzione dello script /etc/rc. | ||
−q |
È silenzioso: setserial stampa meno righe d’informazioni. | ||
−v |
È prolisso: setserial stampa informazioni addizionali sullo stato. | ||
−V |
Mostra la versione ed esce. | ||
−W |
Esegue un’inizializzazione selvaggia degli interrupt ed esce. |
PARAMETRI
A una porta seriale possono essere assegnati i seguenti parametri.
Si presume che
per tutti gli argomenti i valori siano espressi in decimale
salvo quando preceduti da "0x".
port numero_della_porta
L’opzione port imposta la porta di I/O, come illustrato sopra.
irq numero_di_irq
L’opzione irq imposta l’IRQ hardware, come illustrato sopra.
uart tipo_di_uart
Questa opzione viene usata per impostare il tipo di UART: i tipi consentiti sono none (nessuno) oppure 8250, 16450, 16550, 16550A, 16650, 16650V2 e 16750. Poiché gli UART 8250 e 16450 non hanno FIFO, e poiché i 16550 originali hanno bachi che rendono inutilizzabile la coda FIFO, FIFO sarà usato solo su chip identificati come UART 16550A. Impostare il tipo UART a 8250, 16450 o 16550 abilita la porta seriale senza cercare di usare la coda FIFO. Usare il tipo UART none disabilita la porta.
Alcuni modem interni sono reclamizzati come muniti di una "16550A UART with a 1k buffer": è falso! hanno un UART che in realtà non è 16550A compatibile; quello che invece posseggono è un UART 16450 compatibile con un buffer in ricezione di 1k per prevenire gli intasamenti (overrun) del ricevitore. Ciò è importante, poiché non dispongono di una coda FIFO in trasmissione. Pertanto, essi non sono compatibili con un UART 16550A e il processo di autoconfigurazione li identificherà correttamente come 16450. Se si tenta di forzare ciò usando il parametro uart , verranno a mancare dei caratteri durante la trasmissione dei file. Di solito questi UART hanno altri problemi: spesso deve essere specificato anche il parametro skip_test.
autoconfigure
Dando questo parametro, setserial chiederà al kernel di tentare di configurare automaticamente la porta seriale. La porta I/O deve essere impostata correttamente; il kernel cercherà di determinare il tipo UART, e se è impostato il parametro auto_irq, Linux cercherà di determinare automaticamente l’IRQ. Il parametro autoconfigure dovrebbe essere dato dopo aver specificato i parametri port,auto_irq, andskip_test.
auto_irq
Durante l’autoconfigurazione, cerca di determinare l’IRQ. Non è garantito che questa opzione produca sempre il risultato corretto; qualche configurazione hardware potrebbe ingannare il kernel Linux. Di solito è più sicuro non usare l’opzione auto_irq , ma piuttosto specificare esplicitamente l’IRQ da usarsi, servendosi del parametro irq.
^auto_irq
Durante l’autoconfigurazione, non cerca di determinare l’IRQ.
skip_test
Durante l’autoconfigurazione, salta il test UART. Alcuni modem interni non hanno UART compatibili National Semiconductor, ma hanno invece imitazioni economiche. Alcuni di questi UART imitati non supportano perfettamente il modo di riconoscimento loopback, usato dal kernel per assicurarsi che ci sia davvero uno UART a un particolare indirizzo prima di tentare di configurarlo. Quindi, per certi modem interni, c’è bisogno di specificare questo parametro onde consentire a Linux di inizializzare l’UART correttamente.
^skip_test
Durante l’autoconfigurazione, non salta il test UART.
baud_base base_in_baud
Questa opzione imposta la velocità base in baud, che è rappresentata dalla frequenza di clock divisa per 16. Normalmente questo valore è 115200, che è anche la massima velocità in baud che l’UART possa sostenere.
spd_hi |
Usa 57.6kb quando l’applicazione richiede 38.4kb. Questo parametro può essere specificato da un utente non privilegiato. |
spd_vhi
Usa 115kb quando l’applicazione richiede 38.4kb. Questo parametro può essere specificato da un utente non privilegiato.
spd_cust
Usa il divisore personalizzato per impostare la velocità quando l’applicazione richiede 38.4kb. In questo caso, la velocità sarà la base_in_baud diviso per il divisore. Questo parametro può essere specificato da un utente non privilegiato.
spd_normal
Usa 38.4kb quando l’applicazione richiede 38.4kb. Questo parametro può essere specificato da un utente non privilegiato.
divisor divisore
Questa opzione imposta il divisore personalizzato. Verrà allora usato questo divisore, quindi sarà selezionata l’opzione spd_cust e la porta seriale verrà impostata dall’applicazione a 38.4kb. Questo parametro può essere specificato da un utente non privilegiato.
sak |
Imposta il tasto break come il tasto Secure Attention. | ||
^sak |
disabilita il tasto Secure Attention. |
fourport
Configura la porta come una scheda AST Fourport.
^fourport
Disabilita la configurazione AST Fourport.
close_delay ritardo
Specifica la quantità di tempo, in centesimi di secondo, per la quale il segnale DTR deve rimanere basso su una linea seriale dopo che il dispositivo chiamante (callout device) sia stato chiuso, prima che il dispositivo di chiamata in ingresso (dialin device) bloccato alzi di nuovo il segnale DTR. Questa opzione è predefinita a 50, ossia un ritardo di mezzo secondo.
closing_wait ritardo
Specifica la quantità di tempo, in centesimi di secondo, per la quale il kernel deve attendere la trasmissione di dati dalla porta seriale mentre chiude la porta, prima che il ricevitore sia stato disabilitato. Se viene specificato "none", non vi sarà alcun ritardo. Se viene specificato "infinite" il kernel attenderà indefinitamente la trasmissione dei dati nel buffer. L’impostazione predefinita è "none".
closing_wait2 ritardo
Specifica la quantità di tempo, in centesimi di secondo, per la quale il kernel deve attendere la trasmissione di dati dalla porta seriale mentre chiude la porta, dopo che il ricevitore sia stato disabilitato. Come per il comando closing_wait , si possono specificare sia "none" sia "infinite". L’impostazione predefinita è di 3000, ossia un ritardo di 30 secondi.
Le impostazioni predefinite di closing_wait e di closing_wait2 sono di solito appropriate per la maggior parte dei dispositivi. Se viene selezionato un ritardo troppo lungo, allora la porta seriale potrebbe rimanere appesa per lungo tempo qualora sia chiusa mentre una porta seriale non è collegata, e abbia dati in attesa. Se viene specificato un ritardo troppo corto, allora c’è il rischio che qualcuno dei dati trasmessi non venga affatto emesso.
Se il dispositivo è estremamente lento, come un plotter, i valori di closing_wait o closing_wait2 devono essere ulteriormente allungati.
Se il dispositivo usa normalmente l’handshaking XON/XOFF, i valori predefiniti di closing_wait and closing_wait2 devono essere invertiti. Ciò presenta tuttavia il pericolo di non sopprimere le lotte di echi fra Linux e un modem che continui a mandare segnali echo.
session_lockout
Blocca gli accessi alla porta chiamante (/dev/cuaXX) fra diverse sessioni. Cioè, una volta che un processo abbia aperto una porta, non consente che un processo con un diverso identificativo di sessione apra quella porta finché il primo processo non l’abbia chiusa.
^session_lockout
Non blocca gli accessi alla porta chiamante fra diverse sessioni.
pgrp_lockout
Blocca gli accessi alla porta chiamante (/dev/cuaXX) da diversi gruppi di processi. Cioè, dopo che un processo abbia aperto una porta, non consentire a un processo di un diverso gruppo di processi di aprire quella porta finché il primo processo non l’abbia chiusa.
^pgrp_lockout
Non blocca accessi alla porta chiamante da diversi gruppi di processi.
hup_notify
Notifica a un processo bloccato sull’apertura di una linea in ingresso quando un processo ha terminato di usare una linea in uscita (sia mediante chiusura della linea, sia per avvenuto riaggancio) restituendo EAGAIN all’apertura.
Questo parametro viene usato per i processi getty bloccati su una linea di ingresso di una porta seriale. Ciò permette a getty di reimpostare il modem (la cui configurazione potrebbe esser stata modificata dall’applicazione che usa il dispositivo chiamante) prima di bloccarsi ancora sull’apertura.
^hup_notify
Non mandare notifiche a un processo bloccato sull’apertura di una linea di chiamata in ingresso quando il dispositivo chiamante viene riagganciato.
split_termios
Tratta le impostazioni termios usate dal dispositivo chiamante e le impostazioni usate dal dispositivo di composizione come separate.
^split_termios
Usa la stessa struttura termios per immagazzinare entrambe le porte di ingresso e di chiamata. Questa è l’opzione predefinita.
callout_nohup
Se questa particolare porta seriale è aperta come dispositivo chiamante non riappende il tty quando viene a mancare il riconoscimento della portante.
^callout_nohup
Non omette di riagganciare il tty quando una porta seriale è aperta come dispositivo di chiamata. Naturalmente, l’opzione HUPCL di termios deve essere abilitata se sta per avvenire il riaggancio.
CONSIDERAZIONI SULLA CONFIGURAZIONE DI PORTE SERIALI
È importante notare che setserial si limita soltanto a dire al kernel di Linux dove dovrebbe aspettarso di trovare la porta di I/O e le linee di IRQ di una particolare porta seriale. *Non* configura l’hardware, cioè la scheda seriale effettiva, per usare una particolare porta I/O. Per fare ciò, avete bisogno di programmare fisicamente la scheda seriale, normalmente impostando alcuni jumper o spostando alcuni interruttori DIP.
Questa sezione fornirà alcuni suggerimenti per aiutarvi a decidere come configurare le porte seriali.
Le associazioni delle porte secondo lo "standard MS-DOS" sono le seguenti:
/dev/ttys0
(COM1), porta 0x3f8, irq 4
/dev/ttys1 (COM2), porta 0x2f8, irq 3
/dev/ttys2 (COM3), porta 0x3e8, irq 4
/dev/ttys3 (COM4), porta 0x2e8, irq 3
A causa dei limiti progettuali dell’architettura del bus AT/ISA, normalmente una linea di IRQ non può esser condivisa fra due o più porte seriali. Se si prova a farlo, una o entrambe le porte seriali diventano inaffidabili quando usate simultaneamente. Questa limitazione può essere superata da speciali schede serialei multi-porta, disegnate per condividere porte seriali multiple su di una singola linea di IRQ. Le schede seriali multi-porta che Linux può utilizzareincludono la AST FourPort, la scheda Accent Async, la scheda Usenet Serial II, le schede Bocaboard BB-1004, BB-1008 e BB-2016, e la scheda seriale HUB-6.
La selezione di una linea IRQ alternativa è difficile, poiché molte di loro sono già usate. La seguente tabella elenca l’assegnazione "standard MS-DOS" delle linee di IRQ disponibili:
IRQ 3: COM2
IRQ 4: COM1
IRQ 5: LPT2
IRQ 7: LPT1
La maggior parte delle persone ritengono che IRQ 5 sia una buona scelta, supponendo che ci sia solo una porta parallela attiva nel computer. Un’altra buona scelta è IRQ 2 (oppure IRQ 9); benché questo IRQ sia talora usato da schede di rete e, molto raramente, da schede VGA configurate per usare IRQ 2 come interrupt di ritracciamento verticale. Se la propria scheda VGA è configurata in questo modo, si cerchi di disabilitare la configurazione, inutile per Linux e per molti altri sistemi operativi, per poter disporre di quella linea di IRQ per qualche altra scheda.
Le uniche altre linee IRQ disponibili sono 3, 4 e 7, e queste sono probabilmente usate da altre porte seriali e parallele; ma se la scheda seriale ha un connettore marginale a 16bit e accetta numeri di interrupt più alti, allora sono anche disponibili gli IRQ 10, 11, 12 e 15.
Su macchine di classe AT, IRQ 2 è visto come IRQ 9, e Linux lo interpreterà in questo modo.
Gli IRQ diversi da 2 (9), 3, 4, 5, 7, 10, 11, 12, e 15, non devono essere usati, poiché sono assegnati a altro hardware e non possono, in genere, essere modificati. Ecco gli assegnamenti "standard":
IRQ 0 Timer
canale 0
IRQ 1 Tastiera
IRQ 2 Cascade per controller 2
IRQ 3 Porta seriale 2
IRQ 4 Porta seriale 1
IRQ 5 Porta parallela 2 (riservato nel PS/2)
IRQ 6 Lettore di dischetto
IRQ 7 Porta parallela 1
IRQ 8 Orologio in tempo reale
IRQ 9 Rediretto a IRQ2
IRQ 10 Riservato
IRQ 11 Riservato
IRQ 12 Riservato (dispositivo ausiliario nel PS/2)
IRQ 13 Coprocessore matematico
IRQ 14 Controller per il disco rigido
IRQ 15 Riservato
CONFIGURAZIONE MULTIPORTA
Alcune schede seriali multi-porta che condividono porte multiple su un singolo IRQ usano una o più porte per indicare se ci sia, o no, qualche porta appesa che abbia bisogno di esser servita. Se la scheda multiporta ha questo tipo di porte, bisognerebbe usarle per evitare potenziali blocchi nel caso in cui l’interrupt andasse perso.
Per impostare queste porte, si specifichi il parametro set_multiport, seguito dai parametri della multiporta. I parametri della multiporta specificano la porta (port) che deve essere controllata, una maschera (mask) che indica quali bit nel registro sono significativi e, infine, un parametro corrispondenza (match) che specifica a cosa devono corrispondere i bit significativi in quel registro, in mancanza di altro lavoro in attesa di esser eseguito.
Possono essere specificate fino a quattro di tali combinazioni porta/maschera/corrispondenza. La prima di queste dovrebbe essere specificata impostando i parametri port1, mask1e match1. La seconda di tali combinazioni dovrebbe essere specificata con port2, mask2e match2, e così via. Per disabilitare questo controllo della multiporta, impostate port1 a zero.
Per vedere le attuali impostazioni multiporta, si specifichi sulla riga di comando il parametro get_multiport.
Ecco alcune impostazioni multiporta per alcune schede seriali comuni:
AST FourPort port1 0x1BF match1 0xf mask1 0xf
Boca BB-1004/8 port1 0x107 match1 0xff match1 0
Boca BB-2016
port1 0x107 match1 0xff match1 0
port2 0x147 match2 0xff match2 0
CAUTELE
ATTENZIONE: L’uso di una porta invalida può bloccare la propria macchina.
FILES
/etc/rc.local /etc/rc.serial
VEDERE ANCHE
tty(4), ttys(4), kernel/chr_drv/serial.c
AUTORE
La versione originale di setserial fu scritta da Rick Sladkey (jrs [AT] world.com) ed è stata modificata da Michael K. Johnson (johnsonm [AT] stolaf.edu).
Da allora, questa versione è stata riscritta daccapo da Theodore Ts’o (tytso [AT] mit.edu) il giorno 1/1/93: tutti i bachi e problemi sono solamente colpa sua.