内核黑客环境


22

我一直在嵌入式操作系统中工作,例如uCOS,ThreadX。虽然我已经在Linux中编写了应用程序代码,但是现在我计划开始学习Linux内核。我对环境的问题很少。

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

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

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


3
对于#1,Linus自己使用Fedora,所以可能有些话。我对这个主题的了解还不足以真正给出答案,但我会对其他人说的东西感兴趣。
jonescb

1
make_kpkg来自Debian,Ubuntu基于Debian和我的最爱发行版;)
已删除帐户

Answers:


14

我个人对Linux内核开发的爱好是Debian。现在,您的观点是:

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

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

    但是,您应该注意,此方法不适用于某些情况,例如特定的硬件问题调试等,对于这些情况,最好使用物理串行调试和实际硬件。为此,您可以使用KGDB(它也可以使用以太网)。KDB也是一个不错的选择。哦,顺便说一句,KGDB和KDB都已合并到Linux内核中。更多关于这两个在这里。另一个很酷的方法非常有用,它可以解决非硬件相关的问题,它是使用User-mode Linux Kernel。与其他任何进程一样,以用户模式运行内核使您可以像其他任何程序一样调试它示例)。有关用户模式Linux的更多信息在这里。UML自2.6.0以来就是Linux内核的一部分,因此您可以按照以下步骤将高于该版本的任何正式内核版本构建为UML模式。

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


谢谢!详细的答复。顺便说一句,我被内核中的fs和bio子系统所吸引。哪种设置最适合我?
rajaganesh87 2011年

UML和QEMU可能是必经之路,因为您可以轻松地免费使用文件系统。
Shinnok 2011年

很好的链接,只是一件事。我最喜欢的也是debian,但是任何发行版都可以进行内核开发。如果您是纯粹主义者,那么放松也许是最好的方法,因为它使用的是香草内核,但是配置不是坏东西,您会找到最好的。
D4RIO 2011年


6

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


3

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


更好的是,使用用户模式Linux。Linux是常规的用户级进程。
vonbrand

0

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.