tty funciona, mas não pode executar programas

0

Então, eu fui bisbilhotar /dev/ttyS0 e /dev/ttyUSB0 , tentando fazer com que alguns acessórios de radioamador funcionassem, e o quebrei. ttyS0 controla a transmissão de rádio, e se eu rodar cat /dev/ttyS0 como usuário normal, o rádio transmite.

No entanto, se eu executar o software do modem (FLdigi), que anteriormente funcionava com o rádio usando ttys0 , ele não funciona. Ao iniciar o programa, há uma mensagem no log dizendo "teste de porta serial com falha". Eu estou em ambos os grupos "dialout" e "uucp", então acho que deveria estar funcionando.

Uma coisa que eu lembro de correr é sudo chmod 777 /dev/ttyS0 . Eu não tenho certeza do que eu deveria definir isso de volta. Alguma idéia de por que eu posso acessá-lo enquanto o software que eu executo não pode, mesmo que seja do mesmo usuário?

    
por Ross Wardrup 16.01.2016 / 21:56

1 resposta

0

  • Verifique se nenhum aplicativo tem a porta aberta quando você quiser usá-lo.

  • Verifique se não há mensagens no log do kernel (use dmesg ).

  • Verifique o que exatamente está acontecendo em seu aplicativo - execute-o em strace , que informará os syscalls feitos pelo aplicativo. Você provavelmente quer que você use algo como:

    $ strace -f -s 512 -o /path/to/application.log.strace application ...
    

que também irá strace children processa, log strings ap para seu 512º byte e tudo o que vai acabar em /path/to/application.log.strace , as reticências significam possíveis argumentos para aplicação. Você também pode informar strace para anexar a um processo em execução identificado por PID ( -p argument). Veja a página strace(1) man para mais informações. Em vez disso, no final do log, você deve conseguir encontrar uma chamada write() que imprime a mensagem de erro. As chances são de que relativamente logo antes disso será um open() ou write() (no arquivo do dispositivo) que retornou -1. Isso pode dar uma ideia de qual é o motivo do erro.

Como uma observação sobre as permissões: você não quer usar chmod 777 , pois isso torna o arquivo executável e isso nunca é uma boa idéia com qualquer outra coisa, além de executáveis e diretórios. Para arquivos de dispositivos (dependendo de sua natureza), valores razoáveis são 0640 ou 0660, o que permite acesso total para root e acesso de leitura ou leitura / gravação para grupo (do qual o usuário em questão deve ser um membro para obter as permissões - no seu caso) é provável que o grupo dialout que você mencionou).

Na maioria dos casos, você também deseja adicionar um zero (por exemplo, chmod 0664 , já que remove todos os bits suid, o que geralmente é uma boa ideia).

    
por 16.01.2016 / 23:54

Tags