最近我在桌面上安装了 Ubuntu 12.04 LTS ISO 映像。以下是我安装的内核版本的输出:
# uname -r
3.5.0-41-generic
我正在尝试开发 VFS,并想要内核源代码版本“3.5.0-41-generic”以供参考 - 我在哪里可以找到相同的版本?
查看日志并将其映射到内核代码的优秀内核调试选项有哪些?
如何以及使用哪个调试器来调试实时内核流执行?
有什么方法可以添加更多 printk 方法并重新修改模块?假设我想知道 FS 安装方法是如何工作的 - 我可以修改所需的 FS 代码(添加更多 printk 函数)重新编译并重新加载模块。现在借助我的新 printk 函数,我可以理解流程了
为什么不安装 vanilla 3.5 内核并尝试在其上进行开发? 作为内核调试器,您可以使用 kGDB 或只是 printk。
但是...我建议你在运行于 qemu 的 Linux 上测试你的 vfs。 Qemu 能够调试正在运行的 Linux - 因此您可以将 gdb 连接到它并调试整个模拟系统。
apt
cmd:sudo apt-get install linux-source
这将获取generic内核源代码。
要获取特定版本,请使用:
sudo apt-get source linux-image-6.11.8-generic
dmesg
cmd查看内核日志。grep -r "log text" /path/to/source
)来将日志消息与代码匹配。ftrace
、perf
或 systemtap
cmd 来跟踪执行路径。 tracepoints
cmd。CONFIG_KGDB=y
和 CONFIG_GDBSTUB=y
)。gdb
连接它,使用:
target remote /dev/ttyS0
bpftrace
等高级追踪工具来探索它。printk
并重新加载模块:fs/super.c
。printk()
添加到目标的内部函数(如 mount
函数)。make modules
sudo insmod your_module.ko
dmesg
观看新日志。注意:实时内核调试意味着在 Linux 内核主动运行时检查和修改它。