首页 > 解决方案 > 使用 Eclipse 在 linux 内核上开发

问题描述

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

顺便说一句,使用旧内核:2.6.35.14

标签: linuxeclipselinux-kernel

解决方案


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

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

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

所以你可以跳过这一步。


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

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

我偶尔会遇到无法在头文件中编写内联函数的问题,因为我需要从包含该头文件的另一个头文件中访问某些内容。因此,我最终将其写为#define。

他继续详细说明,头文件中的“包含递归”问题通常发生在内联函数中:

通常情况下,标题 A 中的内联函数想要来自标题 B 的结构 [或常量或其他],但标题 B 已经有一个内联函数想要来自标题 A 的结构。

include主要思想是在and目录中拆分内核头文件的用户空间 API 内容arch/xxxxxx/include,将这些内容放入uapi/ subdirectories在每个原始目录下的 new 中创建的相应头文件中。它简化并减小了仅内核标头的大小。更重要的是,将用户空间 API 拆分为单独的标头具有理想的结果,即"simplifies the complex interdependencies between headers that are [currently] partly exported to userspace".

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


推荐阅读