Linux设备驱动模型--分离分层思想

本文深入探讨Linux设备驱动模型中的分层思想,以platform设备驱动和input设备驱动为例,阐述核心层、设备层和驱动层的抽象与实现。通过主机驱动与外设驱动的分离,降低驱动开发复杂度,提高代码复用性和可维护性。分析了分层设计在减少驱动编写工作量、适应硬件变化方面的优势。
摘要由CSDN通过智能技术生成
一、设备驱动的分层思想 :以platform设备驱动、input设备驱动为例看看他们在分层思想上的体现
【1】在核心层 :一类设备总线通用的功能特性,如果某一设备支持的总线比较特别可以不使用这些功能特性,在自己的设备总线结构体中
进行重载。
例(1)platform核心层 :定义在drivers/base/platform.c文件
Linux内核对设备总线先进行了一次全局的抽象,即概括了所有设备驱动总线具有的功能特性:
struct bus_type {
	//具备总线名、总线属性、总线上设备属性、总线上驱动属性
	const char		*name;
	struct bus_attribute	*bus_attrs;
	struct device_attribute	*dev_attrs;
	struct driver_attribute	*drv_attrs;
	//具备匹配、热插拔、探测、移除设备方案
	int (*match)(struct device *dev, struct device_driver *drv);
	int (*uevent)(struct device *dev, struct kobj_uevent_env *env);
	int (*probe)(struct device *dev);
	int (*remove)(struct device *dev);
	//具备电源管理方案
	void (*shutdown)(struct device *dev);
	int (*suspend)(struct device *dev, pm_message_t state);
	int (*suspend_late)(struct device *dev, pm_message_t state);
	int (*resume_early)(struct device *dev);
	int (*resume)(struct device *dev);
	
	struct dev_pm_ops *pm;
	struct bus_type_private *p; //设备具有不同特性--这本身就是一种共性
};
针对platform设备,内核并没有去实现上面这些通用的功能属性,毕竟在现实中大多数情况,设备的不同功能还是比较多,除非是要在一个cpu下控制批量相同的设备,这只是我个人的看法
struct bus_type platform_bus_type = {
	.name		= "platform",
	.dev_attrs	= platform_dev_attrs,
	.match		= platform_match,
	.uevent		= platform_uevent,
	.pm		= PLATFORM_PM_OPS_PTR,
};
也就是说内核认为platform设备在多数情况下具备的通用功能特性有上面5个方面并给他们赋予了默认方案,
仔细的我们发现platform总线中并没有probe成员,可以认为该总线中并没有或不需要这么一种功能。
经过内核的初始化调用:
int __init platform_bus_init(void);
bus_register(&platform_bus_type);
platform总线上就具有这类设备的一套默认的方案。
例(2)input核心层 :对输入设备的管理进行总体抽
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值