linux 下各个头文件的作用(linux 2.6内核 s3c24xx)

来源:互联网 发布:sql基础教程 豆瓣 编辑:程序博客网 时间:2024/05/17 02:18
Linux头文件目录中总共有32个.h头文件。其中主目录下有13个,asm子目录中有4个,linux子目录中有10个,sys子目录中有5个。这些头文件各自的功能如下:
    <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()及相关常数符号。
2.6.30.4的头文件的位置和2.6.25.8的不一样,除去内核源码下的include目录外,

在arch/arm/mach-s3c2410/和arch/arm/plat-s3c24xx/目录下都有include目录的。

 

#include <linux/kernel.h>     // printk()

#include <linux/slab.h>      // kmalloc() 

#include <linux/fs.h>        // file_operation,inode_operations,super_operations

#include <linux/errno.h>      // error codes */

#include <linux/types.h>      // size_t等各种系统typedef的数据类型 */

#include <linux/fcntl.h>      // O_ACCMODE */

#include <linux/poll.h>      // COPY_TO_USER */
 

#include <linux/init.h>      // #define module_init(x)    __initcall(x);  
                  // #define module_exit(x)    __exitcall(x); 


#include <linux/miscdevice.h>     // extern int misc_register();  

                                  // 注册miscdevice结构体成员变量设备

                                  // extern int misc_deregister();  

                                  // 注销miscdevice结构体成员变量设备 

  

#include <linux/cdev.h>      // void cdev_init()
                  // struct cdev *cdev_alloc(void);
                  //  void cdev_put(struct cdev *p);
                  //  int cdev_add(struct cdev *, dev_t, unsigned);
                  //  void cdev_del(struct cdev *);
                  //  void cd_forget(struct inode *); 

 

#include <mach/hardware.h>     // 和GPIO口操作相关的函数定义的头文件对应的源文件在

                                   //  /arch/arm/plat-s3c24xx/gpio.c  

                                   //  void s3c2410_gpio_cfgpin(pin,function);
                  // unsigned int s3c2410_gpio_getcfg(pin);
                  // void s3c2410_gpio_pullup(pin,to);
                  // int s3c2410_gpio_getpull(pin);
                  // void s3c2410_gpio_setpin(lin,to);
                  // unsigned int s3c2410_gpio_getpin(pin);
                  // unsigned int s3c2410_modify_misccr(clear,chang)

                  // int s3c2410_gpio_getirq(pin);
                                   //  int s3c2410_gpio_irq2pin(pin);

                    

#include <mach/regs-gpio.h>     // 和GPIO口相关的一些宏定义

                                    //(在arch/arm/mach-s3c2410/mach)

#include <linux/platform_device.h> 

#include <linux/interrupt.h>      // typedef irqreturn_t (*irq_handler_t) 

                                    // (int, void *);
                  // extern void free_irq(unsigned int, void *);

                                    // extern void disable_irq(unsigned int irq);
                  // extern void enable_irq(unsigned int irq);

                                    // 等和中断相关函数的声明 

 

#include <linux/wait.h>         // wake_up_interruptible唤醒 指定的注册在等待队列

                                   //上的进/程。该函数不能直接的立即唤醒进程,而是由调

                                   // 度程序转换上下文,调整为可运行状态。

                                   // DECLARE_WAIT_QUEUE_HEAD(button_waitq);声明队列为

                                   // 全局变量 

                                   // wait_event_interruptible该函数修改task的状态

                                   // 为 TASK_INTERRUPTIBLE,意味着改进程将不会继续运

                                   // 行直到被唤醒,然后被添加到等待队列wq中

 

#include <linux/poll.h>       // poll_wait 

#include <asm/uaccess.h>      // copy_to_user和copy_from_user 
#include <asm/io.h>         // __raw_readl  __raw_writel

#include <linux/clk.h>       // struct clk *clk_get

                                    // (struct device *dev, const char *id);
                  // unsigned long clk_get_rate(struct clk *clk);
 

 

#include <plat/clock.h>       // struct clk;结构体的定义(在arch/arm/plat-

                                    // s3c/plat/include/clock.arch中,对应的源文件在

                                    // /arm/plat-s3c/clock.c)

 

#include <linux/device.h>           //包含了device、class 、device_driver等结构的定义

#include <mach/regs-mem.h>     // 和bank相关的寄存器的宏定义 

#include <asm/div64.h>       // Linux内核中64位除法函数do_div 

#include <linux/fb.h>        // struct fb_info 结构体的定义 

#include <mach/fb.h>        // struct s3c2410fb_display

                                    //(在arch/arm/mach-s3c2410/include/mach/fb.h)

 

#include <linux/module.h>      //MODULE_LICENSE("GPL");内核认识的特定许可有, 
                     "GPL"( 适用 GNU 通用公共许可的任何版本 ), 
                     "GPL v2"( 只适用 GPL 版本 ), 
                     "GPL and additional rights", 
                     "Dual BSD/GPL", 
                     "Dual MPL/GPL", 
                     "Proprietary".
                除非你的模块明确标识是在内核认识的一个自由许可
                               下,否则就假定它是私有的,内核在模块加载时被"弄污
                               浊"了. 象我们在第 章"许可条款"中提到的, 内核开
                               发者不会热心帮助在加载了私有模块后遇到问题的用户.
                MODULE_AUTHOR 声明谁编写了模块 ), 
                      MODULE_DESCRIPION( 一个人可读的关于模块做什么的声明 ), 
                               MODULE_VERSION(一个代码修订版本
号;看 <linux/module.h> 
                               的注释以便知道创建版本字串使用的惯例), 
                        MODULE_ALIAS 模块为人所知的另一个名子 ), 
                          MODULE_DEVICE_TABLE(来告知用户空间, 模块支持那些设备 )
原创粉丝点击