como redefinir / dev / ttyS0

4

Estou tentando me conectar a um robô Khepera usando a interface serial (executando o Scientific Linux 6.1) Eu usei o comando screen /dev/ttyS0 para comunicar o que funcionou bem, mas depois quis fechá-lo e usar o MATLAB, mas não encontrei maneira de fechar essa sessão, então eu apenas cliquei em X na tela de execução do terminal.

Agora, minha porta ttyS0 não pode ser aberta. Tanto o MATLAB quanto a tela dizem que ele não pode abrir essa porta.

Como posso redefinir a porta ttyS0? Quero dizer, uma opção é reiniciar o computador. Mas como fazer isso sem reiniciar?

Qual é a maneira correta de encerrar uma comunicação serial?

Além disso, o que o comando a seguir faz? Eu encontrei com o Google e rodá-lo, mas nada aconteceu. Fez alguma coisa ruim que eu preciso consertar?

/sbin/agetty -L -f /etc/issueserial 9600 ttyS0 vt100
    
por hyperknot 04.10.2011 / 13:03

2 respostas

4

Você pode emitir o comando screen -ls para obter um status de todas as telas atuais sessões. Em seguida, use a opção screen -r para "reconectar" ao desconectado screen session e a opção -X para matar a sessão.

Aqui está uma sessão de shell de exemplo. Estou usando as opções -d -m para iniciar o screen session no modo "desanexado" (em segundo plano) para simular o fechamento do sessão usando o X on the terminal window running screen . O 5207 de screen ' -ls output é o número de ID do processo, que será usado para "reconectar" a essa sessão screen específica.

$ screen -d -m /dev/ttyS0
$ screen -ls
There is a screen on:
    5207..host  (10/04/2011 10:16:50 AM)    (Detached)
1 Socket in /var/run/screen/S-user.

$ screen -r 5207 -X kill
$ screen -ls 
No Sockets found in /var/run/screen/S-user.

$ 
    
por 04.10.2011 / 16:26
1

What is the proper way to terminate a serial communication?

De um ponto de vista de programação - simplesmente close() o descritor de arquivo aberto. Sair do programa faz isso automaticamente. No entanto, você não saiu da tela.

Um dos recursos mais usados do GNU Screen é a capacidade de separar e reconectar-se a sessões. Quando você fechou a janela, a parte "servidor" da Tela permaneceu em execução, e você pode reconectar a ela com screen -r .

Use C-a , k para realmente matar uma janela de tela.

Also, what does the following command do? I've found it with Google and run it but nothing happened. Did it do anything bad what I need to fix?

/sbin/agetty -L -f /etc/issueserial 9600 ttyS0 vt100

agetty é um programa de monitor TTY. Seu trabalho é reinicializar a configuração do dispositivo de terminal e para exibir um prompt de login; você pode vê-lo em ação, alternando para os prompts de login do console em tty1 ... tty6 . 1

Nesse caso, quando você iniciou agetty no seu final, ele enviou um prompt de login 2 para o robô, o que provavelmente descartou como lixo. Normalmente, é inofensivo, a menos que o robô interprete de alguma forma " login: " como "iniciar aquisição mundial". A configuração feita por agetty também não deve quebrar nada.

1 Note que o getty não lida com logins reais - apenas pede o nome do usuário. Depois de inseri-lo, agetty inicia /sbin/login para executar o processo de login.

2 Ele também teria enviado o conteúdo do arquivo de texto /etc/issueserial , mas desde que você encontrou o comando no Google, é mais provável que você nem tenha esse arquivo.

    
por 04.10.2011 / 15:07