우리는 워치독을 켜면 /dev/watchdog
1분 이내에 활성화되어 문자를 보내고 재설정된다는 것을 알고 있습니다. 설명은여기.
BBB에서 사용하는 프로세서AM335x내부 감시는 기본적으로 활성화되어 있습니다. 그러나 U-Boot 또는 Ubuntu가 시작되면 이 감시 기능이 비활성화됩니다. 운영 체제가 부팅되면 사용할 준비가 됩니다 /dev/watchdog
.
U-Boot나 커널이 부팅에 실패하더라도 워치독이 작동하는지 확인하고 싶습니다. 그렇다면 어떻게 할 수 있습니까?
- 커널과 U-Boot는 감시 타이머를 비활성화해서는 안 됩니다.
- 워치독의 기본 시간 제한은 운영 체제가 완전히 부팅될 수 있도록 U-Boot가 커널을 시작하기 전 1분 이상이어야 합니다.
U-Boot 코드나 Linux 커널 코드의 일부를 변경하는 것은 허용된다는 점을 언급하고 싶습니다. 그러나 외부 감시는 옵션이 아닙니다.
답변1
조사 결과, Linux 커널은 부팅 시 워치독을 비활성화하지 않지만 실제로는 타이머를 사용하여 워치독을 재설정한다는 사실을 발견했습니다. 커널 오류나 패닉이 발생하더라도 감시 타이머 오버플로로 인해 시스템이 재부팅되지 않도록 감시를 재설정합니다.
다음과 같은이 답변~을 위한이 문제에서 man proc
:
/proc/sys/kernel/panic
이 파일은 커널 변수 Patrick_timeout에 대한 읽기/쓰기 액세스를 제공합니다. 이 값이 0이면 커널은 패닉 상태에서 반복됩니다. 0이 아니면 커널은 이 시간(초) 후에 자동으로 다시 시작해야 함을 의미합니다.
당연히 0이 아닌 값을 파일에 전달해야 합니다. ~에 따르면이 답변, 값을 전달하려면 커널 패닉 후 다시 시작하기 전에 3초 동안 기다리도록 매개변수를 수정하고 추가 /proc/sys/kernel/panic
해야 합니다 ./etc/sysctl.conf
kernel.panic = 3
그러나 이것은 내 문제를 해결하지 못했습니다. 내가 발견한 다른 패닉 관련 문제를 조사하는 중 man proc
:
/proc/sys/kernel/panic_on_oops (Linux 2.5.68부터)
이 파일은 오류나 BUG가 발생할 때 커널의 동작을 제어합니다. 파일에 0이 포함되어 있으면 시스템은 계속을 시도합니다. 1이 포함된 경우 시스템은 몇 초 동안 지연된 후(klogd에 oops 출력을 기록할 시간을 제공하기 위해) 패닉 상태가 됩니다. /proc/sys/kernel/panic 파일도 0이면 머신이 재부팅됩니다.
내 문제는 패닉이 아니라 커널입니다. 이런! 따라서 kernel.panic_on_oops = 1
을 추가하면 /etc/sysctl.conf
플래그가 /proc/sys/kernel/panic_on_oops
1로 변경됩니다. 이제 커널이 중지될 때마다 3초 후에 다시 시작됩니다.