2013-04-29 5 views
4

Qemu에서 cavium octeon의 mips64 Linux 커널을 에뮬레이트하려고합니다. 현재 사용 모드 초기화 코드에 문제가 있으며 init.i를 디버그하고 싶습니다. Qemu를 -s -S 옵션을 사용하여 시작합니다. 명령 줄 및 명령을 --debugger/OCTEON-SDK/도구/빈/MIPS64-OCTEON - 리눅스 GNU-gdb를 /OCTEON-SDK/linux/kernel_2.6/linux/gem을 사용하여 Qemu에서 디버그 초기화

DDD를 사용하여 gdb를 실행의 vmlinux

다음 명령으로 GDB 부착

목표 원격 로컬 호스트 1234

gdb는 현재 커널 공간에서 실행중인 명령어 만 표시하고 있습니다.

내가 묻고 싶은 것은 커널 공간의 경우처럼 usermode init 및 libraries 명령어를 단계별로 디버깅 할 수있는 방법이 있습니까? 예를 들어 printf이 init에서 발행 된 경우 라이브러리에서 실행중인 지침과 컨트롤이 커널로 반환되는 방법을보고 싶습니까?

+0

MIPS에 대한 gdb 지원이 커널과 사용자 공간 간의 전환을 처리 할 수 ​​있는지 여부에 따라 다릅니다. 커널의 resume_userspace에 중단 점을 넣고 거기에서 한 단계 씩 전환을 처리하는지 확인하십시오. – stsquad

답변

0

나는에 설명 된 절차를 사용하여 디버그 비지 박스의 /sbin/init 단계로 처리했다 : 당신이 명심해야 Is it possible to use gdb and qemu to debug linux user space programs and kernel space simultaneously?

만 추가 사항은 다음과 같습니다

  • /sbin/init

    때문에, 단지 busybox에 심볼릭 링크 /bin/busybox을 객체 파일로 사용해야합니다.
  • /sbin/init의 "main"함수는 실제로 init_main이고, t를 호출하는 BusyBox의 규칙 그는 각각의 의사 실행 가능 파일에 대해서 주 <exec>_main

약간 흐릿 해 보이지만 대부분 효과가 있습니다.