内核代码:在哪里可以找到以及如何调试内核

问题描述 投票:0回答:2

最近我在桌面上安装了 Ubuntu 12.04 LTS ISO 映像。以下是我安装的内核版本的输出:

# uname -r
3.5.0-41-generic

我正在尝试开发 VFS,并想要内核源代码版本“3.5.0-41-generic”以供参考 - 我在哪里可以找到相同的版本?

查看日志并将其映射到内核代码的优秀内核调试选项有哪些?

如何以及使用哪个调试器来调试实时内核流执行?

有什么方法可以添加更多 printk 方法并重新修改模块?假设我想知道 FS 安装方法是如何工作的 - 我可以修改所需的 FS 代码(添加更多 printk 函数)重新编译并重新加载模块。现在借助我的新 printk 函数,我可以理解流程了

linux ubuntu linux-kernel ubuntu-12.04 linux-device-driver
2个回答
1
投票

为什么不安装 vanilla 3.5 内核并尝试在其上进行开发? 作为内核调试器,您可以使用 kGDB 或只是 printk。

但是...我建议你在运行于 qemu 的 Linux 上测试你的 vfs。 Qemu 能够调试正在运行的 Linux - 因此您可以将 gdb 连接到它并调试整个模拟系统。


0
投票

查找并下载内核源代码:

  • 对于特定于 Ubuntu 的内核源,请使用
    apt
    cmd:
sudo apt-get install linux-source

这将获取generic内核源代码。

要获取特定版本,请使用:

sudo apt-get source linux-image-6.11.8-generic
  • 您还可以从 kernel.org 下载原版/原始内核源代码。

内核调试选项:

  • 读取日志:使用
    dmesg
    cmd查看内核日志。
  • 在源代码中搜索:通过在源代码文件中搜索关键字(如
    grep -r "log text" /path/to/source
    )来将日志消息与代码匹配。
  • 追踪工具
    • 使用
      ftrace
      perf
      systemtap
      cmd 来跟踪执行路径。
    • 对于特定于文件系统的调试,请使用
       tracepoints
      cmd。

实时内核调试选项:

  • 使用KGDB
    • 在内核配置中配置 KGDB(
      CONFIG_KGDB=y
      CONFIG_GDBSTUB=y
      )。
    • 通过
      gdb
      连接它,使用:
      target remote /dev/ttyS0
      
  • 通过
    bpftrace
    等高级追踪工具来探索它。

添加
printk
并重新加载模块:

  • 修改内核模块:
    1. 找到 FS 子系统的内核源文件,如
      fs/super.c
    2. printk()
      添加到目标的内部函数(如
      mount
      函数)。
    3. 重建并安装模块:
      make modules
      sudo insmod your_module.ko
      
    4. 使用
      dmesg
      观看新日志。

注意:实时内核调试意味着在 Linux 内核主动运行时检查和修改它。

© www.soinside.com 2019 - 2024. All rights reserved.