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 사용 시)