用Eclipse开发linux内核

用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/。但这不是默认

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


使用旧内核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。你可以忽略这一步。