字符设备驱动程序框架

字符设备驱动程序框架

ID:41632711

大小:58.82 KB

页数:6页

时间:2019-08-29

字符设备驱动程序框架_第1页
字符设备驱动程序框架_第2页
字符设备驱动程序框架_第3页
字符设备驱动程序框架_第4页
字符设备驱动程序框架_第5页
资源描述:

《字符设备驱动程序框架》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、1、写出open、write函数2、告诉内核1)、定义一个structfile.operations结构并填充好staticstructfileoperationsfirstdrvfops=(.owner=THIS_MODULE,/*这是一个宏,推向编译模块时口动创建的_this_modulo变量*/.open=first_drv_open,.write=first_drv_write,};2)、把structf订eoperations结构体告诉内核major=registerchrdev(0,"firstdrv",&firstdrvfops);//注册,

2、告诉内核相关参数:第一个,设备号,0口动分配主设备号,否则为主设备号0-255第二个:设备名第二个:structfileoperations结构体4)、registerchrdev由谁调用(入口函数调用)staticintfirstdrvinit(void)5)、入口函数须使用内核宏來修饰moduleinit(firstdrvinit);module_init会定义一个结构体,这个结构体里面有一个函数指针指向firstdrvinit这个函数,当我们加载或安装一个驱动时,内核会自动找到这个结构体,然后调川里面的函数指针,这个函数指针指向firstdrvini

3、t这个函数,firstdrvinit这个函数就是把structfileoperations结构体告诉内核6)、有入口函数就有出口函数moduleexit(firstdrvexit);最后加上协议HODULE_LICENSE("GPL");3、mdcv根据系统信息口动创建设备节点:每次写驱动都要手动创建设备文件过于麻烦,使用设备管理文件系统则方便很多。在2.6的内核以前-•直使用的是devfs,但是它存在许多缺陷。它创建了大量的设备文件,英实这些设备更本不存在。而且设备与设备文件的映射具有不确定性,比如U盘即可能对应sdm又可能对应sdb。没有足够的主/辅设

4、备号。2.6之后的内核引入Tsysfs文件系统,它挂载在/sys上,配合udev使用,可以很好的完成devfs的功能,并弥补了那些缺点。(这里说一下,当今内核己经使用netlinkJ)。udev是用户空间的一个应用程序,在嵌入式中用的是mdcv,mdcv在busybox中。mdcv是udev的精简版。首先在busybox中添加支持mdev的选项:LinuxSystemUtilities—>[*]mdev[*]Support/etc/mdev.conf[*]Supportsubdirs/symlinks[*]Supportregularexpressions

5、substitutionswhenrenauningdevice[*]Supportcommcindexecutionatdeviceaddition/removal然后修改/etc/init.d/rcS:echo/sbin/mdcv>/proc/sys/kcrnel/hotplug/sbin/mdev-s执行mdev-s:以-s'为参数调用位于/sbin目录写的mdev(其实是个链接,作用是传递参数给/bin目录下的busybox程序并调用它),mdev扫描/sys/class和/sys/block中所有的类设备目录,如果在目录中含有名为“dev”的文件

6、,且文件中包含的是设备号,则mdev就利用这些信息为这个设备在/dev下创建设备节点文件。一•般只在启动时才执行一次“mdev-s”。热插拔事件:由于启动时运行了命令:echo/sbin/mdev>/proc/sys/kerncl/hotplug,那么当有热插拔事件产生时,内核就会调用位于/sbin目录的mdev。这JFfmdev通过环境变量中的ACTTON和DEVPATH,来确定此次热插拔枣件的动作以及影响了/sys中的那个目录。接着会看看这个目录中是否“dev”的属性文件,如果冇就利用这些信息为这个设备在/dev下创建设备节点文件重新打包文件系统,这样

7、/sys目录,/devH录就有东四了下面是createclass的原型:1#defineclass_create(owner,name)/2({/3staticstructlock_class_key_key;/4_class^create(owner,name,&_key);/5})6externstructclass*_must_check_class_create(structmodule*owner^constcharame,8structlock_class_key*key);9classdestroy的原型如卜:externvoidclass_

8、destroy(structclass*cls);device_c

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。