GDB + KGDB를 사용한 Linux 커널 모듈 원격 디버깅, 원격 'g' 패킷 응답이 너무 깁니다.

GDB + KGDB를 사용한 Linux 커널 모듈 원격 디버깅, 원격 'g' 패킷 응답이 너무 깁니다.

Linux 커널을 원격으로 디버깅하려고 하는데 문제가 발생했습니다.

내 설정:

  • 대상 머신은 디버그 정보와 KGDB를 사용하여 구축한 맞춤형 커널 4.3이 포함된 Ubnutu Linux입니다.
  • Windows 및 Cygwin이 설치된 개발 머신입니다.

Linux 측의 직렬 포트와 개발 시스템 측의 USB를 사용하여 시스템에 연결하고 있습니다. 대상 머신에서: insmod를 사용하여 모듈 X를 로드했습니다.

>cat /sys/module/X/sections/.text
0xffffffffc046e000 
>cat /sys/module/X/sections/.bss
0xffffffffc04708c0 
>cat /sys/module/X/sections/.data
0xffffffffc0470000

"일부 매개변수"를 사용하여 커널을 부팅해야 한다는 내용을 읽었지만 Ubuntu에서 이를 수행하는 방법을 잘 이해하지 못해서 다음과 같이 했습니다.

>echo "ttyS0,115200 > /sys/module/kgdboc/parameters/kgdboc

또한 이것을 시도했습니다:

echo ttyS0 > /sys/module/kgdboc/parameters/kgdboc

그런 다음

>echo g > /proc/sysrq-trigger

이 시점에서 Linux 시스템이 정지됩니다. 이는 좋은 현상입니다. (gdb를 기다리는 중) cygwin을 연 Windows 시스템에서 vmlinux 및 Xo 파일을 루트 디렉터리에 넣고 소스 코드를 올바른 위치에 넣습니다. 그럼 난 달렸어

gdb ./vmlinux - b 115200
(gdb) add-symbol-file byt_adsp21479.o 0xffffffffc046e000 -s .bss 0xffffffffc04708c0 -s .data 0xffffffffc0470000
(gdb) set architecture i386:x86-64:intel

그런 다음 커널 모듈에 몇 가지 중단점을 설정하고 실행했습니다.

(gdb) target remote /dev/ttyS7 which is COM8

유효하며 입장 후

(gdb) continue

Linux 시스템이 해제되지만 Linux 시스템에서 중단점을 트리거해야 하는 작업을 실행하면 개발 시스템에 다음 메시지가 표시됩니다.

[New Thread 3264]
Ignoring packet error, continuing...
Remote 'g' packet reply is too long: 0840000000000000000e00080847c0ffffffff000100c0000000000300000000000000bc3b63360088ffff0000000000000000a03b63360088ffff983b63360088ffff000063360088ffff2f944e2fbd3b000020c00a360088ffff000000000000000000000000000000000300000000000000000000000000000000ccd7ceff7f0000ede146c0ffffffff4602000010000000180000000000000000000000

가장 이상한 점은 어느 시점에서 2개의 기능을 입력할 수 있었지만 동일한 오류 메시지가 표시되었다는 것입니다. 어떤 문제가 있을 수 있나요?

참고로 저는 시리얼을 통한 디버깅을 포기하고 이더넷을 통한 디버깅을 시도했기 때문에 여기로 갔습니다.http://sysprogs.com/VisualKernel/kgdboe/tutorial/ kgboe를 다운로드하고 빌드했지만 insmod kgdboe.ko를 실행하려고 하면 오류가 발생합니다.

insmod: Error: could not insert module kgdboe.ko : Unknown symbol module

dmesg를 실행하면 알 수 있습니다.

kgdboe: Unknown symbol set_memory_rw (err 0)

내 설정에 따라 커널 모듈을 디버깅하는 방법을 찾는 데 도움을 줄 수 있는 사람이 있습니까? 감사합니다!

관련 정보