设备驱动的分层思想

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等诸多设备驱动类型中广泛应用。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值