快速业务通道

Linux设备驱动的分层设计思想

作者 佚名技术 来源 Linux系统 浏览 发布时间 2012-04-19
1.1 设备驱动核心层和例化 在面向对象的程序设计中,可以为某一类相似的事物定义一个基类,而具体的事物可以继承这个基类中的函数.如果对于继承的这个事物而言,其某函数的实 现与基类一致,那它就可以直接继承基类的函数;相反,它可以重载之.这种面向对象的设计思想极大地提高了代码的可重用能力,是对现实世界事物间关系的一种 良好呈现. Linux内核完全由C语言和汇编语言写成,但是却频繁用到了面向对象的设计思想.在设备驱动方面,往往为同类的设备设计了一个框架,而框架中的核 心层则实现了该设备通用的一些功能.同样的,如果具体的设备不想使用核心层的函数,它可以重载之.举个例子: return_type core_funca(xxx_device * bottom_dev, param1_type param1, param1_type param2) { if (bottom_dev->funca) return bottom_dev->funca(param1, param2); /* 核心层通用的funca代码 */ ... } 上述core_funca的实现中,会检查底层设备是否重载了funca(),如果重载了,就调用底层的代码,否则,直接使用通用层的.这样做的好 处是,核心层的代码可以处理绝大多数该类设备的funca()对应的功能,只有少数特殊设备需要重新实现funca(). 再看一个例子: return_type core_funca(xxx_device * bottom_dev, param1_type param1, param1_type param2) { /*通用的步骤代码A */ ... bottom_dev->funca_ops1(); /*通用的步骤代码B */ ... bottom_dev->funca_ops2(); /*通用的步骤代码C */ ... bottom_dev->funca_ops3(); } 上述代码假定为了实现funca(),对于同类设备而言,操作流程一致,都要经过“通用代码A、底层ops1、通用代码B、底层ops2、通用代码 C、底层ops3”这几步,分层设计明显带来的好处是,对于通用代码A、B、C,具体的底层驱动不需要再实现,而仅仅只关心其底层的操作ops1、 ops2、ops3. 图1明确反映了设备驱动的核心层与具体设备驱动的关系,实际上,这种分层可能只有2层(图1的a),也可能是多层的(图1的b). 图1 Linux设备驱动的分层 这样的分层化设计在Linux的input、RTC、MTD、I
Empire CMS,phome.net
2 C、SPI、TTY、USB等诸多设备驱动类型中屡见不鲜.下面的2节以input和RTC为例先行进行一番说明,当然,后续的章节会对几个大的设备类型 对应驱动的层次进行更详细的分析. 1.2 输入设备驱动 输入设备(如按键、键盘、触摸屏、鼠标等)是典型的字符设备,其一般的工作机理是底层在按键、触摸等动作发送时产生一个中断(或驱动通过timer 定时查询),然后CPU通过SPI、I2 C或外部存储器总线读取键值、坐标等数据,放入1个缓冲区,字符设备驱动管理该缓冲区,而驱动的read()接口让用户可以读取键值、坐标等数据. 显然,在这些工作中,只是中断、读值是设备相关的,而输入事件的缓冲区管理以及字符设备驱动的file_operations接口则对输入设备是通 用的.基于此,内核设计了输入子系统,由核心层处理公共的工作.Linux内核输入子系统的框架如图2所示. 图2 Linux输入设备驱动的分层 输入核心提供了底层输入设备驱动程序所需的API,如分配/释放一个输入设备: struct input_dev *input_allocate_device(void); void input_free_device(struct input_dev *dev); input_allocate_device()返回的是1个input_dev的结构体,此结构体用于表征1个输入设备. 注册/注销输入设备用的如下接口: int __must_check input_register_device(struct input_dev *); void input_unregister_device(struct input_dev *); 报告输入事件用的如下接口: /* 报告指定type、code的输入事件 */ void input_event(struct input_dev *dev, unsigned int type, unsigned int code, int value); /* 报告键值

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号