인터넷에서 검색했지만 gdb를 사용하여 Linux 모듈을 원격으로 디버깅하는 올바른 단계를 찾을 수 없습니다. 나는 qemu를 시도하고 있지만 거기에서 많은 문제에 직면하고 있습니다. 사용할 수 있는 다른 도구가 있나요? 그렇지 않은 경우 Linux 모듈을 원격으로 디버깅하는 올바른 단계를 알려주실 수 있나요?
답변1
그렇게 어렵지는 않습니다. ~에서공식 커널 문서("만왕"으로 검색하지 마세요. 공식 문서를 검색하시면 덜 나쁜 정보를 찾으실 수 있습니다):
- 커널을 활성화 하고
KGBD
빌드 프로세스 중에 구성 옵션이CONFIG_GDB_SCRIPTS
켜져 있는지 확인하십시오. (커널 패키지를 빌드하는 방법에 대한 자세한 내용은 CentOS 문서를 참조하세요. 이것이 가장 쉬운 방법입니다.)- 달리기
make scripts_gdb
- 달리기
- 로컬에서 커널 기호를 쉽게 이해하려면 이 커널(
vmlinux
)을 호스트 시스템에 복사하세요. - QEMU에서 선택한 Linux 배포판을 실행하세요.
- QEMU의 GDB 스텁을 활성화하고 포트에서 수신 대기합니다. 즉, 사용하려는 포트 번호(1024보다 크고 21⁶보다 작아야 함)를 사용하여
qemu
실행합니다 .-gdb tcp::$SOMEPORT
$SOMEPORT
또는,-s
와 동일하게 실행됩니다-gdb tcp::1234
. -S
옵션을 제공하여 QEMU가 머신을 즉시 시작하지 않도록 보장
- QEMU의 GDB 스텁을 활성화하고 포트에서 수신 대기합니다. 즉, 사용하려는 포트 번호(1024보다 크고 21⁶보다 작아야 함)를 사용하여
- 호스트 컴퓨터에서 다음을 실행합니다.
gdb /path/to/the/kernel/vmlinux
- 에서
gdb
QEMU 스텁에 다음을 추가합니다target remote :$SOMEPORT
. - 이제 다음을 실행
continue
하여 가상 머신을 시작할 수 있습니다.