内核黑客环境

raj*_*h87 22 linux debugging kernel development serial-console

我一直在像 uCOS、ThreadX 这样的嵌入式操作系统中工作。虽然我已经在 Linux 中编写了应用程序,但现在我打算开始学习 Linux 内核。我有几个关于环境的问题。

  1. 哪个是最好的发行版,哪个具有易于使用的内核开发工具?(到目前为止,我已经使用过 RHEL 和 Fedora。虽然我对这些很满意,但看起来 Ubuntu 也有内置脚本可以轻松编译内核,例如make_kpkg等)

  2. 你能描述内核调试的最佳设置吗?在调试其他嵌入式操作系统时,我使用了串口转储进度、JTAG 等。Linux 内核开发人员使用哪种设置?(我的带串口的测试台 PC 是否足以满足我的需要?如果是,如何配置内核以转储到串口?)我打算将内核消息重定向到串行控制台,该控制台将在我的笔记本电脑中读取。

  3. 什么工具最适合调试和跟踪内核代码?如前所述,串行控制台是唯一的方法吗?或者是否存在用于 PC 的任何 IDE/JTAG 类型的接口?

Shi*_*nok 14

我个人的 Linux 内核开发风格是 Debian。现在为您的积分:

  1. 正如您可能猜到的那样,除了 Debian 中已有的功能外,Ubuntu 并没有为内核带来任何新的东西来简化开发过程。例如,make_kpkg 是 Debian 功能,而不是 Ubuntu。以下是一些链接,可帮助您开始在 Debian 中执行常见的 Linux 内核开发任务:

  2. 进行内核调试的最简单方法是使用 QEMU 和 GDB。一些帮助您入门的链接:

    但是,您应该意识到这种方法对于某些场景(例如特定硬件问题调试等)不可行,对于这些场景,您最好使用物理串行调试和真实硬件。为此,您可以使用KGDB(它也可以使用以太网)。KDB也是不错的选择。哦,顺便说一下,KGDB 和 KDB 都已合并到 Linux Kernel 中。更多关于这两个在这里。另一个很酷的方法,对于非硬件相关问题非常有效,是使用用户模式 ​​Linux 内核。在用户模式下像任何其他进程一样运行内核允许您像任何其他程序一样调试它示例)。更多关于用户模式 ​​Linux在这里。UML 从 2.6.0 开始成为 Linux Kernel 的一部分,因此您可以按照以下步骤将高于此的任何官方内核版本构建为 UML 模式。

  3. 参见第 2 条。不幸的是,这里没有最终的最佳方法,因为每种工具/方法都有其优点和缺点。


Gil*_*il' 6

如果您正在为不基于 i386 硬件的嵌入式平台进行开发,则需要交叉编译。该Emdebian项目提供工具链开发在PC上许多架构(ARM,m68k的,MIPS和更多)(i386或AMD64)。这意味着在 Debian 下,您可以简单地添加存储库并 apt-get 为您选择的目标安装工具链。