Eu tenho este Placa serial PCI de 2 portas instalada em uma máquina Linux mais antiga (ela está off-line, portanto, as atualizações são poucas e distantes). A documentação da placa diz que a versão do kernel instalada na máquina é suportada e posso ver que a placa está funcionando quando conecto uma porta à outra.
O problema ocorre quando tento ler um fluxo de dados vindo de um servidor de interface de rede serial (um Perle IOLAN para ser específico). Tudo que eu obtenho é 0x80
e 0x00
saindo em vez de texto ASCII. Eu verifiquei que as configurações principais são as mesmas (taxa de transmissão, 8 bits / char, 1 bit de parada, sem paridade, sem controle de fluxo) entre as duas extremidades e tentei várias taxas de transmissão também. A mesma coisa acontece quando eu conecto uma máquina Windows a ela para testar (a máquina Windows lê a partir do IOLAN também).
A placa serial anterior (acho que é este , mas se não, é algo próximo) funciona bem, mas também tem um UART diferente nele (um 16550 contra um 16950 neste novo cartão).
Aqui está a saída que estou recebendo para uma das portas de stty
:
speed 115200 baud; rows 0; columns 0; line = 0;
intr = <undef>; quit = ; erase = <undef>; kill = s; eof = <undef>; eol = a;
eol2 = <undef>; swtch = r; start = ^Q; stop = ^S; susp = <undef>;
rprnt = <undef>; werase = <undef>; lnext = ; flush = l; min = 0; time = 1;
-parenb -parodd cs8 -hupcl -cstopb cread clocal crtscts
-ignbrk -brkint ignpar -parmrk -inpck -istrip -inlcr -igncr -icrnl -ixon -ixoff
-iuclc -ixany -imaxbel -iutf8
-opost -olcuc -ocrnl -onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
-isig -icanon -iexten -echo -echoe -echok -echonl -noflsh -xcase -tostop -echoprt
-echoctl -echoke
e de setserial
:
/dev/ttyS2, Line 2, UART: 16950/954, Port: 0x1078, IRQ: 74
Baud_base: 115200, close_delay: 50, divisor: 0
closing_wait: 3000
Flags: spd_normal skip_test auto_irq
Posso dizer que minhas principais configurações estão corretas e, comparando com outra máquina Linux que está funcionando, não vejo nada fora do lugar. Então, por que essa placa não pode falar com outras máquinas como deveria?
EDIT: Como por @sawdust, minha versão do kernel é 2.6.18, de acordo com uname
:
Linux serverName 2.6.18-92.el5 #1 SMP Tue Jun 10 18:49:47 EDT 2008 i686 i686 i386 GNU/Linux
O cartão também parece ser reconhecido na inicialização, embora talvez não totalmente corretamente:
serial8250: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A
00:09: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A
0000:00:03.3: ttyS1 at I/O 0x4470 (irq = 177) is a 16550A
ttyS2: detected caps 00000700 should be 00000100
0000:07:00.0: ttyS2 at I/O 0x1078 (irq = 74) is a 16C950/954
ttyS3: detected caps 00000700 should be 00000100
0000:07:00.0: ttyS3 at I/O 0x1070 (irq = 74) is a 16C950/954
ttyS2: detected caps 00000700 should be 00000100
(ttyS0 e ttyS1 têm cabeçalhos na placa-mãe, mas nenhuma porta DB-9 física.)
/proc/tty/dirvers/
contém um único arquivo, denominado serial
.