Quick QEMU

Cheatsheet for qemu

Debug Kernel

  1. Preparation, make sure you have already install these tools. Here, mine as follow:
  • gdb 10.1-4
  • qemu 5.2.0-3
  • make 4.3-3
  • binutil 2.36.1-2▫
  1. compile the kernel with debug configuration, we need three files here
  • vmlinux (symbols)
  • arch/x86-64-/boot/bzImage (kenel image in compressed format)
  • scripts/gdb/vmlinux-gdb.py (gdb scripts)
  1. Lauch the emulator at src directory by excuting command▫
qemu-system-x86_64 -enable-kvm -S -s \
    -kernel ./arch/x86_64/boot/bzImage \
    -initrd ./rootfs.cpio.gz -nographic \
    -append 'nokaslr console=ttyS0'
  • --nographic start without gui
  • -S will not run until connected with a gdb client
  • -gdb tcp::[port] run a gdbserver with open port at [port] by tcp

PS: -s tells QEMU to start a GDB server on port 1234. -S can be appended to pause the VM before starting to run.

  1. GDB debuger
    1. gdb vmlinux
    2. gdb: target remote :1234
    3. lx-symbols
    4. break start_kernel or hb start_kernel
    5. continute

BUGs FIX

  1. cannot insert breakpoints at 0xfffffffxxxxx

use nokaslr or turn off KASLR while compile by set .config with CONFIG_RANDOMIZE_BASE = n

  1. qemu output(endless rebooting):
   Booting from ROM...
   Probing EDD (edd=off to disable)... ok
   arly console in extract_kernel
   input_data: 0x0000000002c773b4
   input_len: 0x000000000090c470
   output: 0x0000000001000000
   output_len: 0x000000000173a968
   kernel_total_size: 0x00000000025a7000

   Decompressing Linux... Parsing ELF...

solution:
https://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git/commit/?id=e3d03598e8ae7d195af5d3d049596dec336f569f
just add serval lines at arch/x86/Makefile 223

ifdef CONFIG_X86_64  
LDFLAGS += $(call ld-option, -z max-page-size=0x200000)  
endif                                                                                                                                                                                                                                  ```       
posted @ 2021-04-22 19:00  司空亦墨  阅读(142)  评论(0编辑  收藏  举报