【问题标题】:How to add linux headers to Eclipse CDT in Windows如何在 Windows 中将 linux 头文件添加到 Eclipse CDT
【发布时间】:2014-06-05 01:22:05
【问题描述】:

我试图通过 Linux Mint 上的 CDT 在 Eclipse 中编写内核模块(使用纯 C),但似乎 CDT 没有检测到这些库。 未解决的库是:

#include <linux/module.h>
#include <linux/slab.h>  
#include <linux/cdev.h>
#include <asm/atomic.h>
#include <linux/list.h>
....

如何将这些库放入 Eclipse 并让它检测到它,以便我可以将它们用于开发? 我通常在 Windows 上使用 Eclipse for Java,它可以轻松导入库,但我不了解 Linux 上的 CDT。

【问题讨论】:

  • Linux 上的标准做法是使用“内核构建”工具来编译内核模块;这可能会让一些人觉得“太复杂”。尝试使用 Eclipse 完成同样的事情......好吧......让我们说“你有很长的路要走”。我的建议,坚持使用“内核构建”。
  • 我可以构建内核并制作文件,但这会妨碍开发速度,因为 Eclipse 可以建议快速键入的选项。

标签: c eclipse linux-kernel kernel eclipse-cdt


【解决方案1】:

这个问题有缺陷。问题代码列出了几个“#include”文件,并称它们为“库”;事实上,它们是“头文件”(不是库)。

“头文件”都为编译器定义符号,这些符号在内核模块加载时由内核解析(insmod 等)。

由“头文件”定义的特定符号不是必须与代码链接的库的一部分(在链接时)。相反,这些符号是由内核本身体现的。 “内核是库”(直言不讳)。您将找不到库来链接这些头文件中的符号。

我不相信您会发现使用 Eclipse 构建内核模块是可行的(如果可能的话)。

而是使用 Linux 提供的 kbuild 环境。在您的 Linux 系统上,读取文件:

/usr/src/linux/Documentation/kbuild/modules.txt

这将使您走上构建 Linux 内核模块的正确道路。

【讨论】:

  • 但它如何能够解析一些标题? (我习惯于使用 java,因此最终将它们称为库)是否可以以某种方式复制粘贴它们并强制 Eclipse 至少检测到它们?
  • 内核头文件的路径与用于用户空间的路径不同。你可以在这里找到它们:/usr/src/linux/include/linux
  • 即使我无法完全编译它,Eclipse 在编码部分和结构设计方面确实有帮助。
  • 我不明白的是我可以编译运行代码,但是头文件不在目录中。
  • @chettyharish,你是对的;当然。头文件不在当前工作目录中。不知何故,kbuild 系统神奇地使编译器在需要时可以使用它们。如果您能够编译和“运行”(或者更好地说:“加载”)您的内核模块,听起来您在 kbuild 方面取得了一些成功。 Eclipse 带您走了很长一段路;但是在构建 LKM 时,是时候从自行车上卸下辅助轮,真正理解 C。
猜你喜欢
  • 2016-10-22
  • 2010-10-27
  • 2011-02-10
  • 1970-01-01
  • 1970-01-01
  • 2012-03-28
  • 1970-01-01
  • 2019-07-16
  • 2013-06-17
相关资源
最近更新 更多