内核黑客环境

内核黑客环境

我一直在嵌入式操作系统方面工作,如 uCOS、ThreadX。虽然我已经在 Linux 中编写了应用程序,但现在我计划开始学习 Linux 内核。我对环境有几个问题。

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

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

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

答案1

我个人对 Linux 内核开发的偏好是 Debian。现在来说说你的观点:

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

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

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

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

答案2

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

答案3

JTAG 探针确实存在,但价格相当昂贵(并且制造它们的公司拥有独家合同)。调试内核代码的最佳方法是在 kvm 或 qemu 中启动它,并在仿真中使用 gdbserver。

答案4

本质上任何主线发行版都应该可以正常工作(他们使用自己的发行版来破解它)。使用任何感觉更舒服的东西。

相关内容