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

最佳答案

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观察到在修改内核代码时:
我偶尔会遇到一个不能写内联的问题
函数,因为我需要从
包含此标题的另一个标题。因为这个,我最后写了
而是作为一个定义。
他接着阐述了头文件中的“包含递归”问题通常与内联函数一起出现:
通常情况下,头a中的内联函数需要
头B中的结构[或常量或其他内容],但头B已经
具有一个内联函数,该函数需要来自头a的结构。
其主要思想是将includearch/xxxxxx/include目录中的内核头文件的用户空间API内容分离出来,将这些内容放入位于每个原始目录下的newuapi/ subdirectories中创建的相应头文件中。它简化并减小了仅内核头的大小。更重要的是,将用户空间api拆分成单独的头文件会产生理想的结果,即它"simplifies the complex interdependencies between headers that are [currently] partly exported to userspace".
UAPI拆分的另一个好处可能是更广泛的Linux生态系统特别感兴趣。通过将所有与用户空间API相关的定义放入专门用于该任务的文件中,跟踪内核呈现给用户空间的API的更改变得更加容易。

10-04 12:17