디버그 커널을 끄시겠습니까?

디버그 커널을 끄시겠습니까?

저는 Ubuntu Wily HWE 커널과 함께 Linux 4.2.0, Ubuntu 14.04를 사용하고 있습니다(이것이 제가 실행 중인 것입니다).

가지다불쾌한 실수MacBook 11,4 및 11,5 모델에서는 랩톱이 실제로 종료되지 않으며 Power down커널 메시지에 도달한 다음 종료되지 않고 정지되는 것처럼 보입니다. 이 오류로 인해 일시 중지 및 재개가 불가능할 수도 있습니다. 흥미롭게도 reboot호출할 때는 나타나지 않고 기계를 중지하려고 할 때만 나타납니다.

세부 사항은 그다지 관련이 없지만 무엇입니까?중요한 것은 디버깅 방법입니다. strace커널이 종료된 동안 커널을 디버깅하고 어떻게든 출력을 관찰할 수 있는 방법이 있습니까 ? 전원 차단 논리로 인해 시스템 호출이 영원히 중단되고 이상한 이유로 반환되지 않을 것이라고 확신합니다. 어떤 시스템 호출이 작동하지 않는지 알아낼 수 있다면 계속해서 알아낼 수 있습니다.작동하지 않습니다. 종료 실패를 일으키는 하드웨어가 정확히 무엇입니까?

커널 종료 디버깅을 위한 표준 관행이 있습니까? 특별한 하드웨어가 필요합니까? 커널에 대한 패치를 작성할 수 있지만 작동하지 않는 시스템 호출을 찾을 수 없으면 이 문제를 어디서부터 찾아야 할지조차 모릅니다.

답변1

수행해야 할 작업에 대한 대략적인 개요는 다음과 같습니다.

  1. 소스 코드를 다운로드하고 커널을 컴파일하여 디버깅을 활성화합니다(구성->커널 해킹).
  2. kgdb 패치 설치
  3. 다른 컴퓨터의 직렬 포트를 통해 대상에 연결합니다. 대상은 다른 머신일 수도 있고 qemu나 bochs와 같은 에뮬레이터일 수도 있습니다.
  4. 소스 코드에서 종료 루틴을 식별합니다.
  5. gdb에서 중단점을 설정하고 중단이 나타날 때까지 단계별로 진행합니다.

kgdb를 사용하여 커널 디버깅을 검색하면 이러한 단계에 대한 자세한 정보를 찾을 수 있습니다.

이것가이드디버깅 환경을 설정하는 데 도움이 될 수 있습니다.

답변2

커널 로그를 확인하십시오.

nano /var/log/kern.log

올바르게 닫히면 모든 관련 정보가 포함되며 필요한 디버깅 정보가 제공됩니다.

dmesg도 확인할 수 있습니다

nano /var/log/dmesg

또한 다음과 같이 추가될 이전 시작/종료의 백업도 볼 수 있습니다.

dmesg.0 kern.log.1

거기에는 오래된 기록 보관소도 있습니다.

커널에 더 많은 옵션을 추가하여 이를 더욱 자세하게 만들 수 있습니다.

  • CONFIG_PRINTK_TIME - dmesg에 타임스탬프 추가

  • CONFIG_DEBUG_KERNEL - 커널 디버깅 켜기

  • CONFIG_DETECT_HUNG_TASK -
    커널 정지 원인을 식별하는 데 도움이 됩니다.

  • CONFIG_DEBUG_INFO - 커널을 디코딩할 수 있는지 확인하세요.

  • CONFIG_EARLY_PRINTK

  • CONFIG_LOG_BUF_SHIFT=21 - 커널 버퍼 로그 크기를
    최대 버퍼 로 설정

  • CONFIG_NETCONSOLE=m - netconsole을 모듈로 컴파일

답변3

내 생각에 중단은 전원 상태 변경 호출이나 이와 유사한 장치 드라이버에서 반환되지 않는 것입니다. 따라서 printk를 자유롭게 사용하지 않는 한 유용한 디버깅 메시지는 없을 것입니다.

빠르고 더러운 해킹을 사용하여 이를 확인하려면 Wi-Fi, 네트워킹 등과 같은 커널 부팅 명령줄에서 필수적이지 않은 모든 드라이버(grub.cfg에 있음)를 블랙리스트에 추가한 다음 통과합니다. 전원 주기 테스트가 수행됩니다. 드라이버 코드가 오작동하는 드라이버를 식별합니다.

관련 정보