나는 기계 쌍을 가지고 있습니다. 널 모뎀 직렬 케이블을 통해 서로 연결됩니다. 이러한 기계는 때때로 오작동을 일으키며 이를 진단하는 유일한 방법은 쌍의 다른 노드를 사용하여 해당 케이블을 이용하는 것입니다.
이러한 장치에는 직렬 장치에서 실행되도록 Getty가 구성되어 있습니다 /dev/ttyAMA0
. 이는 기본적으로 설정되어 있으며 가능한 한 기본 구성에 가깝게 만들고 싶습니다.
문제는 이것이다:
minicom
다른 장치에 로그인하는 데 비슷한 기능을 사용할 수 있도록 Getty가 장치 제어권을 포기하도록 할 수는 없는 것 같습니다 . 불행히도, 무언가가 즉시 다시 시작되는 것처럼 보이기 때문에 간단히 죽이는 것은 getty
작동하지 않습니다.
어떻게 getty
멈출 수 있나요?
답변1
(그런데 "GeTTY"라는 철자를 본 적이 없습니다. 정확하지 않은 것 같습니다.)
즉, getty
주석 처리 /etc/inittab
하고 실행하여 init q
구성을 다시 읽어 비활성화할 수 있습니다. systemd나 Upstart를 사용하지 않는 한, 그렇게 말하지 않으셨으니 사용하지 않는 것으로 가정하겠습니다.
더 긴 대답은 설정에 본질적으로 잘못된 것이 있고 결함이 있다는 것입니다. 두 개의 직렬 포트에서 실행될 때 getty
두 getty
프로세스는 서로 끝없이 채팅을 시작할 위험이 있습니다. 즉, 하나는 프롬프트를 보내고, 다른 하나는 이를 사용자 이름으로 해석하여 자체 프롬프트를 생성하게 하고, 원래 측에서는 사용자 이름으로 해석되는 식입니다.
이 문제를 처리하는 올바른 방법은 각 방향에 하나씩 두 개의 직렬 포트를 사용하는 것입니다. 시스템 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