首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

Linux 下个头文件作用(2)

Linux 下个头文件作用(2)

#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);
                                  //  ints3c2410_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唤醒 q 指定的注册在等待队列
                                  //上的进/程。该函数不能直接的立即唤醒进程,而是由调
                                   //度程序转换上下文,调整为可运行状态。
                                  // 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 版本 2 ),
                     "GPL and additional rights",
                     "Dual BSD/GPL",
                     "Dual MPL/GPL",
                     "Proprietary".

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

                               下,否则就假定它是私有的,内核在模块加载时被"弄污
                               浊"了. 象我们在第 1 章"许可条款"中提到的, 内核开
                               发者不会热心帮助在加载了私有模块后遇到问题的用户.
               MODULE_AUTHOR ( 声明谁编写了模块 ),
                     MODULE_DESCRIPION( 一个人可读的关于模块做什么的声明 ),
                              MODULE_VERSION(一个代码修订版本
号;看 <linux/module.h>

                              的注释以便知道创建版本字串使用的惯例),
                       MODULE_ALIAS ( 模块为人所知的另一个名子 ),
                        MODULE_DEVICE_TABLE(来告知用户空间, 模块支持那些设备 )
继承事业,薪火相传
返回列表