在用户空间使用内核头文件(或模块)有两种方法:

1. 将内核头文件和相应模块移植到移植到用户层,在用户空间重新编译使用。

2. 在编译时使用-I/lib/modules/$(uname -r)/build/include选项

方法1比较麻烦,需要做些移植工作,但是肯定能成功。比如可以将内核的list.h链表移植到用户空间。

方法2可能会遇到一些错误,比如重复定义等,而且很难解决。

比如如果需要使用内核的list,如下编译:

gcc list_test.c -I/lib/modules/$(uname -r)/build/include -D__KERNEL__

出现如下错误:

fd_set同时在内核空间的types.h和用户空间的select.h中定义,造成重复定义。这个错误基本没有办法可以消除。

因此,推荐方法1。

关于方法2的官方解释:

见https://kernelnewbies.org/KernelHeaders

摘录如下:

1. 如果你正在发布一个依赖某个特定版本内核头文件的用户空间程序,比如因为你的程序只运行在打过补丁或者最新的内核上,你不能依赖/usr/include中的头文件。你也不能使用来自/usr/src/linux/include 或/lib/modules/*/build/include/的头文件,因为他们还没有为用户空间的包含做好准备。若你尝试这么做了,内核会警告你并指引你到这个Wiki页。解决这个问题的正确方法是独立出你需要的特定接口,比如一个打过补丁的新内核并为你的应用程序提供字符设备ioctl号的独立头文件。在你自己的程序中添加一份这个源文件的拷贝,并说明这个应该和新内核版本保持一致。如果你的程序不遵循GPLv2证书,请保证你得到了这个文件作者的许可:可在你自己程序的证书下发布它。因为你的程序现在依赖的内核接口并不在常规内核中。

2. 为一个发行版打包头文件正确的方法是在内核源码目录下运行 'make headers_install'来安装头文件到/usr/include,并依赖这个刚刚安装的特定版本的内核头文件重新编译C库包。

1)在内核源码根目录下运行: 'make headers_install',这样内核Makefile会把提供给应用程序的头文件提取并放在内核源码的“usr/include”目录下。

2)在编译应用程序的时候,在GCC的CFLAG参数中添加“-I(内核源码路径)/usr/include”,这样编译器就知道在编译时找到相关的头文件。

注:很可惜,list.h并没有出现在usr/include/linux/下。

用户空间使用内核头文件相关推荐

  1. 基于windows PE文件的恶意代码分析;使用SystemInternal工具与内核调试器研究windows用户空间与内核空间...

    基于windows PE文件的恶意代码分析:使用SystemInternal工具与内核调试器研究windows用户空间与内核空间 ******************** 既然本篇的主角是PE文件,那 ...

  2. linux 内核头文件 linux kernel header

    1.内核头文件的发展历史         在 Linux 2.2/2.4 的纯真年代,内核头文件一直保持着 Unix 世界的"KISS"传统,只需将内核源码树中的头文件直接复制到 ...

  3. linux 内核空间 sy,在 Linux 下用户空间与内核空间数据交换的方式,第 1 部分: 内核启动参数、模块参数与sysf...

    级别: 初级 燚 杨 (), 计算机科学硕士 2006 年 2 月 16 日 本系列文章包括两篇,它们文详细地介绍了 Linux 系统下用户空间与内核空间数据交换的九种方式,包括内核启动参数.模块参数 ...

  4. 用户空间和内核空间通讯之【Netlink 中】

    今天我们来动手演练一下Netlink的用法,看看它到底是如何实现用户-内核空间的数据通信的.我们依旧是在2.6.21的内核环境下进行开发. 在文件里包含了Netlink协议簇已经定义好的一些预定义协议 ...

  5. linux默认头文件,Linux安装合适内核头文件的方法

    摘要 腾兴网为您分享:Linux安装合适内核头文件的方法,桌面时钟,中建在线,圆通金刚,西餐菜谱等软件知识,以及万象,我不信表情包,兔子洞,服你网,电商直播app,网络工具箱,ffu文件,电脑功率计算 ...

  6. 如何下载linux内核头文件,在Linux系统上安装Linux内核头文件的教程

    当你在编译一个设备驱动模块时,你需要在系统中安装内核头文件.内核头文件同样在你编译与内核直接链接的用户空间程序时需要.当你在这些情况下安装内核头文件时,你必须确保内核头文件精确地与你当前内核版本匹配( ...

  7. Linux Malloc分析-从用户空间到内核空间

    Linux Malloc分析-从用户空间到内核空间 本文介绍malloc的实现及其malloc在进行堆扩展操作,并分析了虚拟地址到物理地址是如何实现映射关系. ordeder原创,原文链接: http ...

  8. (整理)用户空间_内核空间以及内存映射

    内核空间和用户空间   现代操作系统采用虚拟存储器,对于32位操作系统而言,它的寻址空间(虚拟存储空间)为4G(2的32次方).操作系统的核心是内核,独立于普通的应用程序,可以访问受保护的内存空间,也 ...

  9. linux 内核将两个设备相关联,linux用户空间和内核空间交换数据

    转载地址:http://www.poluoluo.com/server/201107/138420.html 在研究dahdi驱动的时候,见到了一些get_user,put_user的函数,不知道其来 ...

最新文章

  1. Windows环境:VMware下linux虚拟机与Windows主机进行文件共享的方法
  2. python建立pip.ini
  3. Spring框架 IOC
  4. cmb网站服务器失去响应代码,3.5.2 连接到服务器并响应各种连接事件(2)
  5. f5源站获取http/https访问的真实源IP解决方案
  6. Oracle 视图、序列、索引、游标、触发器、事务
  7. Segment Routing 之 Data-Plane Control-Plane
  8. AWVS14.5最新版的安装与使用
  9. Anroid 开发so文件找不到问题-例高德地图SDK提示com.autonavi.amap.mapcore.MapCore.nativeNewInstance问题
  10. 四足机器人--嵌入式硬件设计
  11. Word表格内数据换行,Word换行Java实现代码
  12. 计算机组成原理速成课程【速成】
  13. Android 高级面试
  14. dw cs6设置字体样式
  15. Nature | 张宁/张泽民/朱继业合作揭示肝癌免疫微环境亚型和中性粒细胞异质性...
  16. 缩略图方式下, 资源管理器,不能显示文件名
  17. WEB前端整套教程html+divcss+javascript+jquery+html5-孙琪峥-专题视频课程
  18. 【开源轶事00】Redis 是亲生的懒汉 Java 庶出终归是庶出
  19. 数据安全前沿技术研究小结
  20. fmute hang_detect 与ARM 镜像

热门文章

  1. Centos 下安装redmine及设置发送邮件功能
  2. Elasticsearch——分词器对String的作用
  3. 猫猫学iOS(四十四)之网易彩票自定义图片在右边的Button_弹出view_ios6,7简单适配...
  4. oracle exp imp
  5. 【Windows7系统新特性】
  6. Oracle的rownum原理和使用(整理几个达人的帖子)
  7. 用asp.net画饼图
  8. 计算机培训研修日志,2021年计算机培训研修日志
  9. 關於@Override
  10. t系列服务器更换pip升级版本,Python更新pip出现错误解决方法