linux中platform总线解析(一)(platform总线初始化)

本文介绍了Linux系统中platform总线的初始化过程,包括early_platform_cleanup函数的早期清理工作、platform总线的定义、设备注册及加载到系统中的步骤,以及如何向系统注册总线。在设备注册过程中,涉及到了设备初始化和在sysfs中的表示。
摘要由CSDN通过智能技术生成

platform初始化的函数调用:

start_kernel-->rest_init-->kernel_init-->kernel_init_freeable-->do_base_setup--->driver_init--->platform_bus_init

初始化函数:

platform初始化函数:

int __init platform_bus_init(void)
{
	int error;
//平台初始化前的一些清理工作
	early_platform_cleanup();
//注册platform_bus设备
	error = device_register(&platform_bus);
	if (error)
		return error;
//注册platform_bus_type总线
	error =  bus_register(&platform_bus_type);
	if (error)
		device_unregister(&platform_bus);
	return error;
}

下面就分开解析初始化函数所作的工作。

1, eraly_platform_cleanup函数

早期清理工作,主要是清理early_platform_device_list链表

static __initdata LIST_HEAD(early_platform_driver_list);
static __initdata LIST_HEAD(early_platform_device_list);
void __init early_platform_cleanup(void)
{
	struct platform_device *pd, *pd2;

//把early_platform_device_list链表中的元素删除,并把元素占据空间清零
	list_for_each_entry_safe(pd, pd2, &early_platform_device_list,
				 dev.devres_head) {
		list_del(&pd->dev.devres_head);
		memset(&pd->dev.devres_head, 0, sizeof(pd->dev.devres_head));
	}
}

2,platform设备的定义

struct device platform_bus = {
	.init_name	= "platform",
};

可以看到设备只是初始化了名字


3,platform总线的定义

struct bus_type platform_bus_type = {
	.name		= "platform",
	.dev_attrs	= platform_dev_attrs,   
	.match		= platform_match,     //总线匹配函数(device和driver)
	.uevent		= platform_uevent,     //事件(热插拔)函数
	.pm		= &platform_dev_pm_ops,//电源管理相关的操作函数
};
在这里对总线的定义主要是设置总线的操作函数

4,platform设备注册函数device_register

对于platform总线就是初始化了操作总线的函数。

/*设备的注册分为两个步骤
*第一步:初始化设备
*第二部:把设备加载到系统中
*/

int device_register(struct device *dev)
{
	device_initialize
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值