Platform机制

Platform机制

Platform总线Linux中一种虚拟总线。platform机制的本身使用并不复杂,由两部分组成:platform_device和platform_driver
Platform 驱动与传统的设备驱动模型相比,优势在于platform机制将设备本身的资源注册进内核,由内核统一管理,在驱动程序使用这些资源时使用 统一的接口,这样提高了程序的 可移植性
通过platform机制开发底层设备驱动的流程:
定义platform_device->注册platform_device->定义platform_driver->注册platform_driver
Platform机制使用了bus driver device模型,device是硬件相关代码,driver是比较稳定的代码,类似输入子系统里面,input.c是提供给上层的统一接口,buttons.c是硬件相关代码<-分离->evdev.c是纯软件比较稳定的代码。


1 分析drivers\base\platform.c

platform总线的注册在drivers\base\init.c中调用
void __init driver_init(void)
{
	/* These are the core pieces */
	devtmpfs_init();
	devices_init();
	buses_init();
	classes_init();
	firmware_init();
	hypervisor_init();

	/* These are also core pieces, but must come after the
	 * core core pieces.
	 */
	platform_bus_init();
	system_bus_init();
	cpu_dev_init();
	memory_dev_init();
}
int __init platform_bus_init(void)
{
	int error;

	early_platform_cleanup();

	error = device_register(&platform_bus); // 总线也是一个设备
	if (error)
		return error;
	error =  bus_register(&platform_bus_type); // 注册platform总线
	if (error)
		device_unregister(&platform_bus);
	return error;
}


platform机制是基于Linux总线设备驱动模型实现的
struct bus_type platform_bus_type = {
	.name		= "platform",
	.dev_attrs	= platform_dev_attrs, // 总线属性
	.match		= platform_match, // 用于匹配platform device和platform driver
	.uevent		= platform_uevent,
	.pm		= &platform_dev_pm_ops, // 电源管理相关
};
struct device platform_bus = {
	.init_name	= "platform",
};


static struct device_attribute platform_dev_attrs[] = {
	__ATTR_RO(modalias),
	__ATTR_NULL,
};
#define __ATTR_RO(_name) { \
	.attr	= { .name = __stringify(_name), .mode = 0444 },	\
	.show	= _name##_show,					\
}
static ssize_t modalias_show(struct device *dev, struct device_attribute *a,
			     char *buf)
{
	struct platform_device	*pdev = to_platform_device(dev);
	int len = snprintf(buf, PAGE_SIZE, "platform:%s\n", pdev->name);


	return (len 
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值