您的位置:首页 > 其它

设备驱动的分层思想

2012-12-12 16:40 197 查看
linux内核虽然完全由c语言编写,但却频繁用到面向对象的分层设计思想。在设备驱动方面,往往为同类的设备设计一个框架,框架的核心层实现了通用操作,如果具体设备需要具体操作,可以进行重载。

1.重载的一般实现:

int core_func(struct xxx_dev *dev,...){

if(dev->func)

return dev->func(...);

/*核心层的实现*/

}

首先检查是否在底层设备驱动中重载了该函数,如果重载了就调用具体设备的具体实现,否则按核心层代码功能实现。

2.简化驱动程序

return_type core_func(xxx_dev *dev,...){

//通用代码A

底层操作1:dev->func_ops1

//通用代码B

底层操作2:dev->func_ops2

//通用代码C

底层草组3:dev->func_ops3

}

这样就免去了通用的代码,只需要实现具体设备的操作

linux驱动中,一般把通用的驱动部分放在core层中,底层不能通用的部分则划分为设备驱动,所以设备的驱动也是要联合core层才是一个完整的驱动,只是linux内核里面已经有了core层通用的设备,编写驱动时只需要编写不通用的部分。

分层化设计在linux的input、RTC、MTD、I2C、SPI、TTY、USB等诸多设备驱动类型中广泛应用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: