Comunicação serial em linux

Olá,

estou desenvolvendo um sistema em java swing e utilizo comunicação serial.
Enquanto desenvolvi em windows, não tive problemas. Apenas utilizei o package javax.comm encontrado no site da sun, e o arquivo .dll que o acompanha.
Entretanto estou tendo inúmeros problemas para portá-lo ao linux. Tanto o package para x86 quanto para solaris simplesmente não funcionam. Já segui diversos passos diferente recomendados em tutoriais (praticamente todos utilizam a library encontrada em www.rxtx.org) mas cada vez que modifico, recebo uma exceção diferente.
Suplico a ajuda de alguém que já tenha por ventura utilizado com sucesso a comunicação serial em linux, para que eu possa ao menos saber quais os drivers corretos a utilizar.
Muito obrigado,
Arthur.

Olá

javax.comm do Solaris 2.03 + rxtx + j2sdk 1.4.2_07 deve funcionar.

[]s
Luca

Dica: no Linux você deve usar o rxtx (há duas versões, uma que implementa javax.comm, e outra que não implementa javax.comm. Obviamente você deve usar a versão que implementa javax.comm se quiser deixar seu programa compatível com o Windows.
A seguir você precisa ver se o Linux já não está usando a porta serial (pode ser que ele esteja já usando, porque é possível espetar um “terminal serial” a uma das portas COM.)

ps -ef | grep [am]getty

se isto retornar algo como
root 986 1 0 Nov04 tty2 00:00:00 /sbin/mgetty ttyS0

então você vai ter de ver porque é que o mgetty está habilitado (ele está pegando a porta serial COM1).

Depois disso, você precisa ver que usuário você está usando, e se for o caso, você precisa ou alterar a permissão do device, ou então incluir seu usuário no grupo que permite ler e escrever do device.
A seguir é necessário ver o arquivo de lock, para ver se você está com a permissão correta. Pode ser que você tenha de modificar a permissão do diretório onde ficam os arquivos de lock, que é /var/lock. No caso da maior parte dos linux costuma estar quase correto (você precisaria de ter permissão 777 para esse diretório, e o usuário e grupo desse diretório seria root:uucp. No caso do RedHat o usuário e grupo são root:lock). Normalmente a permissão é 776, deixe em 777.

Depois disso, tente rodar aquele programa que vem junto com o javax.comm versão Solaris (que é o samples/BlackBox.java). Se conseguir, você conseguiu usar o rxtx.
Use o instalador do rxtx para que ele recompile o fonte C do driver e o instale o librxtxSerial.so em um diretório no seu PATH (ou LD_LIBRARY_PATH).

Olá,

ambas as respostas são válidas. Junto com algum outro material que encontrei no submundo da web consegui realizar a comunicação com sucesso no Linux, e estou preparando um tutorial que logo colocarei no ar.
Muito obrigado a todos,
Arthur.

Instalei tudo direitinho e na hora em que vou rodar o script SerialDemio aparece a seguinte situação:

Exception in thread “main” java.lang.VerifyError: (class:
gnu/io/RXTXPort$SerialOutputStream, method: write signature: ([BII)V) Illegal
use of nonvirtual function call
at gnu.io.RXTXPort.(RXTXPort.java)
at gnu.io.RXTXCommDriver.getCommPort(RXTXCommDriver.java)
at javax.comm.CommPortIdentifier.open(CommPortIdentifier.java:547)

Alguém poderia me ajudar a resolver esse problema?

André

Olá!

Tente chamar a máquina virtual utilizando o parâmetro -noverify. Muitas vezes isso resolve com esse tipo de exceção.
Escreva reportando o que ocorreu, estou coletando informações para um tutorial.

Obrigado e abraço.
Arthur.

Obrigado Arthur.
Coloquei o comando : java -noverfiy SerialDemo e funcionou.
Desculpe te incomodar mais uma vez, mas tem um outro probleminha. Eu rodei essa aplicação como root.

Quando vou rodar como usuário mortal, aparece a seguinte mensagem:

RXTX WARNING: This library requires the user running applications to be in
group uucp. Please consult the INSTALL documentation. More information is
avaiable under the topic ‘How can I use Lock Files with rxtx?’
check_lock_status: No permission to create lock file.

            please see: How can I use Lock Files with rxtx? in INSTALL

Será que você poderia me ajudar nisso tb??

grato,

André

não dá pra simplesmente vc adicionar o seu usuário nesse grupo?

Abraços!

bom, no /etc/group mudei desse jeito e não funcionou:

uucp::14:uucp,andre

é assim que eu deveria ter feito?

Olá

A resposta do thingol neste tópico parece que aborda a questão do root

[]s
Luca