原创 io驱动程序分析

2010-1-11 15:10 2666 6 6 分类: MCU/ 嵌入式

看了一些资料,对驱动程序的编写大概有了些了解。但是仍然没有形成系统的概念,写这个帖子整理一下思路。


驱动程序中要定义一个设备名


#define  DEVICE_NAME  "EmbedSky_leds"


定义个主设备号


#define LED_MAJOR  231


定义一个file_operations 类型的结构,应用程序操作设备文件时所调用的open,read,write等函数,最终会调用这个结构中指定的对应函数


struct file_operations EmbedSky_leds_fops =


{


   .owner = THIS_MODULE;//这句的作用还不明白,谁能补充?


   .open = EmbedSky_leds_open;


   .ioctl = EmbedSky_leds_ioctl;


};


接下来定义EmbedSky_leds_open()和EmbedSky_leds_ioctl()函数。


定义设备初始化函数


static int __init EmbedSky_leds_init(void)


{


   在初始化函数里调用


  regist_chrdev(LED_MAJOR,DEVICE_NAME,&EmbedSky_leds_fop)注册设备驱动程序。参数为主设备号,设备名字,file_operations结构。


  在初始化函数里还调用class_create(THIS_MODULE,DEVICE_NAME)函数注册一个类,目的是用mdev在“/dev/"目录下建立设备节点,这个原理还不清楚。


}


定义一个设备卸载函数


static void __exit EmbedSky_leds_exit(void)


{


    在卸载函数里卸载驱动程序


   unregister_chrdev(LED_MAJOR,DEVICE_NAME);


}


指定驱动程序的初始化函数和卸载函数


module_init(EmbedSky_leds_init);


module_exit(EmbedSky_leds_exit);


还有一些不是必须的信息


MODULE_LICENSE("GPL") ;   //遵循的协议


MODULE_AUTHOR("YW912");//驱动程序的作者


 


 


未完待续。。。


 

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
6
关闭 站长推荐上一条 /3 下一条