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

时间:2018-10-11 16:51:33

标签: linux eclipse linux-kernel

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

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

1 个答案:

答案 0 :(得分:2)

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中的结构。

主要思想是在includearch/xxxxxx/include目录中拆分内核头文件的用户空间API内容,并将该内容放入在新uapi/ subdirectories中创建的相应头中位于每个原始目录下。它简化并减小了仅内核标头的大小。更重要的是,将用户空间API拆分为单独的标头会带来令人满意的结果,即"simplifies the complex interdependencies between headers that are [currently] partly exported to userspace".

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