안녕하세요. 근 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를 만날 수 있습니다 :)
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
댓글 5
.
어마무시한 사람ㅋㅋㅋㅋ
당신을 의지의 한국인으로 임명합니다..