linux 下各个头文件的作用

2.6.30.4的头文件的位置和2.6.25.8的不一样,除去内核源码下的include目录外,

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

#include      // printk()

#include       // kmalloc()

#include         // file_operation,inode_operations,super_operations

#include       // error codes */

#include       // size_t等各种系统typedef的数据类型 */

#include       // O_ACCMODE */

#include       // COPY_TO_USER */

#include       // #define module_init(x)    __initcall(x);

// #define module_exit(x)    __exitcall(x);

#include      // extern int misc_register();

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

// extern int misc_deregister();

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

#include       // 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      // 和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      // 和GPIO口相关的一些宏定义

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

#include 

#include       // 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          // wake_up_interruptible唤醒 q 指定的注册在等待队列

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

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

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

// 全局变量

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

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

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

#include        // poll_wait

#include       // copy_to_user和copy_from_user

#include          // __raw_readl  __raw_writel

#include        // struct clk *clk_get

// (struct device *dev, const char *id);

// unsigned long clk_get_rate(struct clk *clk);

#include        // struct clk;结构体的定义(在arch/arm/plat-

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

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

#include            //包含了device、class 、device_driver等结构的定义

#include      // 和bank相关的寄存器的宏定义

#include        // Linux内核中64位除法函数do_div

#include         // struct fb_info 结构体的定义

#include         // struct s3c2410fb_display

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

#include       //MODULE_LICENSE("GPL");内核认识的特定许可有,

           "GPL"( 适用 GNU 通用公共许可的任何版本 ),

"GPL v2"( 只适用 GPL 版本 2 ),

"GPL and additional rights",

"Dual BSD/GPL",

"Dual MPL/GPL",

"Proprietary".

除非你的模块明确标识是在内核认识的一个自由许可

下,否则就假定它是私有的,内核在模块加载时被"弄污

浊"了. 象我们在第 1 章"许可条款"中提到的, 内核开

发者不会热心帮助在加载了私有模块后遇到问题的用户.

MODULE_AUTHOR ( 声明谁编写了模块 ),

MODULE_DESCRIPION( 一个人可读的关于模块做什么的声明 ),

MODULE_VERSION(一个代码修订版本号;看 

的注释以便知道创建版本字串使用的惯例),

MODULE_ALIAS ( 模块为人所知的另一个名子 ),

MODULE_DEVICE_TABLE(来告知用户空间, 模块支持那些设备 )

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐