gcc - 如何在不运行内核的情况下调试内核代码?
问题描述
我在看一些内核书籍,想调试一下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 调试。有什么建议可以在不运行内核的情况下调试内核代码吗?
解决方案
推荐阅读
- php - 为什么在 phpmyadmin 上登录提交后出现 403 错误
- android - 如何实现动态 API 处理?
- laravel - 如何以laravel方式从远距离关系中获取计数?
- c# - 如何正确地从 ViewModel 调用 Dialog?
- web - 利用浏览器缓存 - 我已启用此功能,但 GT Metrix 未显示
- c# - DialogOpenedAttached 中的“TypeConverter 无法从 System.String 转换”
- vue.js - 如何用 Font Awesome 图标替换默认的 Quill.js dropdown.svg?
- html - 是否可以使特定 div 类中的最后一个 p 具有特定的 css?
- c# - 序列化所有 Kendo Grid 页面的数据
- python-3.x - 将我的文件保存在共享驱动器上 google colab