QQ : 3492362066
Email : [email protected]
===========================================================
1. #include
/* printk() */
2 #include
/* kmalloc() */
3. #include
/* file_operations、inode_operations、super_operations结构体*/
4. #include
/* error codes */
5. #include
/* size_t等各种系统typedef的数据类型 */
6. #include
/* O_ACCMODE */
7. #include
/* COPY_TO_USER */
8. #include
/*MODULE_LICENSE("GPL");内核认识的特定许可有,
"GPL"(适用 GNU 通用公共许可的任何版本),
"GPL v2"( 只适用 GPL 版本 2 ), "GPLand additional rights", "Dual BSD/GPL", "DualMPL/GPL", "Proprietary".除非你的模块明确标识是在内核认识的一个自由许可下, 否则就假定它是私有的,内核在模块加载时被"弄污浊"了. 象我们在第 1 章"许可条款"中提到的, 内核开发者不会热心帮助在加载了私有模块后遇到问题的用户.
MODULE_AUTHOR ( 声明谁编写了模块 ),
ODULE_DESCRIPION( 一个人可读的关于模块做什么的声明 ),
MODULE_VERSION ( 一个代码修订版本号;
看
MODULE_ALIAS ( 模块为人所知的另一个名子 ),
MODULE_DEVICE_TABLE ( 来告知用户空间, 模块支持那些设备 ).*/
9. #include
/*
#define module_init(x) __initcall(x); driver initializationentry point
#define module_exit(x) __exitcall(x); driver exit entry point
*/
10. #include
/* extern int misc_register(struct miscdevice * misc);注册miscdevice结构体成员变量设备
extern int misc_deregister(structmiscdevice *misc);注销miscdevice结构体成员变量设备
*/
11. #include
/* void cdev_init(struct cdev *, const struct file_operations *);
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 *); */
12 #include
/* 和GPIO口操作相关的函数定义的头文件
对应的源文件在/linux-2.6.32.2/arch/arm/plat-s3c24xx/gpio.c
void s3c2410_gpio_cfgpin(unsigned int pin, unsignedint function);
unsigned int s3c2410_gpio_getcfg(unsigned int pin);
void s3c2410_gpio_pullup(unsigned int pin, unsignedint to);
int s3c2410_gpio_getpull(unsigned int pin);
void s3c2410_gpio_setpin(unsigned int pin, unsignedint to);
unsigned int s3c2410_gpio_getpin(unsigned int pin);
unsigned int s3c2410_modify_misccr(unsigned int clear,unsigned int change);
int s3c2410_gpio_getirq(unsigned int pin);
int s3c2410_gpio_irq2pin(unsigned int irq);*/
13. #include
/* 和GPIO口相关的一些宏定义(在arch/arm/mach-s3c2410/mach) */
14. #include
15. #include
/* typedef irqreturn_t (*irq_handler_t)(int, void *);
extern void free_irq(unsigned int, void *);externvoid disable_irq(unsigned int irq);
extern voidenable_irq(unsigned int irq);等和中断相关函数的声明 */
16. #include
/* wake_up_interruptible 唤醒 q 指定的注册在等待队列上的进程。该函数不能直接的立即唤醒进程,而是由调度程序转换上下文,调整为可运行状态。
staticDECLARE_WAIT_QUEUE_HEAD(button_waitq);声明等待队列为全局变量
wait_event_interruptible该函数修改task的状态为TASK_INTERRUPTIBLE,意味着改进程将不会继续运行直到被唤醒,然后被添加到等待队列wq中*/
17. #include
/* poll_wait */
18. #include
/* copy_to_user和copy_from_user */
19. #include
/* __raw_readl __raw_writel*/
20. #include
/* struct clk *clk_get(struct device*dev, const char *id);
unsigned longclk_get_rate(struct clk *clk); */
21. #include
/* struct clk;结构体的定义 (在arch/arm/plat-s3c/plat/include/clock.arch中,对应的源文件在/arm/plat-s3c/clock.c)*/
22. #include
//包含了device、class 、device_driver等结构的定义
23. #include
/* 和bank相关的寄存器的宏定义 */
24. #include
/* Linux内核中64位除法函数do_div */
25. #include
/* structfb_info 结构体的定义 */
26. #include
/* structs3c2410fb_display(在arch/arm/mach-s3c2410/include/mach/fb.h) */