我正在遵循一个指南来帮助我在Eclipse中设置内核:link 在第24步中,它要求我添加include / uapi目录,但是我正在使用的内核中似乎没有该目录;实际上,常规搜索显示内核中没有名为uapi的文件夹。这让我想知道这些uapi目录是什么,为什么我没有它们?
使用旧内核顺便说一句:2.6.35.14
答案 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中的结构。
主要思想是在include
和arch/xxxxxx/include
目录中拆分内核头文件的用户空间API内容,并将该内容放入在新uapi/ subdirectories
中创建的相应头中位于每个原始目录下。它简化并减小了仅内核标头的大小。更重要的是,将用户空间API拆分为单独的标头会带来令人满意的结果,即"simplifies the complex interdependencies between headers that are [currently] partly exported to userspace".
UAPI拆分还有另一个好处,这可能是更广泛的Linux生态系统特别感兴趣的。通过将所有与用户空间API相关的定义放入专门用于该任务的文件中,可以更轻松地跟踪内核提供给用户空间的API的更改。