uapi目录的创建原因

Linux在3.7以后把很多header file移到 include/uapi或是arch/xxxx/include/uapi下,为了解决include recursive(循环包含头文件)的问题。
英文参考文档:https://lwn.net/Articles/507794/

解决include recursive问题的方法

例如:在A.h中inline function时发现里面用到的某些struct定义在B.h中,而B.h中又有inline function需要用到A.h中的struct,就会造成循环包含recursive include

uapi的创建

把userspace API的文件独立到 include/uapi跟arch/xxxx/include/uapi下,
举例来说本来header中

 /* Header comments (copyright, etc.) */#ifndef _XXXXXX_H     /* Guard macro preventing double inclusion */#define _XXXXXX_H[User-space definitions]#ifdef __KERNEL__[Kernel-space definitions]#endif /* __KERNEL__ */[User-space definitions]#endif /* End prevent double inclusion */

换成如下两个文件

a. kernel space的东西放在原本路径下

 /* Header comments (copyright, etc.) */#ifndef _XXXXXX_H     /* Guard macro preventing double inclusion */#define _XXXXXX_H#include <include/uapi/path/to/header.h>[Kernel-space definitions]#endif /* End prevent double inclusion *//* Header comments (copyright, etc.) */

b. uapi目录下创建同名文件
#ifndef _UAPI__XXXXXX_H /* Guard macro preventing double inclusion */
#define _UAPI__XXXXXX_H

 [User-space definitions]#endif /* End prevent double inclusion */

好处

减少与简化kernel-only header的size;
现在kernel header有的是文件中一部分export给userspace用。这样做简化了头文件间的交互相依性。
处理用户态的人更容易追踪API的变更,透过git来追踪uapi下的log更容易在每个kernel的释放版本中知道做了那些修改
转发自:http://vh21.github.io/linux/2014/11/21/linux-kernel-uapi-include-file.html

【linux】Linux kernel uapi header file(用户态头文件)相关推荐

  1. Linux下利用protoc命令生成protobuf的头文件和源文件,根据mesType.proto文件

    Linux下利用protoc命令生成protobuf的头文件和源文件,根据mesType.proto文件 protobuf的message文件为 msgType.proto 生成c++头文件和源文件的 ...

  2. linux内核中链表代码分析---list.h头文件分析(一)

    linux内核中链表代码分析---list.h头文件分析(一) 16年2月27日17:13:14 在学习数据结构时,有一个重要的知识点就是链表.对于链表的一些基本操作,它的最好学习资料就是内核中的li ...

  3. linux内核中链表代码分析---list.h头文件分析(二)【转】

    转自:http://blog.chinaunix.net/uid-30254565-id-5637598.html linux内核中链表代码分析---list.h头文件分析(二) 16年2月28日16 ...

  4. Linux网络设计之实现io_uring用户态接口

    io_uring场景 io_uring和epoll的区别 io_uring 与epoll性能比较 安装rust_echo_bench测试工具 测试比较 实现封装io_uring用户态文件读写接口 系统 ...

  5. Linux内核笔记--内存管理之用户态进程内存分配

    内核版本:linux-2.6.11 Linux在加载一个可执行程序的时候做了种种复杂的工作,内存分配是其中非常重要的一环,作为一个linux程序员必然会想要知道这个过程到底是怎么样的,内核源码会告诉你 ...

  6. Linux如何查看内核版本并安装内核头文件linux-headers-generic

    linux内核的头文件一般是这样的格式:linux-headers-5.13.0-01-generic,当然根据你的查询方式不同,写法各异. 一般的检查指令 下面我列举一些快速查询linux的内核版本 ...

  7. linux c之c语言符合标准的头文件和linux常用头文件

    1.C语言符合标准的头文件 #include <assert.h> //设定插入点 #include <ctype.h> //字符处理 #include <errno.h ...

  8. linux怎么添加头文件目录下,linux下编写c++,include的那些头文件在什么地方?

    炎炎设计 C/C++程序在linux下被编译和连接时,GCC/G++会查找系统默认的include和link的路径,以及自己在编译命令中指定的路径.自己指定的路径就不说了,这里说明一下系统自动搜索的路 ...

  9. linux cpp标准库,标准库以及标准头文件

    源文件通过编译可以生成目标文件(例如 GCC 下的 .o 和 Visual Studio 下的 .obj),并提供一个头文件向外暴露接口,除了保护版权,还可以将散乱的文件打包,便于发布和使用. 实际上 ...

最新文章

  1. python exec
  2. 使用synchronized修饰静态方法和非静态方法有什么区别
  3. linux 电源管理 regulator,Linux内核电源管理综述
  4. 二叉查找树转换成有序的双向链表
  5. Android系统匿名共享内存Ashmem(Anonymous Shared Memory)在进程间共享的原理分析
  6. C#验证控件使用方法及常用正则表达式例析转
  7. 读读objc源码(二):weak类型指针的实现
  8. php cii订单导出,使用 kingcms.php 建立一个留言本【附模型代码】
  9. 微课|中学生可以这样学Python(例9.1):Excel导入SQLite(2)
  10. C++ 构造函数与析构函数
  11. 如何解决高并发,秒杀问题 1
  12. 蓝桥杯2016年第七届JavaC组国赛第一题-平方末尾
  13. 阿里云张献涛:2021 弹性计算发生了哪些变化
  14. java string通配符_java通配符
  15. 贸易合规服务市场现状研究分析报告 -
  16. Java代码分析器(一): JDT入门
  17. Eclipse 照亮Java众生
  18. J2EE开发全程实录
  19. 100-days: thirty-two
  20. php ses 发送邮件,使用PHP SDK从Amazon SES发送HTML邮件

热门文章

  1. ubuntu系统怎么安装ssh服务器配置,如何在Ubuntu 20.04 LTS上安装SSH服务器
  2. python库缺少pkg_resource_ImportError: No module named pkg_resources解决方案
  3. 数字图像处理——第九章 形态学图像处理
  4. 光耦p621引脚图_开关电源中光耦电路的设计与优点
  5. CUDA make_float3和make_float4
  6. Node.js开发WEB项目后端接口API,基于mysql5.7数据库(小试牛刀)
  7. 在Ubuntu 16.04.5 LTS上利用python中的PIL模块压缩一百多兆的单张图片实操
  8. 在CentOS 6.9 x86_64上开启nginx 1.12.2的proxy_cache缓存配置
  9. leetcode-300 最长上升子序列
  10. Android.mk文件语法规范