目录
一、前期准备
二、内核编译
三、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
运行测试: