platform平台总线驱动1:模型简介

总线驱动框架的基本实现:

1.设备:

(1)struct device,这个结构体是所以设备的公共部分的一个软件抽象;

(2)struct xxx_device,这个结构体内包含struct device结构体,每一个结构体代表一种硬件设备;

(3)driver_register是内核提供的注册设备结构体的接口函数。

2.驱动:

(1)struct device_driver,是驱动程序在内核中的抽象;

(2)其中的两个元素很重要:name:用于和device结构体进行匹配,实现硬件的驱动;prob:用来检测一个设备是否可以被该驱动所管理。

总结:设备代表硬件,驱动代表软件,当两者相遇时才构成一个完整的驱动。

3.总线:

负责将设备和驱动进行管理,最终完成具体的硬件操作。

注:linux系统中使用多种方式对设备驱动进行管理,其中除了总线类bus外还有类class的方式。

 

platform平台总线的工作流程:

1.系统负责启动时在bus系统中注册platform;

2.内核移植的人负责提供具体硬件对应的platform_device结构体;

3.写驱动的人负责提供platform_driver,也就是编写驱动实现相关的代码;

4.platform平台总线架构中的match函数发现driver和device匹配后,调用driver的probe函数来完成驱动的初始化和安装,之后设备就可以正常的工作了。

 

平台总线的分析:

1.设备:结构体platform_device,注册接口:platform_device_register

struct platform_device {
	const char	* name;
	int		id;
	struct device	dev;
	u32		num_resources;
	struct resource	* resource;

	const struct platform_device_id	*id_entry;

	/* arch specific additions */
	struct pdev_archdata	archdata;
};

name:平台总线下设备的名字;

dev:所有设备通用属性的结构体;

num_resources:设备使用到的resource个数;

resource:设备使用到的资源使用一个数组来管理,这个指针变量指向数组的首地址;

id_entry:平台总线设备id表;

archdata:自留地,开发者自己添加设备特有的内容,用于扩展。


2.驱动:结构体platform_driver,注册接口:platform_driver_register

struct platform_driver {
	int (*probe)(struct platform_device *);
	int (*remove)(struct platform_device *);
	void (*shutdown)(struct platform_device *);
	int (*suspend)(struct platform_device *, pm_message_t state);
	int (*resume)(struct platform_device *);
	struct device_driver driver;
	const struct platform_device_id *id_table;
};

probe函数:驱动探测函数,一般使用对设备进行初始化,检测设备是否通讯正常,是否可用;

remove函数:卸载驱动;

shutdown函数:关闭设备;

resume函数:设备的唤醒,与shutdown函数完成电源管理类似的功能;

suspend函数:挂起一个设备;

struct device_driver driver:驱动所共有的部分;

const struct platform_device_id *id_table:设备id表;

 

点击查看:platfoem平台总线实例

 

End。。。。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值