目錄
一、前期準備
二、內核編譯
三、QEMU與GDB
1、QEMU調試參數
2、gdb vmlinux
一、前期準備
-
內核鏡像:bzimage
-
gdb:x86_64
-
QEMU:qemu-system-x86_64
-
前置知識:
(1)內核編譯
(2)通過busybox制作initramfs
(3)qemu運行內核
二、內核編譯
1、設置調試選項:make menuconfig
make menuconfig --->Kernel hacking --->Compile-time checks and compiler options --->DWARF version (Rely on the toolchain's implicit default DWARF version) --->(X) Rely on the toolchain's implicit default DWARF version
2、內核編譯:make -j$(nproc))
編譯結果:
-rw-r--r-- 1 root root 5371114 8月 9 14:03 System.map // ELF文件
-rwxr-xr-x 1 root root 307967696 8月 9 14:03 vmlinux // 符號映射表root@zh-vm:/home/WorkSpace/linux-5.14# file vmlinux
vmlinux: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), statically linked,
BuildID[sha1]=9a3f41d57e80433fed09832f9986319e48b13571, with debug_info, not strippedroot@zh-vm:/home/WorkSpace/linux-5.14# vim System.map
... ...
ffffffff82b491e4 T __early_make_pgtable
ffffffff82b49410 T do_early_exception
ffffffff82b49452 T x86_64_start_reservations
ffffffff82b49472 T x86_64_start_kernel
ffffffff82b494f4 T reserve_bios_regions
ffffffff82b49547 T x86_early_init_platform_quirks
ffffffff82b495ca T x86_pnpbios_disabled
ffffffff82b495d5 t set_reset_devices
ffffffff82b495e5 t debug_kernel
ffffffff82b495f2 t quiet_kernel
ffffffff82b495ff t init_setup
... ...
三、QEMU與GDB
1、QEMU調試參數
- cmdlink:nokaslr (禁用內核地址空間隨機布局)
- -S:開啟時阻塞CPU執行
- -s:開啟GDB服務器,端口1234
- -gdb tcp::1234 開啟GDM服務器,端口可以自己指定
2、gdb vmlinux
- target remote: 1234
- break start_kernel
- continue
- step
運行的時候需要稍微改一下Makefile
root@zh-vm:/home/WorkSpace/build# cat Makefile
initramfs:cd /home/WorkSpace/initramfs && find . -print0 | cpio -ov --null --format=newc | gzip -9 > /home/WorkSpace/build/initramfs.imgcpimage:cp /home/WorkSpace/linux-5.14/arch/x86_64/boot/bzImage ./bzImagerun:qemu-system-x86_64 \-kernel bzImage \-initrd initramfs.img \-m 512 \-nographic \-append "earlyprintk=serial,ttyS0 console=ttyS0 nokaslr" \-S \-s
運行測試: