首页 > 解决方案 > 如何在不运行内核的情况下调试内核代码?

问题描述

我在看一些内核书籍,想调试一下spinlock_t用法,准备了如下demo代码:

////////////////////////////
// demo/spinlock.c
////////////////////////////

#include <linux/spinlock.h>

struct obj {
    spinlock_t spinlock;
}

int demo0() {
    struct obj o;
    spin_lock_init(o.spinlock);
}

int main(){
    demo0();
}

Makefile 看起来像:

######################
# demo/Makefile
######################

demo: spinlock.c
    gcc -o spinlock spinlock.c -I../linux-5.6.9/arch/x86/include -I../linux-5.6.9/include

文件树看起来像这样

├── demo
└── linux-5.6.9

虽然meke,它给了我一些错误(太多,我无法在这里列举),但似乎我错过了一些 GCC CFLAGS 或其他错误。

如何逐行调试内核代码?大多数谷歌结果是运行内核中的 GDB/Qemu 调试。有什么建议可以在不运行内核的情况下调试内核代码吗?

标签: gcclinux-kernel

解决方案


推荐阅读