Getty가 소유한 직렬 포트를 해제하는 방법

Getty가 소유한 직렬 포트를 해제하는 방법

나는 기계 쌍을 가지고 있습니다. 널 모뎀 직렬 케이블을 통해 서로 연결됩니다. 이러한 기계는 때때로 오작동을 일으키며 이를 진단하는 유일한 방법은 쌍의 다른 노드를 사용하여 해당 케이블을 이용하는 것입니다.

이러한 장치에는 직렬 장치에서 실행되도록 Getty가 구성되어 있습니다 /dev/ttyAMA0. 이는 기본적으로 설정되어 있으며 가능한 한 기본 구성에 가깝게 만들고 싶습니다.

문제는 이것이다:

minicom다른 장치에 로그인하는 데 비슷한 기능을 사용할 수 있도록 Getty가 장치 제어권을 포기하도록 할 수는 없는 것 같습니다 . 불행히도, 무언가가 즉시 다시 시작되는 것처럼 보이기 때문에 간단히 죽이는 것은 getty작동하지 않습니다.

어떻게 getty멈출 수 있나요?

답변1

(그런데 "GeTTY"라는 철자를 본 적이 없습니다. 정확하지 않은 것 같습니다.)

즉, getty주석 처리 /etc/inittab하고 실행하여 init q구성을 다시 읽어 비활성화할 수 있습니다. systemd나 Upstart를 사용하지 않는 한, 그렇게 말하지 않으셨으니 사용하지 않는 것으로 가정하겠습니다.

더 긴 대답은 설정에 본질적으로 잘못된 것이 있고 결함이 있다는 것입니다. 두 개의 직렬 포트에서 실행될 때 gettygetty프로세스는 서로 끝없이 채팅을 시작할 위험이 있습니다. 즉, 하나는 프롬프트를 보내고, 다른 하나는 이를 사용자 이름으로 해석하여 자체 프롬프트를 생성하게 하고, 원래 측에서는 사용자 이름으로 해석되는 식입니다.

이 문제를 처리하는 올바른 방법은 각 방향에 하나씩 두 개의 직렬 포트를 사용하는 것입니다. 시스템 1의 콘솔 직렬 포트는 시스템 2의 추가 직렬 포트에 연결되고, 시스템 2의 콘솔 직렬 포트는 시스템 1의 추가 직렬 포트에 연결됩니다. 두 시스템 모두의 "추가" 직렬 포트는 실행되지 않으므로 getty(콘솔 직렬 포트만 실행됨) getty비활성화되지 않으며 포트는 등에서 직접 사용할 수 screen있습니다 cu.

"추가" 직렬 포트의 경우 시스템에 내장 직렬 포트가 충분하지 않으면 USB 직렬 포트 어댑터를 사용할 수 있습니다. 이러한 포트는 시스템이 완전히 부팅된 후에만 액세스할 수 있기 때문에(콘솔 직렬 포트와 달리) 부팅 시퀀스가 ​​절반이 될 때까지 초기화되지 않는 USB 버스에 있을 수 있습니다.

답변2

정지 신호를 보낼 수 있습니다. 다음까지 다시 시작되지 않습니다.아르 자형아니면 다른 신호를 보내세요.

sudo kill -19 <pidOfGetty>

현재 중지되었는지 확인할 수 있는 방법은 다음과 같습니다.

ps a | grep getty

root       948  0.0  0.0   4656  2032 tty5     Ts+  Sep20   0:00 /sbin/getty -8 38400 tty5
root       958  0.0  0.0   4656  1880 tty2     Ss+  Sep20   0:00 /sbin/getty -8 38400 tty2

프로세스 상태 코드는 프로세스 T가 중지되었음을 나타냅니다. tty5의 프로세스 948과 같습니다.

답변3

Tomasz의 답변의 문제점은 getty를 표시하는 프로세스의 pid를 종료해도 아무 작업도 수행되지 않을 수 있다는 것입니다. inittab이 "restart"(보통 getty를 통해)로 설정되어 있으면 Linux는 이를 종료하더라도 다시 시작합니다.

한 가지 해결책은 inittab 줄을 주석 처리하는 것입니다.

#AMA0:12345:respawn:/bin/start_getty 115200 ttyAMA0 vt102

그런 다음 init 프로세스에 inittab을 새로 고치도록 지시합니다.

kill -HUP 1

이 작업이 완료되면 다음 스크립트를 사용하여 올바른 프로세스를 종료할 수 있습니다.

for pid in $(ls -l /proc/[0-9]*/fd/* | grep /dev/ttyAMA0 | awk '{ print $9 }' | awk -F/ '{ print $3 }'); do
    echo "killing $pid"
    kill -9 $pid
done

이제 포트가 해제되어 직렬 포트로 사용할 수 있습니다.

포트를 해제하기 위해 어떤 pid를 종료해야 하는지 간단히 찾으려면 다음을 입력하면 됩니다.

ls -l /proc/[0-9]*/fd/* | grep /dev/ttyAMA0

관련 정보