[공유] kernel debugging with qemu!!

홍석85 2014.04.14 16:11 조회 수 : 2040 추천:2

안녕하세요. 근 2주에 걸친 삽질의 삽질 끝에 gdb와 qemu를 통해서
부질없이 흘러만 가던 setup_arch()를 붙잡는데 성공했습니다 :)
 
아래 준비사항과 진행방법을 공유하니 잘 따라하시면 될 것 같습니다.
(사실 gdb만 잘 빌드하시면 게임끝)
 
1. gdb 빌드
    - gdb는 코드를 수정해야 합니다. (다른 방법은 모르겠어요.)
    - 원인: qemu-system-x86_64를 통해 64bit kernel을 구동할때, gdb로 g_packet을 통해 정보(레지스터상태 등등) 날림으로
              remote debugging이 가능한 것 같습니다. 
              근데 64머신에서 64bit인 gdb가 qemu가 날려주는 g_packet의 size가 계속 크다며 징징대는게 문제였습니다.
              그래서 삽질을 하다.. 로직을 지웠버렸어요 ;)
              /gdb_source/gdb/remote.c의 6256줄을 보면(gdb 7.7기준) g_packet의 size를 검사하는 로직이 나옵니다.
              - 삭제할 코드                   

if (buf_len > 2 * rsa->sizeof_g_packet)

  error (_("Remote 'g' packet reply is too long: %s"), rs->buf);

      - 이제 위 코드를 삭제하고 빌드하시면 됩니다. 끝
 
2. qemu 준비
    - sudo apt-get install qemu로 깔끔하게 깔아주세요.
 
3. KERNEL 준비
    $ make ARCH=x86_64 menuconfig 를 통해서 설정에 들어가신 뒤 Kernel Hacking-->Compiling Kernel with Debugging info를
      체크한 뒤에 저장하고 종료하세요.
    $ make all
      --> clean build시 i5, 4Gb로 대략 4~50분 정도 걸리는 것 같네요.
    
    [빌드결과]
    - linux-3.10.4/arch/x86_64/boot/bzImage : qemu를 통해 돌릴 kernel image입니다.
    - linux-3.10.4/vmlinux : gdb로 debugging할 녀석입니다.
 
4. gdb로 kernel debugging...
    - 아래 커멘드로 qemu를 구동합니다. (경로에 유의하세요)
    $ qemu-system-x86_64 -s -S -m 4096m /dev/zero -nographic -kernel ~/linux-3.10.4/arch/x86_64/boot/bzImage
        -> ubuntu의 경우 kvm을 이용하려면 sudo로 하세요 뭐 이런 멘트가 나오는데 kvm은 안됩니다. 일반 qemu를 실행하세요.
    - 아까 빌드한 gdb로 vmliux를 debugging합니다. (경로에 유의하세요)
    $ gdb_source/gdb/gdb ~/linux-3.10.4/vmlinux
    (gdb) set architecture i386:x86-64:intel
    (gdb) target remote localhost:1234
    (gdb) b setup_arch
    (gdb) continue
         -> 약 5~10여초 후(early booting...)에 setup_arch를 단디 붙잡고 있는 늠름한 gdb를 만날 수 있습니다 :)
 
그럼.. 주말에 뵙겠습니다 :)
질문은 댓글로 다시거나 답이 늦어서 답답하시면 직접 연락주세요~
 
 
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
+ 번외. cgdb로 kernel debugging...
+     --> gdb는 source랑 같이 보기어려워 tui를 제공하긴 하는데, 따로 syntax highlighting이 없어 보기 불편합니다.
+     ---> cgdb를 설치하신 후 (apt-get install cgdb)
+     $ cgdb -d ~/gdb_source/gdb/gdb ~/linux-3.10.4/vmlinux
+     ---> 로 실행하시면 어마무시하게 이쁜 gdb를 만날 수 있습니다 :)
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
 
 
번호 제목 글쓴이 날짜 조회 수
공지 [공지] 커널 스터디 관련 Q&A 게시판 입니다. [5] woos 2016.04.09 2197
1525 부끄러움을 거두어야 할때. woos 2016.05.05 157
1524 커널 북스터디 다음엔 아키텍쳐 북스터디 해야합니다. [2] woos 2016.05.04 283
1523 답변 : 애플리케이션 메모리 레이아웃 [2] woos 2016.05.01 218
1522 참고 사이트 하나 - 리눅스 커널 맵 file Winstone 2016.05.03 428
1521 160430스터디_피드백과 운영자님_피드백에 관한 글입니다 [1] Steven 2016.05.02 199
1520 운영체제 기초 강의 입니다. [2] file Lolki 2016.05.01 477
1519 C조 의견 정리, 오픈채팅방 개설 및 30일 오프라인모임 참석자 조사 [51] 뒷북 2016.04.26 1025
1518 강남쪽에서 하는 스터디 그룹있나요? [4] woos 2016.04.29 311
1517 A조 자기소개, 책/장소 선정 [55] LiveFacter 2016.04.23 1168
1516 커널 B조 4월 30일 오프라인 참석자수 조사 [35] 황금돌고래 2016.04.25 545
1515 C조 교재 확정 및 30일 장소공지 [2] 뒷북 2016.04.27 289
1514 커널 스터디 D조, 오픈채팅방 개설 [52] 김재훈90 2016.04.23 1158
1513 C조 교재 및 장소 선정 의견접수 [40] 뒷북 2016.04.24 605
1512 커널 스터디 B조 의견접수 글입니다. [43] JIHOONS 2016.04.23 775
1511 커널 B조 실시간 의견 공유를 위해 오픈채팅 개설합니다. [6] psionic 2016.04.25 338
1510 VM관련 코드 분석에 도움이 될 자료 공유 [1] 홍석85 2014.06.02 1661
» [공유] kernel debugging with qemu!! [5] 홍석85 2014.04.14 2040
1508 build error 나는 원인을 찾았습니다. [1] 도영주 2014.03.27 1372
1507 4단계 페이징 그림 [1] file 시갈 2014.03.19 3103
1506 pgd의 매크로 값 계산 [1] file 이성훈 2014.03.18 1245
XE Login