用Eclipse开发linux内核
我遵循一个指南来帮助我在Eclipse中设置内核: 在第24步中,它要求我添加include/uapi目录,但我正在使用的内核中似乎没有该目录;事实上,一般的搜索表明我在内核中没有名为uapi的文件夹。这让我想知道这些uapi目录是什么,为什么我没有它们用Eclipse开发linux内核,linux,eclipse,linux-kernel,Linux,Eclipse,Linux Kernel,我遵循一个指南来帮助我在Eclipse中设置内核: 在第24步中,它要求我添加include/uapi目录,但我正在使用的内核中似乎没有该目录;事实上,一般的搜索表明我在内核中没有名为uapi的文件夹。这让我想知道这些uapi目录是什么,为什么我没有它们 使用旧内核btw:2.6.35.14include/uapi文件夹仅添加到v3.7-rc1 uapi旨在作为用户可访问内核头的一部分复制到安装中。根据linux发行版的不同,其中一些头被复制到/usr/include/linux/。但这不是默认
使用旧内核btw:2.6.35.14
include/uapi
文件夹仅添加到v3.7-rc1
uapi
旨在作为用户可访问内核头的一部分复制到安装中。根据linux发行版的不同,其中一些头被复制到/usr/include/linux/
。但这不是默认安装的一部分,它实际上是在另一个包中分开的:linuxapi头
没有/usr/include/uapi
(例如,在我的ubuntu 16.04上,它是空的),这是根据设计,原始uapi
文件夹的内容直接复制到/usr/include
所以你可以跳过这一步
关于UAPI的一些历史和有趣的信息: UAPI补丁集的动机是David Howell的观察,即在修改内核代码时: 我偶尔会遇到一个问题,我不能写内联代码 函数在头文件中,因为我需要从 包含此标题的另一个标题。因此,我最终写了一篇文章 它被定义为一个#定义 他接着详细说明了头文件中的“包含递归”问题通常发生在内联函数中: 通常情况下,头a中的内联函数需要 头B中的结构[或常量或任何内容],但头B已存在 具有一个内联函数,该函数需要头a中的结构 其主要思想是将
include
和arch/xxxxxx/include
目录中内核头文件的用户空间API内容分离出来,将该内容放入位于每个原始目录下的新uapi/子目录中创建的相应头中。它简化并减小了仅内核头的大小。更重要的是,将用户空间API拆分为单独的头具有理想的结果,即“简化了[当前]部分导出到用户空间的头之间复杂的相互依赖关系”。
UAPI拆分还有一个好处,更广泛的Linux生态系统可能特别感兴趣。通过将所有与用户空间API相关的定义放入专用于该任务的文件中,可以更容易地跟踪内核向用户空间呈现的API的更改。include/uapi
文件夹仅添加在v3.7-rc1
uapi
旨在作为用户可访问内核头的一部分复制到安装中。根据linux发行版的不同,其中一些头被复制到/usr/include/linux/
。但这不是默认安装的一部分,它实际上是在另一个包中分开的:linuxapi头
没有/usr/include/uapi
(例如,在我的ubuntu 16.04上,它是空的),这是根据设计,原始uapi
文件夹的内容直接复制到/usr/include
所以你可以跳过这一步
关于UAPI的一些历史和有趣的信息:
UAPI补丁集的动机是David Howell的观察,即在修改内核代码时:
我偶尔会遇到一个问题,我不能写内联代码
函数在头文件中,因为我需要从
包含此标题的另一个标题。因此,我最终写了一篇文章
它被定义为一个#定义
他接着详细说明了头文件中的“包含递归”问题通常发生在内联函数中:
通常情况下,头a中的内联函数需要
头B中的结构[或常量或任何内容],但头B已存在
具有一个内联函数,该函数需要头a中的结构
其主要思想是将include
和arch/xxxxxx/include
目录中内核头文件的用户空间API内容分离出来,将该内容放入位于每个原始目录下的新uapi/子目录中创建的相应头中。它简化并减小了仅内核头的大小。更重要的是,将用户空间API拆分为单独的头具有理想的结果,即“简化了[当前]部分导出到用户空间的头之间复杂的相互依赖关系”。
UAPI拆分还有一个好处,更广泛的Linux生态系统可能特别感兴趣。通过将所有与用户空间API相关的定义放在专门用于该任务的文件中,可以更容易地跟踪内核向用户空间呈现的API的更改。旧内核没有分离uapi。你可以忽略这一步。那个旧内核没有分离uapi。你可以忽略这一步。