답변:
커널 패닉은 BSOD와 동일하며 복구 할 수없는 IIRC입니다. 그러나 작은 실패는 커널의 일부 오류를 나타내는 OOPS입니다.
panic
n 초 후에 커널을 재부팅 하는 매개 변수를 사용할 수 있습니다 . 이런 경우 GRUB에 폴백 커널로 전환하도록 지시 할 수 있습니다.emergency sync
버퍼를 플러시하는 것입니다 (아직 가능할 때).
Linux 커널 패닉은 커널 로직이 정상 로직의 연속 실행을 불가능하거나 무책임하게 만드는 조건이 존재한다고 판단 할 때 커널이 실행하는 서브 루틴 호출입니다.
커널은 다음과 같은 경우에 패닉을 호출 할 수 있습니다.
3.X 커널에서 패닉이 호출되는 조건은 약 950 가지입니다. 패닉 서브 루틴은 먼저 커널 스택 덤프 및 CPU 레지스터를 콘솔에 인쇄합니다. 그런 다음 충돌 kexec 커널이 구성된 경우 kexec 커널을 부팅합니다. 그렇지 않으면 패닉 루틴이 모든 스핀 록을 파열시키고 비상 재시작을 수행합니다.
oops는 특권 (즉, 커널) 모드에서 실행하는 동안 발생하는 CPU 예외에 대해 CPU 예외 핸들러에서 호출되는 서브 루틴입니다. 커널 코드 오류나 하드웨어 오류 또는 특정 예외를 발생시키는 외부 조건으로 인해 예외가 발생할 수 있습니다. 예외 처리기는 CPU 레지스터 및 모듈 목록과 함께 커널 로그를 인쇄합니다. 패닉 호출과 달리 커널 논리 자체는 CPU 예외 처리기 컨텍스트 외부에서 oops를 호출하지 않습니다.
커널이 kexec에 대해 구성된 경우, oops로 인해 kexec 커널이 부팅됩니다. 그렇지 않으면 인터럽트 처리기를 실행하는 동안 예외가 발생하면 oops로 인해 커널 패닉 호출이 발생합니다. 그렇지 않으면 커널이 "패닉 온 oops"로 구성된 경우 oops는 패닉 호출을 발생시킵니다. 그렇지 않으면 커널은 예외 처리기를 종료하고 실행을 재개합니다. 커널이 예외 처리기를 종료하고 실행을 재개하면 커널의 무결성이 의심됩니다.
CPU 예외 처리기는 아키텍처에 따라 다릅니다. 이들은 일반적으로 arch / * / kernel / traps.c로 구현되며 인터럽트 테이블을 설정하는 아키텍처 별 커널 항목 코드에서 설정됩니다. 예를 들어, 참조 arch/powerpc/kernel/traps.c
및 arch/powerpc/kernel/head_fsl_booke.S
.
커널 패닉 및 oops 조건은 kmsg_dump
충돌 디버깅 정보를 RAM에 저장하거나 oops가 인터럽트 컨텍스트에서 발생하지 않는 한 메모리를 플래시하는 데 사용할 수 있는 루틴 을 호출하도록 구성 할 수 있습니다.이 경우 "kmsg_dump"루틴은 MTD가 아닌 RAM에 저장하십시오. RAM에 저장하는 경우 a) kexec 부팅 또는 비상 재시작 부팅 중에 사용 된 RAM 영역을 덮어 쓰지 않도록하고 b) kexec 커널 또는 부트 로더 로직에서 메모리 영역을 수집해야합니다.