gdb调试kernel

kernel启动脚本

$ cat open.sh
#!/usr/bin/bash

qemu-system-x86_64 \
        -kernel /home/deck/sn512/linux-7.0.12/arch/x86_64/boot/bzImage \
        -m 4G \
        -smp 4 \
        -drive file=/home/deck/sn512/disk.raw,format=raw \
        -append "root=/dev/sda rw console=ttyS0 init=/init nokaslr" \
        -nographic -s -S

启动gdb,加载内核

(gdb) file /home/deck/sn512/linux-7.0.12/vmlinux

 

(gdb) target remote :1234

插入模块

insmod scull.ko

手动加载模块符号表

cat /sys/module/scull/sections/.text
(gdb) add-symbol-file /home/deck/ldd3_example/scull.ko 0xffffffffc0000000 

自动加载模块符号表

(gdb) source kernel/scripts/gdb/linux-gdb.py
(gdb) lx-modules-load

加断点,当运行到scull_read函数时停止


(gdb) b scull_read
(gdb) c
(gdb) layout src

手动创建设备节点

cat /proc/devices | grep scull
mknod /dev/scull0 c 247 0

gdb相关操作

bt    # 打印调用栈
n   # 执行下一步,遇到函数不进入
s   # 执行下一步,遇到函数进入
ptype # 打印变量类型

 

posted @ 2026-06-22 14:04  hhjyqj  阅读(3)  评论(0)    收藏  举报