内核模块开发与调试全解析
1. 内核模块调试基础
在进行内核模块开发时,调试是至关重要的环节。通过 dmesg 命令结合 grep 可以过滤出我们感兴趣的信息。例如:
$ dmesg | grep ? -A0
[881089.811458] ? интересующий нас адрес: c0166a81
在不同的架构下,相同模块的大小可能存在差异。这种模块虽然可能无法加载,但可作为一种有效的调试手段,尤其在开发初期,能帮助我们检查模块的初始化值和使用的内核导出符号。
在使用 printk 输出信息时,添加一些特殊前缀(如 “?”, “!”, “+”, “++” 等)是有必要的。因为在某些发行版中,内核会在系统日志中输出大量诊断信息,添加前缀可以使用 grep 过滤出我们模块的信息。例如:
$ dmesg | grep ? -A2 -B2
[880807.435886] hwmon hwmon1: Undervoltage detected!
[880813.675740] hwmon hwmon1: Voltage normalised
[880827.647054] ? интересующий нас адрес: 801865e4
[880828.235703] hwmon hwmon1: Undervoltage detected!
[880834.475684] hwmon
超级会员免费看
订阅专栏 解锁全文
9249

被折叠的 条评论
为什么被折叠?



