Linux编程中C语言头文件位置

搞基于linux的嵌入式驱动,需要引用很多头文件,有时总是找不到头文件位置,于是学习,总结了一下:
先说头文件位置吧,分两类:

1、用户空间编程使用头文件

就是我们常用的一些:比如
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

头文件位置:/usr/include
在这里插入图片描述

2、内核空间编程头文件

那内核中头文件呢?比如以下这些:
#include <linux/ioctl.h>
#include <linux/kthread.h>
#include <asm/bitops.h>
#include <asm/uaccess.h>
#include <mach/regs-gpio.h>
#include <sys/ioctl.h>

这里需要加以区分,特别在交叉编译时,更是需要。

2.1、利用自己下载编译的linux内核

显而易见,头文件自己下载的内核里。比如下载了linux-4.19.136版本的内核。

hezaizai@ubuntu: linux-4.19.136$ ls
arch        ChangeLog-4.19.136  Documentation  include  Kconfig         LICENSES     mm               net         scripts     tools   vmlinux
block       COPYING             drivers        init     kernel          MAINTAINERS  modules.builtin  README      security    uImage  vmlinux.o
built-in.a  CREDITS             firmware       ipc      kernel_fdt.its  Makefile     modules.order    readme.txt  sound       usr
certs       crypto              fs             Kbuild   lib             mkimage      Module.symvers   samples     System.map  virt

2.2、利用当前pc或服务器linux内核编译

1、确认自己使用的内核

[root@LIN-0495B3719A0 ~]# uname -r
4.19.112-2.el8.x86_64

2、ok,头文件位置就在/lib/modules/4.19.112-2.el8.x86_64/build/

[root@LIN-0495B3719A0 ~]# cd /lib/modules/4.19.112-2.el8.x86_64/build/
arch/     certs/    drivers/  fs/       init/     kernel/   mm/       samples/  security/ tools/    virt/     
block/    crypto/   firmware/ include/  ipc/      lib/      net/      scripts/  sound/    usr/

2.3具体位置

那具体在哪个目录下呢?

这里要分情况说明,所以在2.1、2.2没写。比如用的是arm架构(后arm64、x86同理,都在相关体系结构里)所以

#include <linux/***.h> 是在linux-4.19/include/linux下面寻找源文件。

#include <asm/***.h> 是在linux-4.19/arch/arm/include/asm下面寻找源文件。

#include <mach/***.h> 是在linux-4.19/arch/arm/mach-s3c2410/include/mach下面寻找源文件。

#include<plat/regs-adc.h>在linux-4.19/arch/arm/plat-s3c/include/plat

一般来说,通用(内核专用)头文件都位于linux-4.19/include/linux下,比如下面这些,编写内核驱动代码要经常用到。

#include <linux/module.h> //最基本的文件,支持动态添加和卸载模块。Hello World驱动要这一个文件就可以了
#include <linux/fs.h> //包含了文件操作相关struct的定义,例如大名鼎鼎的struct file_operations ,包含了struct inode 的定义,MINOR、MAJOR的头文件。

#include <linux/errno.h> //包含了对返回值的宏定义,这样用户程序可以用perror输出错误信息。
#include <linux/types.h> //对一些特殊类型的定义,例如dev_t, off_t, pid_t.其实这些类型大部分都是unsigned int型通过一连串的typedef变过来的,只是为了方便阅读。
#include <linux/cdev.h> //对字符设备结构cdev以及一系列的操作函数的定义。//包含了cdev 结构及相关函数的定义。
#include <linux/wait.h> //等代队列相关头文件//内核等待队列,它包含了自旋锁的头文件

总结还不是很全面,后面慢慢学习,再补充吧!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值