SW 개발

[linux Kernel] linux kernel 에서 Unable to handle kernel 출력후 멈춤증상

. . . 2020. 6. 26. 17:38
반응형

linux kernel 에서의 에러 증상

부팅도중.. 혹은 동작중에.. Unable to handle kernel 메시지가 뜨면서 아예 멈춘다면 다음의 내용을 확인해볼것

kernel panic 처리 이슈

만약 해당 메시지이후에 정보가 더 나오고... 멈춰있다면 panic 에대한 처리가 안되어있는것이다.

kernel panic 처리후에도 멈춰있다면?

아마도 panic 에 대한 정보를 출력하다가 아예 뻗었을것이다.

Unable to handle kernel 메시지는 die_kernel_fault() 함수에 정의되어있다.

현재 개발중인 arm64 보드의 경우 arch/arm64/mm/fault.c 에 해당 함수가 정의되어있다.

static void die_kernel_fault(const char *msg, unsigned long addr,
           unsigned int esr, struct pt_regs *regs)
{
  bust_spinlocks(1);

  pr_alert("Unable to handle kernel %s at virtual address %016lx\n", msg,
     addr);

  mem_abort_decode(esr);

  show_pte(addr);
  die("Oops", regs, esr);
  bust_spinlocks(0);
  do_exit(SIGKILL);
}

위와같은 내용이 있는데... 문제가되는 시점은 해당 각각의 프린트를 하는것이 문제가 되는경우가있다.

특히 pr_alert("Unable to handle kernel %s at virtual address %016lx\n", msg ... 부분과 show_pte(addr); 부분이 문제가 발생하는 경우가 많다.

panic 처리하면서 넘어온 addr 정보를 접근하다보면, 아예 커널이 뻗는경우가 발생한다는것이다. 해당증상발생시, 아예 리부팅이 되지 않으며, 그냐말로 멈.춤. 상황이 발생하여 아무것도 조치가 안된다.

해결방법

만약 Unable to handle kernel 메시지후에 멈춰있다면 die_kernel_fault() 함수의 내용을 뜯어 고쳐라.

패닉에대한 에러정보를 표시하는중에 죽는경우가 발생하므로, 해당의 정보 표시내용을 아예 삭제하는것도 좋은방법이다.

반응형