linux - 使用 Eclipse 在 Linux 内核上进行开发

标签 linux eclipse linux-kernel

我正在按照指南帮助我在 Eclipse 中设置内核:link 在第 24 步,它要求我添加 include/uapi 目录,但我正在使用的内核中似乎没有该目录;事实上,一般搜索说我在内核中没有名为 uapi 的文件夹。这让我想知道这些 uapi 目录是什么以及为什么我没有它们?

使用旧内核 btw:2.6.35.14

最佳答案

include/uapi 文件夹仅在 v3.7-rc1 中添加

uapi 旨在作为用户可访问的内核头文件的一部分复制到安装中。取决于 linux 发行版,其中一些 header 被复制到 /usr/include/linux/ 。但这不是默认安装的一部分,它实际上是分开在不同的包中:linux-api-headers

没有 /usr/include/uapi(例如在我的 ubuntu 16.04 上它是空的)这是设计使然,原始 uapi 文件夹的内容直接复制到/usr/include

所以你可以跳过这一步。


一些关于 UAPI 的历史和有趣的信息:

UAPI 补丁集的灵感来自 David David Howell 在修改内核代码时的观察:

I occasionally run into a problem where I can't write an inline function in a header file because I need to access something from another header that includes this one. Due to this, I end up writing it as a #define instead.

他接着详细说明了这种头文件中“包含递归”的问题通常发生在内联函数中:

Quite often it's a case of an inline function in header A wanting a struct [or constant or whatever] from header B, but header B already has an inline function that wants a struct from header A.

主要思想是将includearch/xxxxxx/include 目录中的内核头文件的用户空间API 内容拆分出来,将这些内容放入在位于每个原始目录下的新 uapi/subdirectories 中创建的相应 header 。它简化并减小了仅内核 header 的大小。更重要的是,将用户空间 API 拆分为单独的 header 具有理想的结果,即它“简化了 [当前] 部分导出到用户空间的 header 之间复杂的相互依赖关系”。

UAPI 拆分的另一个好处可能会引起更广泛的 Linux 生态系统的特别兴趣。通过将所有与用户空间 API 相关的定义放入专用于该任务的文件中,可以更轻松地跟踪内核向用户空间呈现的 API 的更改。

关于linux - 使用 Eclipse 在 Linux 内核上进行开发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52765257/

相关文章:

c - 休眠小于 1ms

linux - 如何使用CMake更新库路径?

java - 如何使用 Eclipse 的显示 View 进行调试?

linux - 在 Linux 中热插拔时检测设备的存在

c - 谁能给我最新的netlink编程样例?

c++ - 解决读取xml时的越界错误

linux - 在 Linux 上找出一个进程被阻塞等待 I/O 的时间

eclipse - 如何让 Gradle 为 Eclipse 生成 java.library.path

java - 如何将源代码附加到 Eclipse 中的项目库中?

Linux - 在内核代码中映射用户空间内存