24.2 Introduzione

24.2.1 Terminologia

bps

Bits per Second (Bit per Secondo) — la frequenza alla quale vengono trasmessi i dati

DTE

Data Terminal Equipment (Attrezzatura per il Terminale Dati) — ad esempio, il tuo computer

DCE

Data Communications Equipment (Attrezzatura per le Comunicazioni Dati) — il tuo modem

RS-232

Standard EIA per le comunicazioni tra hardware seriale

Nel parlare della velocità di comunicazione, questa sezione non usa il termine “baud”. Il baud si riferisce al numero di transizioni degli stati elettrici che possono essere effettuati in un periodo di tempo, mentre i “bps” (bit per secondo) sono il termine corretto da usare (o almeno non sembra irritare troppo i perfezionisti).

24.2.2 Cavi e Porte

Per collegare un modem o un terminale alla tua macchina FreeBSD, avrai bisogno di una porta seriale sul tuo computer e del cavo appropriato per il tuo dispositivo seriale. Se sei già pratico con l'hardware ed i cavi necessari, puoi saltare tranquillamente questa sezione.

24.2.2.1 Cavi

Ci sono parecchi tipi diversi di cavi seriali. I due tipi più comuni per i nostri scopi sono i cavi null-modem ed i cavi standard (“dritti”) RS-232. La documentazione per il tuo hardware dovrebbe descrivere il tipo di cavi necessari.

24.2.2.1.1 Cavi null-modem

Un cavo null-modem porta segnali dritti, come il “Segnale di Massa”, e segnali incrociati. Per esempio, il pin di “Trasmissione Dati” su un capo è il pin di “Ricezione Dati” sull'altro capo.

Puoi costruirti un cavo null-modem da usare con i terminali (es., se vuoi una migliore qualità). Questa tabella mostra i segnali dell'RS-232C e i numeri dei pin su un connettore DB-25. Nota che lo standard richiede il segnale dritto sul pin 1 chiamato Massa di Protezione, anche se questo è spesso omesso. Alcuni terminali funzionano usando solo i pin 2, 3 e 7, mentre altri richiedono configurazioni diverse come mostrate negli esempi qui sotto.

Tabella 24-1. Cavo Null-Modem DB-25 / DB-25

Segnale Pin #   Pin # Segnale
SG 7 si connette a 7 SG
TD 2 si connette a 3 RD
RD 3 si connette a 2 TD
RTS 4 si connette a 5 CTS
CTS 5 si connette a 4 RTS
DTR 20 si connette a 6 DSR
DTR 20 si connesso a 8 DCD
DSR 6 si connette a 20 DTR
DCD 8 si connette a 20 DTR

Ecco altri due comuni schemi.

Tabella 24-2. Cavo Null-Modem DB-9 / DB-9

Segnale Pin #   Pin # Segnale
RD 2 si connette a 3 TD
TD 3 si connette a 2 RD
DTR 4 si connette a 6 DSR
DTR 4 si connette a 1 DCD
SG 5 si connette a 5 SG
DSR 6 si connette a 4 DTR
DCD 1 si connette a 4 DTR
RTS 7 si connette a 8 CTS
CTS 8 si connette a 7 RTS

Tabella 24-3. Cavo Null-Modem DB-9 / DB-25

Segnale Pin #   Pin # Segnale
RD 2 si connette a 2 TD
TD 3 si connette a 3 RD
DTR 4 si connette a 6 DSR
DTR 4 si connette a 8 DCD
SG 5 si connette a 7 SG
DSR 6 si connette a 20 DTR
DCD 1 si connette a 20 DTR
RTS 7 si connette a 5 CTS
CTS 8 si connette a 4 RTS

Nota: Quando un pin di un capo si connette a una coppia di pin dell'altro capo, questo è solitamente fatto ponendo un cavetto tra la coppia di pin nel loro connettore e collegando questi con un altro cavo al singolo pin dell'altro capo.

Queste sembrano essere le implementazioni più popolari. In altre varianti (spiegate nel libro RS-232 Made Easy) SG è connesso a SG, TD a RD, RTS e CTS a DCD, DTR a DSR, e vice-versa.

24.2.2.1.2 Cavi Standard RS-232C

Un cavo seriale standard ha tutti i segnali RS-232C diritti. Cioè, il pin di “Trasmissione Dati” su un capo del cavo va nel pin di “Trasmissione Dati” sull'altro capo. Questo è il tipo di cavo da usare per collegare un modem al tuo sistema FreeBSD, ed è anche appropriato per alcuni terminali.

24.2.2.2 Porte

Le porte seriali sono i dispositivi attraverso i quali vengono trasferiti i dati tra il computer FreeBSD ed il terminale. Questa sezione descrive il tipo di porte che esistono e come vengono indicate in FreeBSD.

24.2.2.2.1 Tipi di Porte

Esistono parecchi tipi di porte seriali. Prima di comprare o costruire un cavo, avrai bisogno di assicurarti che sia adatto alle porte sul terminale e sul sistema FreeBSD.

La maggior parte dei terminali avrà porte DB-25. I personal computer, compresi i PC con FreeBSD, avranno porte DB-25 o DB-9. Se hai una scheda seriale multiporta nel tuo PC, potresti avere porte RJ-12 o RJ-45.

Guarda la documentazione fornita con l'hardware per le specifiche del tipo di porta usata. Spesso basta anche un'ispezione visiva della porta.

24.2.2.2.2 Nomi delle Porte

In FreeBSD, si accede ad ogni porta seriale attraverso una voce nella directory /dev. Ci sono due differenti tipi di voci:

  • Le porte di ingresso vengono dette /dev/ttydN dove N è il numero di porta, cominciando da zero. Generalmente, puoi usare la porta di ingresso per i terminali. Le porte di ingresso richiedono che la linea fornisca un segnale detto data carrier detect (DCD) per funzionare correttamente.

  • Le porte di uscita vengono dette /dev/cuadN. In genere non si usano porte di uscita per i terminali, ma solo per i modem. Puoi usare la porta di uscita se il cavo seriale o il terminale non supportano il segnale di carrier detect.

    Nota: Le porte di uscita sono chiamate /dev/cuaaN in FreeBSD 5.X e precedenti.

Se hai connesso un terminale sulla prima porta seriale (COM1 in MS-DOS®), allora userai /dev/ttyd0 per riferirti al terminale. Se il terminale è sulla seconda porta seriale (anche nota come COM2), usa /dev/ttyd1, e così via.

24.2.3 Configurazione del Kernel

FreeBSD supporta quattro porte seriali di default. Nel mondo MS-DOS, queste sono note come COM1, COM2, COM3, e COM4. FreeBSD attualmente supporta schede d'interfaccia seriale multiporta “stupide”, come le BocaBoard 1008 e 2016, così come le schede multiporta intelligenti come quelle fatte dalla Digiboard e dalla Stallion Technologies. Ad ogni modo, il kernel di default usa solo le porte COM standard.

Per vedere se il tuo kernel riconosce una delle tue porte seriali, guarda i messaggi mentre il kernel viene avviato, o usa il comando /sbin/dmesg per far scorrere di nuovo i messaggi di avvio del kernel. In particolare, cerca dei messaggi che inizino con i caratteri sio.

Suggerimento: Per vedere solo i messaggi che hanno la parola sio, usa il comando:

# /sbin/dmesg | grep 'sio'

Ad esempio, su un sistema con quattro porte seriali, questi sono i messaggi dati dall'avvio del kernel specifici delle porte seriali:

sio0 at 0x3f8-0x3ff irq 4 on isa
sio0: type 16550A
sio1 at 0x2f8-0x2ff irq 3 on isa
sio1: type 16550A
sio2 at 0x3e8-0x3ef irq 5 on isa
sio2: type 16550A
sio3 at 0x2e8-0x2ef irq 9 on isa
sio3: type 16550A

Se il tuo kernel non riconosce tutte le tue porte seriali, probabilmente devi configurare il kernel sistemando il file /boot/device.hints. Inoltre puoi commentare o rimuovere completamente le righe dei dispositivi che non hai.

Su FreeBSD 4.X devi editare il tuo file di configurazione del kernel. Per informazioni dettagliate sulla configurazione del kernel, guarda Capitolo 8. Le righe dei dispositivi interessati dovrebbero essere simili a queste:

device            sio0    at isa? port IO_COM1 irq 4
device          sio1    at isa? port IO_COM2 irq 3
device          sio2    at isa? port IO_COM3 irq 5
device          sio3    at isa? port IO_COM4 irq 9

Guarda la pagina man di sio(4) per informazioni aggiuntive sulla configurazione delle porte seriali e delle schede multiporta. Stai attento se stai usando un file di configurazione già usato per una versione differente di FreeBSD, poiché i flag dei dispositivi e la sintassi sono cambiati tra una versione e l'altra.

Nota: port IO_COM1 è una sostituzione per port 0x3f8, IO_COM2 è 0x2f8, IO_COM3 è 0x3e8, e IO_COM4 è 0x2e8, che sono indirizzi comuni per le rispettive porte seriali; gli interrupt 4, 3, 5, e 9 sono linee di richiesta di interrupt piuttosto comuni. Da notare anche che le normali porte seriali non possono condividere degli interrupt sui bus ISA dei PC (le schede multiporta hanno dell'elettronica integrata che permette a tutte le 16550A sulla scheda di condividere uno o due linee di richiesta dell'interrupt).

24.2.4 File Speciali di Dispositivo

Alla maggior parte dei dispositivi nel kernel si accede attraverso “file speciali di dispositivo”, che si trovano nella directory /dev. Ai dispositivi sio si accede attraverso i /dev/ttydN (ingresso) e /dev/cuadN (uscita). FreeBSD fornisce anche dei dispositivi di inizializzazione (/dev/ttydN.init e /dev/cuadN.init su FreeBSD 6.X, /dev/ttyidN e /dev/cuaidN su FreeBSD 5.X e precedenti) e dispositivi di blocco (/dev/ttydN.lock e /dev/cuadN.lock su FreeBSD 6.X, /dev/ttyldN e /dev/cualdN su FreeBSD 5.X e precedenti). I dispositivi di inizializzazione vengono usati per inizializzare i parametri delle porte di comunicazione ogni volta che una porta viene aperta, come crtscts per i modem che usano le segnalazioni RTS/CTS per il controllo di flusso. I dispositivi di blocco vengono usati per fissare i flag sulle porte ed evitare che altri utenti o programmi cambino certi parametri; guarda le pagine man di termios(4), sio(4), e stty(1) per maggiori informazioni sulle impostazioni dei terminali, sui dispositivi di blocco ed inizializzazione, e sull'impostazione delle opzioni del terminale, rispettivamente.

24.2.4.1 Creazione dei File Speciali di Dispositivo

Nota: FreeBSD 5.0 include il file system devfs(5) che crea automaticamente nodi per i dispositivi necessari. Se stai usando una versione di FreeBSD con il devfs abilitato puoi saltare tranquillamente questa sezione.

Uno script di shell di nome MAKEDEV nella directory /dev gestisce i file di dispositivo. Per usare MAKEDEV nella creazione del file di dispositivo per COM1 (porta 0), fai cd su /dev e dai il comando MAKEDEV ttyd0. Allo stesso modo, per creare il file di dispositivo per COM2 (porta 1), usa MAKEDEV ttyd1.

MAKEDEV non crea solo i file speciali /dev/ttydN, ma anche i nodi /dev/cuaaN, /dev/cuaiaN, /dev/cualaN, /dev/ttyldN, e /dev/ttyidN.

Dopo aver creato i nuovi file di dispositivo, fa attenzione nel controllare i permessi sui file (specialmente sui file /dev/cua*) per assicurarti che solo gli utenti che dovrebbero effettivamente avere accesso a questi dispositivi possano leggerli e scriverli — magari non vorrai permettere al tuo utente medio di usare il tuo modem per chiamare verso l'esterno. I permessi predefiniti su /dev/cua* dovrebbero essere adatti:

crw-rw----    1 uucp     dialer    28, 129 Feb 15 14:38 /dev/cuaa1
crw-rw----    1 uucp     dialer    28, 161 Feb 15 14:38 /dev/cuaia1
crw-rw----    1 uucp     dialer    28, 193 Feb 15 14:38 /dev/cuala1

Questi permessi permettono all'utente uucp e agli utenti nel gruppo dialer di usare i dispositivi di uscita.

24.2.5 Configurazione della Porta Seriale

Il dispositivo ttydN (o cuadN) è il normale dispositivo che si apre per le proprie applicazioni. Quando un processo apre il dispositivo, avrà un insieme di impostazioni di I/O predefinite per il terminale. Puoi visualizzare queste impostazioni con il comando:

# stty -a -f /dev/ttyd1

Quando cambi le impostazioni per questo dispositivo, queste rimangono efficaci finché il dispositivo non viene chiuso. Quando viene riaperto, ritorna all'insieme di default. Per effettuare dei cambiamenti all'insieme predefinito, modifica le impostazioni per il dispositivo di “stato iniziale”. Ad esempio, per attivare di default modalità CLOCAL, comunicazione a 8 bit, e controllo di flusso XON/XOFF per ttyd5, scrivi:

# stty -f /dev/ttyd5.init clocal cs8 ixon ixoff

Le inizializzazioni di sistema per i dispositivi seriali sono controllate in /etc/rc.d/serial. Questo file influisce sui valori predefiniti dei dispositivi seriali.

Nota: Su FreeBSD 4.X, l'inizializzazione globale dei dispositivi seriali è controllata in /etc/rc.serial.

Per evitare cambiamenti da parte di qualche applicazione, modifica il dispositivo di “blocco dello stato”. Ad esempio, per bloccare la velocità di ttyd5 a 57600 bps, scrivi:

# stty -f /dev/ttyd5.lock 57600

Ora, un applicazione che apra ttyd5 e cerchi di cambiare la velocità della porta resterà bloccata a 57600 bps.

Naturalmente, dovresti rendere i dispositivi di stato iniziale e stato di blocco scrivibili solo da root.

Questo, ed altri documenti, possono essere scaricati da ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

Per domande su FreeBSD, leggi la documentazione prima di contattare <questions@FreeBSD.org>.
Per domande su questa documentazione, invia una e-mail a <doc@FreeBSD.org>.