Linux/Kernel
Kernel) 디버깅을 연습을 위한 환경 셋팅(x86 환경)
하이오야이
2025. 5. 19. 17:09
QEMU Cheat Sheet (x86_64, 커널 디버깅 중심)
qemu 가상머신에서 컴파일된 커널이미지를 실행 시키는 명령어입니다.
rootfs 없이 커널만을 실행이 가능합니다.
qemu-system-x86_64 \
-kernel arch/x86/boot/bzImage \
-append "console=ttyS0 nokaslr" \
-nographic
-s -S
핵심 옵션
옵션 | 설명 |
-kernel bzImage | 부팅할 커널 이미지 (압축된 bzImage) 지정 |
-append "..." | 커널 부트 인자 전달 (console, init, nokaslr 등) |
-nographic | VGA 끄고 시리얼로 모든 출력 (터미널 기반) |
-s | GDB 서버 포트 1234 열기 (= -gdb tcp::1234) |
-S | 부팅 직후 CPU 정지 (GDB 붙기 전까지 실행 멈춤) |
CPU / 메모리 관련
옵션 | 설명 |
-smp N | CPU 코어 수 설정 (-smp 4) |
-m SIZE | 메모리 용량 설정 (-m 1024 → 1GB) |
-cpu qemu64 | CPU 모델 선택 (host, qemu64, max 등) |
루트 파일 시스템 (옵션으로 연결)
옵션 | 설명 |
-initrd rootfs.cpio | initramfs 이미지 지정 |
-hda rootfs.img | 하드디스크 이미지 연결 |
`-drive file=img,format=raw | qcow2` |
디버깅 & 개발 관련
옵션 | 설명 |
-gdb tcp::1234 | GDB 서버를 1234 포트에 염 (=-s) |
-no-reboot | panic 후 자동 리부트 방지 (로그 확인에 유용) |
-serial mon:stdio | 시리얼 포트를 현재 터미널에 연결 |
-d int,cpu_reset | 내부 디버그 로그 활성화 |
-trace events=file | 특정 QEMU trace 이벤트 추적 |
콘솔 / 그래픽 관련
옵션 | 설명 |
-display none | 그래픽 디스플레이 비활성화 |
-serial stdio | 시리얼 출력을 현재 터미널로 연결 |
-monitor none | QEMU 모니터 비활성화 |
예시: GDB 연동용 QEMU 실행
qemu-system-x86_64 \
-kernel arch/x86/boot/bzImage \
-append "console=ttyS0 nokaslr" \
-nographic \
-s -S \
-m 512 \
-smp 2
추천 부트 인자 (-append)
인자 | 설명 |
console=ttyS0 | 시리얼 콘솔 사용 (nographic 출력에 필수) |
init=/bin/sh | busybox init 실행 테스트용 |
nokaslr | 주소 랜덤화 끄기 (GDB 디버깅 용이) |
root=/dev/ram0 | 루트파일 시스템 위치 지정 (initramfs 사용 시) |