linux驱动学习加强版-7(平台虚拟总线的引入)

本文介绍了Linux平台虚拟总线的优势,其架构包括platform_device和platform_driver的配合,以及如何通过platform机制编写驱动程序。文章通过示例展示了如何使用platform框架进行驱动开发,强调了设备树匹配的重要性。

一、为什么要引入平台虚拟总线

Linux platform driver机制和传统的device_driver机制相比,一个十分明显的优势在于platform机制将本身的资源注册进内核,由内核统一管理,在驱动程序中使用这些资源时通过platform_device提供的标准接口进行申请并使用。
这样提高了驱动和资源管理的独立性,并且拥有较好的可移植性和安全性。platform是一个虚拟的地址总线,相比pci,usb,它主要用于描述SOC上的片上资源,比如s3c2410上集成的控制器(lcd,watchdog,rtc等),platform所描述的资源有一个共同点,就是可以在cpu的总线上直接取址.

二、平台虚拟总线架构

platform机制开发的并不复杂,由两部分组成:platform_device和platfrom_driver
通过Platform机制开发发底层驱动的大致流程为:
定义 platform_device
注册 platform_device
定义 platform_driver
注册 platform_driver
platform_device 一般来说是和硬件紧密相关的,而 platform_driver 是比较通用的代码。
而这两者是通过match函数进行比较的,比较方法就是通过name去看是不是有对应相同的name。
在这里插入图片描述
如果有匹配到的device,那么driver这边就会调用probe函数进行注册了。
(而现在的platform_device其实是从设备树里面进行的转化,所以现在我们其实不会太关心platform_device驱动,内核自从引入dts机制后, platform_device_register已经不推荐使用,而是直接通过of_platform_default_populate_init完成platform_device的注册)

相关代码和目录在这里。大家可以再内核里面自己去搜索下

driver/of/platform.c
of_platform_default_populate_init	
	of_platform_default_populate(NULL, NULL, NULL);/* Populate everything else. */
	
		of_platform_populate(root, matches, lookup, parent)
	
			of_platform_bus_probe(root, matches, parent)
				
				for_each_child_of_node(root, child) {
   
   
				
					of_platform_bus_create(child, matches, lookup, parent, true);
						//节点必须包含compatible属性,才能创建platform_device
						if (strict && (!of_get_property(bus, "compatible", NULL))) {
   
   
							pr_debug("%s() - skipping %pOF, no compatible prop\n",
							 __func__, bus);
							return 0;
						}
						//如果bus节点的compatile属性不吻合matches成表, 就不处理它的子节点
						dev = of_platform_device_create_pdata(bus, bus_id, platform_data, parent);
						
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

永不秃头的程序员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值