linux 修改默认头文件路径_linux 默认 头文件 路径 - CSDN
  • 由于非凡的需求必须强制GCC不搜索系统默认路径,也就是不搜索/usr/include,要自己用-I参数来指定内核头文件路径,这个 时候必须在Makefile中指定两个参数,一个是内核头文件路径,一个是强制GCC不搜索系统默认路径...

    在 编译驱动模块时,由于非凡的需求必须强制GCC不搜索系统默认路径,也就是不搜索/usr/include,要自己用-I参数来指定内核头文件路径,这个 时候必须在Makefile中指定两个参数,一个是内核头文件路径,一个是强制GCC不搜索系统默认路径。在编译内核时,必须使用一个参数(强制GCC不 搜索系统默认路径),否则就会引起混乱。

    另,在驱动程序下面不是。下面是驱动程序的路径:(注意,这里已经预先定义好了arm平台了,所以才会自动去arm相关的底下找)
    驱动程序:
    #include <linux/***.h> 是在linux-2.6.29/include/linux下面寻找源文件。

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

    asm的路径是 arch/xxx/include/asm/

    asm-generic 的路径是 include/asm-generic/


    代码中包含asm/中的头文件,如果某一个架构没有自己特殊代码的话,其中会使用通用版本的头文件,即包含 asm-generic/里的对应.h文件。

    代码中不会直接包含 asm-generic/ 里的.h文件


    拿arm来举例

    #include <asm/gpio.h> 引用的头文件是 arch/arm/include/asm/gpio.h 

    #include <asm-generic/gpio.h> 引用的是头文件是 include/asm-generic/gpio.h





    #include <linux/module.h>  //最基本的文件,支持动态添加和卸载模块。Hello World驱动要这一个文件就可以了
    #include <linux/fs.h>  //包含了文件操作相关struct的定义,例如大名鼎鼎的struct file_operations
    #include <linux/errno.h>  //包含了对返回值的宏定义,这样用户程序可以用perror输出错误信息。
    #include <linux/types.h>  //对一些特殊类型的定义,例如dev_t, off_t, pid_t.其实这些类型大部分都是unsigned int型通过一连串的typedef变过来的,只是为了方便阅读。
    #include <linux/cdev.h>  //对字符设备结构cdev以及一系列的操作函数的定义。
    #include <linux/wait.h>  //等代队列相关头文件

    应用程序:

    #include <fcntl.h> //包含了open()函数的flags,mode参数的宏定义。



    驱动程序: 
    #include <linux/***.h> 是在linux-2.6.29/include/linux下面寻找源文件。
    #include <asm/***.h> 是在linux-2.6.29/arch/arm/include/asm下面寻找源文件。
    #include <mach/***.h> 是在linux-2.6.29/arch/arm/mach-s3c2410/include/mach下面寻找源文件。

    #include <plat/regs-adc.h>在linux-2.6.31_TX2440A20100510\linux-2.6.31_TX2440A\arch\arm\plat-s3c\include\plat
    #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> //等代队列相关头文件//内核等待队列,它包含了自旋锁的头文件

    #include <linux/init.h>
    #include <linux/kernel.h>            

    #include <linux/slab.h>              //包含了kcalloc、kzalloc内存分配函数的定义。
    #include <linux/uaccess.h>        //包含了copy_to_user、copy_from_user等内核访问用户进程内存地址的函数定义。
    #include <linux/device.h>           //包含了device、class 等结构的定义
    #include <linux/io.h>                  //包含了ioremap、iowrite等内核访问IO内存等函数的定义。
    #include <linux/miscdevice.h>    //包含了miscdevice结构的定义及相关的操作函数。
    #include <linux/interrupt.h>        //使用中断必须的头文件
    #include <mach/irqs.h>             //使用中断必须的头文件
    #include <asm/bitops.h>           //包含set_bit等位操作函数,实现Input子系统时可用。
    #include <linux/semaphore.h>   //使用信号量必须的头文件
    #include <linux/spinlock.h>       //自旋锁

    #include <linux/sched.h>          //内核等待队列中要使用的TASK_NORMAL、TASK_INTERRUPTIBLE包含在这个头文件
    #include <linux/kfifo.h>             //fifo环形队列
    #include <linux/timer.h>           //内核定时器
    #include <linux/input.h>           //中断处理

    头文件主目录include

    头文件目录中总共有32个.h头文件。其中主目录下有13个,asm子目录中有4个,linux子目录中有10个,sys子目录中有5个。这些头文件各自的功能如下,具体的作用和所包含的信息请参见第14章。

    <a.out.h>:a.out头文件,定义了a.out执行文件格式和一些宏。
    <const.h>:常数符号头文件,目前仅定义了i节点中i_mode字段的各标志位。
    <ctype.h>:字符类型头文件,定义了一些有关字符类型判断和转换的宏。
    <errno.h>:错误号头文件,包含系统中各种出错号。(Linus从minix中引进的)。
    <fcntl.h>:文件控制头文件,用于文件及其描述符的操作控制常数符号的定义。
    <signal.h>:信号头文件,定义信号符号常量,信号结构以及信号操作函数原型。
    <stdarg.h>:标准参数头文件,以宏的形式定义变量参数列表。主要说明了一个类型(va_list)和3个宏(va_start, va_arg和va_end),用于vsprintf、vprintf、vfprintf函数。
    <stddef.h>:标准定义头文件,定义了NULL, offsetof(TYPE, MEMBER)。
    <string.h>:字符串头文件,主要定义了一些有关字符串操作的嵌入函数。
    <termios.h>:终端输入输出函数头文件,主要定义控制异步通信口的终端接口。
    <time.h>:时间类型头文件,主要定义了tm结构和一些有关时间的函数原形。
    <unistd.h>:Linux标准头文件,定义了各种符号常数和类型,并声明了各种函数。如,定义了__LIBRARY__,则还包括系统调用号和内嵌汇编_syscall0()等。
    <utime.h>:用户时间头文件,定义了访问和修改时间结构以及utime()原型。

    (1)体系结构相关头文件子目录include/asm

    这些头文件主要定义了一些与CPU体系结构密切相关的数据结构、宏函数和变量。共4个文件。

    <asm/io.h>:I/O头文件,以宏的嵌入汇编程序形式定义对I/O端口操作的函数。
    <asm/memory.h>:内存拷贝头文件,含有memcpy()嵌入式汇编宏函数。
    <asm/segment.h>:段操作头文件,定义了有关段寄存器操作的嵌入式汇编函数。
    <asm/system.h>:系统头文件,定义了设置或修改描述符/中断门等的嵌入式汇编宏。

    (2)Linux内核专用头文件子目录include/linux

    <linux/config.h>:内核配置头文件,定义键盘语言和硬盘类型(HD_TYPE)可选项。
    <linux/fdreg.h>:软驱头文件,含有软盘控制器参数的一些定义。
    <linux/fs.h>:文件系统头文件,定义文件表结构(file,buffer_head,m_inode等)。
    <linux/hdreg.h>:硬盘参数头文件,定义访问硬盘寄存器端口、状态码和分区表等信息。
    <linux/head.h>:head头文件,定义了段描述符的简单结构,和几个选择符常量。
    <linux/kernel.h>:内核头文件,含有一些内核常用函数的原形定义。
    <linux/mm.h>:内存管理头文件,含有页面大小定义和一些页面释放函数原型。
    <linux/sched.h>: 调度程序头文件,定义了任务结构task_struct、初始任务0的数据,
    以及一些有关描述符参数设置和获取的嵌入式汇编函数宏语句。
    <linux/sys.h>:系统调用头文件,含有72个系统调用C函数处理程序,以"sys_"开头。
    <linux/tty.h>:tty头文件,定义了有关tty_io,串行通信方面的参数、常数。

    (3)系统专用数据结构子目录include/sys

    <sys/stat.h>: 文件状态头文件,含有文件或文件系统状态结构stat{}和常量。
    <sys/times.h>:定义了进程中运行时间结构tms以及times()函数原型。
    <sys/types.h>:类型头文件,定义了基本的系统数据类型。
    <sys/utsname.h>:系统名称结构头文件。
    <sys/wait.h>:等待调用头文件,定义系统调用wait()和waitpid()及相关常数符号。

    展开全文
  • 1 应用编程、驱动源代码...包含的头文件一般会先搜索-I选项后的路径(即用gcc编译时的-I选项),之后就是标准的系统头文件路径。  2)而用""号包含的头文件会首先搜索当前的工作目录,之后的搜索路径才是...

    1  应用编程、驱动源代码中的头文件

    1.1  应用编程中包含的头文件是应用层的头文件,是应用程序的编译器带来的 

    1.1.1  编译windows下的应用程序时

            1)使用<>包含的头文件一般会先搜索-I选项后的路径(即用gcc编译时的-I选项),之后就是标准的系统头文件路径。
            2)而用""号包含的头文件会首先搜索当前的工作目录,之后的搜索路径才是和<>号包含的头文件所搜索的路径一样的路径。
            3)在linux系统中编译X86架构的程序时,一般默认标准的头文件路径为:

                 如下是我在ubuntu下linux中,使用cpp -v,得到的默认头文件路径

                 /usr/lib/gcc/x86_64-linux-gnu/5/include
                 /usr/local/include
                 /usr/lib/gcc/x86_64-linux-gnu/5/include-fixed
                 /usr/include/x86_64-linux-gnu

                 /usr/include

    1.1.2  编译ARM架构的应用程序时

            1 ) 在linux系统中编译ARM 架构的程序时,一般默认标准的头文件路径为:

                如下是我在ubuntu下linux中,使用arm-hisiv300-linux-cpp -v,得到路径

                  /opt/hisi-linux/x86-arm/arm-hisiv300-linux/bin/../lib/gcc/arm-hisiv300-linux-uclibcgnueabi/4.8.3/include

                  /opt/hisi-linux/x86-arm/arm-hisiv300-linux/bin/../target/usr/include

          

            2) 通过在makefile中使用-I等方式指定    

                    见libjpeg库的移植

            3)比如在海思平台上,需要用交叉编译工具编译能在海思开发板上使用的应用程序,如下:

                    #include <sys/stat.h>
                    #include <sys/time.h>
                    #include <fcntl.h>

                    #include <errno.h>

                   Linux命令行下使用find -name "stat.h" (注意:在最顶层的目录使用root用户权限搜索)

                   ./opt/hisi-linux/x86-arm/arm-hisiv300-linux/target/usr/include/sys/stat.h

            总结:不同版本的编译工具链,是对应自己的平台编写的,比如工具链里的一个可执行程序gcc,arm-hisiv300-linux、arm-x210-linux-gcc,安装工具链的时候,里面就有所有的编译时需要的头文件,编译时默认查找头文件的路径在你安装的地方,如上所述,所有我们在makefile里面要修改CC = arm-xxx-xxx等等,make的时候,才会使用我们指定的交叉编译工具链。        

    1.2  编写驱动代码时的头文件

            (1)驱动源码属于内核源码的一部分,驱动源码中的头文件其实就是内核源代码目录下的include目录下的头文件。当我们#include时,自动会搜索到include下

            (2)比如驱动程序,那么所包含的头文件是在内核源码的安装目录下,即/usr/src/kernel/include,这时一般要在Makefile文件中指定内核源码目录,在编译时指定INCLUDE目录,看你自己解压后安装的目录

     

    展开全文
  • linux 下编程时, 默认编译器的头文件路径为 /user/include 如果在程序中使用了该路径下的头文件,  直接包含即可, 不需要指定为 /user/include/。例如在程序中使用 #incude , 是使用了  /user/include/stdio.h...

       

           在 linux 下编程时, 默认编译器的头文件路径为 /user/include 如果在程序中使用了该路径下的头文件, 

    直接包含即可, 不需要指定为 /user/include/。例如在程序中使用 #incude <stdio.h>, 是使用了 

    /user/include/stdio.h。由于系统默认的路径不包括  /user/include 下的子目录,因此如果在编程中使用

    到了 /user/include 下某个子目录的头文件时(在我们安装了第三方库的时候,经常会遇到), 需要指定相对路

    径,也就是子目录的名称不能省掉。例如  #include <mysql/mysql.h>

    展开全文
  • linux添加头文件路径

    2017-05-10 19:46:42
    linux添加头文件路径 对所有用户有效在/etc/profile增加以下内容。 如果只对当前用户有效在Home目录下的.bashrc或.bash_profile里增加下面的内容:(注意:等号前面不要加空格,否则可能出现 command not found) ...
    linux添加头文件路径
    对所有用户有效在/etc/profile增加以下内容。

    如果只对当前用户有效在Home目录下的.bashrc或.bash_profile里增加下面的内容:(注意:等号前面不要加空格,否则可能出现 command not found)


    #在PATH中找到可执行文件程序的路径。

    export PATH =$PATH:$HOME/bin


    #gcc找到头文件的路径
    C_INCLUDE_PATH=/usr/include/libxml2:/MyLib

    export C_INCLUDE_PATH


    #g++找到头文件的路径
    CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH:/usr/include/libxml2:/MyLib

    export CPLUS_INCLUDE_PATH


    #找到动态链接库的路径
    LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/MyLib

    export LD_LIBRARY_PATH


    #找到静态库的路径
    LIBRARY_PATH=$LIBRARY_PATH:/MyLib
    export LIBRARY_PATH
    展开全文
  • 编译时加入额外函式库连结的方式: [root@www ~]# gcc sin.c -lm -L/lib -L/usr/lib ...特别注意,使用 gcc 编译时所加入的那个 -lm 是有意义的,他可以拆开成两部份来看: ...-l :是『加入某个函
  • Linux指定动态库路径众所周知,Linux动态库的默认搜索路径是/lib和/usr/lib。动态库被创建后,一般都复制到这两个目录中。当程序执行时需要某动态库,并且该动态库还未加载到内存中,则系统会自动到这两个默认搜索...
  • 一、头文件 如果从纯粹的text文件来说,#include的作用就是搜索它后面指示的文件,并把这个文件的内容加到当前的文件中。一般我们编程时,都是包含一些与.h为后缀的头文件,但是它可以包含任何后缀的任何形式的...
  • 如果在CMAKE配置中 .../home/ll中的头文件查找优先级高于系统默认目录/usr/include和/usr/local/include 即使增加 include_directories(AFTER /home/ll) 来append这个目录,其优先级依然高于系统默认目录
  • 但是我觉得这样太麻烦了,每次编译时还要指定动态库文件路径和名字,我知道可以通过编写makefile文件来解决这个问题,但是我还是觉得太麻烦,后来就想找一种方法来增加gcc编译器的头文件和库文件默认搜索路径,做到 ...
  • 是在linux-2.6.29/include/linux下面寻找源文件。 #include 是在linux-2.6.29/arch/arm/include/asm下面寻找源文件。 #include 是在linux-2.6.29/arch/arm/mach-s3c2410/include/mach下面寻找源文件。   #...
  • gcc指定头文件路径及动态链接库路径   本文详细介绍了linux 下gcc头文件指定方法,以及搜索路径顺序的问题。另外,还总结了,gcc动态链接的方法以及路径指定,同样也讨论了搜索路径的顺序问题。本文包含了很...
  • 会在默认情况下指定到 /usr/include 文件夹 ( 更深层次的是一个相对路径, GCC 可执行程序的路径是 /usr/bin ,那么它在实际工作时指定头文件头径是一种相对路径方法,换算成绝对路径就是 /usr/include) 2.GCC 还...
  • 详细介绍了linux下gcc编译器使用时设计到的头文件和库文件链接问题
  • linux下C/C++ 头文件以及库文件的搜索路径 文章目录linux下C/C++ 头文件以及库文件的搜索路径基础知识gcc搜索头文件顺序linux 库文件的搜索顺序 基础知识 使用 #include&...使用 -I 参数指定的头文件路径仅...
  • linux下gcc默认搜索头文件及库文件的路径 一、头文件 gcc 在编译时如何去寻找所需要的头文件: ※所以header file的搜寻会从-I开始 ※然后找gcc的环境变量 C_INCLUDE_PATH,CPLUS_INCLUDE_PATH,OBJC_INCLUDE_...
  • Linux系统里,使用c++编译文件的时候,需要引入头文件 如 include<test.hpp> 如果test.hpp没有在搜索路径中,会报错,如 oic.cpp:13:35: fatal error: boost/python/module.hpp: No such file or ...
  • 1.gcc 默认头文件搜索路径其实就是安装路径 gcc的hu
1 2 3 4 5 ... 20
收藏数 43,500
精华内容 17,400
关键字:

linux 修改默认头文件路径