linux - 使用 Eclipse 在 linux 内核上开发
问题描述
我正在遵循帮助我在 Eclipse 中设置内核的指南:链接 在第 24 步,它要求我添加 include/uapi 目录,但我正在使用的内核中似乎没有该目录;事实上,一般搜索说我在内核中没有名为 uapi 的文件夹。这让我想知道这些 uapi 目录是什么以及为什么我没有它们?
顺便说一句,使用旧内核: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 在修改内核代码时的观察:
我偶尔会遇到无法在头文件中编写内联函数的问题,因为我需要从包含该头文件的另一个头文件中访问某些内容。因此,我最终将其写为#define。
他继续详细说明,头文件中的“包含递归”问题通常发生在内联函数中:
通常情况下,标题 A 中的内联函数想要来自标题 B 的结构 [或常量或其他],但标题 B 已经有一个内联函数想要来自标题 A 的结构。
include
主要思想是在and目录中拆分内核头文件的用户空间 API 内容arch/xxxxxx/include
,将这些内容放入uapi/ subdirectories
在每个原始目录下的 new 中创建的相应头文件中。它简化并减小了仅内核标头的大小。更重要的是,将用户空间 API 拆分为单独的标头具有理想的结果,即"simplifies the complex interdependencies between headers that are [currently] partly exported to userspace".
UAPI 拆分的另一个好处可能对更广泛的 Linux 生态系统特别感兴趣。通过将所有与用户空间 API 相关的定义放入专门用于该任务的文件中,可以更轻松地跟踪内核呈现给用户空间的 API 的更改。
推荐阅读
- sql-server - 使用 SQL Sserver 2008 重命名表中的列
- php - sort array using array_unique from external XML (CDATA)
- db2 - IBM Bluemix Db2 on Cloud“错误 401:SRVE0295E:报告的错误:401”
- swift - 有没有更简单的方法以编程方式查看 UIImageView ?
- reactjs - 将函数传递给组件但接收未定义
- html - 使用 XPath 选择具有最高 z-index 值的项目
- leaflet - RPG地图问题
- angular - 从辅助子路由到父路由的角度 5 路由给出匹配错误
- c# - Unity:如何检查 Capsule 是否掉落?
- c++ - Protobug 消息中的消息标识符