
저는 Ubuntu Wily HWE 커널과 함께 Linux 4.2.0, Ubuntu 14.04를 사용하고 있습니다(이것이 제가 실행 중인 것입니다).
가지다불쾌한 실수MacBook 11,4 및 11,5 모델에서는 랩톱이 실제로 종료되지 않으며 Power down
커널 메시지에 도달한 다음 종료되지 않고 정지되는 것처럼 보입니다. 이 오류로 인해 일시 중지 및 재개가 불가능할 수도 있습니다. 흥미롭게도 reboot
호출할 때는 나타나지 않고 기계를 중지하려고 할 때만 나타납니다.
세부 사항은 그다지 관련이 없지만 무엇입니까?예중요한 것은 디버깅 방법입니다. strace
커널이 종료된 동안 커널을 디버깅하고 어떻게든 출력을 관찰할 수 있는 방법이 있습니까 ? 전원 차단 논리로 인해 시스템 호출이 영원히 중단되고 이상한 이유로 반환되지 않을 것이라고 확신합니다. 어떤 시스템 호출이 작동하지 않는지 알아낼 수 있다면 계속해서 알아낼 수 있습니다.왜작동하지 않습니다. 종료 실패를 일으키는 하드웨어가 정확히 무엇입니까?
커널 종료 디버깅을 위한 표준 관행이 있습니까? 특별한 하드웨어가 필요합니까? 커널에 대한 패치를 작성할 수 있지만 작동하지 않는 시스템 호출을 찾을 수 없으면 이 문제를 어디서부터 찾아야 할지조차 모릅니다.
답변1
수행해야 할 작업에 대한 대략적인 개요는 다음과 같습니다.
- 소스 코드를 다운로드하고 커널을 컴파일하여 디버깅을 활성화합니다(구성->커널 해킹).
- kgdb 패치 설치
- 다른 컴퓨터의 직렬 포트를 통해 대상에 연결합니다. 대상은 다른 머신일 수도 있고 qemu나 bochs와 같은 에뮬레이터일 수도 있습니다.
- 소스 코드에서 종료 루틴을 식별합니다.
- 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에 있음)를 블랙리스트에 추가한 다음 통과합니다. 전원 주기 테스트가 수행됩니다. 드라이버 코드가 오작동하는 드라이버를 식별합니다.