Linux驱动中remove和shutdown的区别

Linux驱动中的remove和shutdown回调在不同场景下触发:卸载驱动时调用remove,系统关机/重启时调用shutdown。remove用于设备绑定驱动的解除,而在系统关闭时,shutdown执行。在设备移除或驱动卸载过程中,涉及设备驱动的释放和sys文件系统下文件的删除。
摘要由CSDN通过智能技术生成

驱动中remove和shutdown根本的区别在于调用的时机不同,我们以platform驱动为例,如下:

static struct platform_driver s3cmci_driver = {
	.driver	= {},
	.remove		= __devexit_p(s3cmci_remove),
	.shutdown	= s3cmci_shutdown,
};

static int __init s3cmci_init(void)
{
	return platform_driver_register(&s3cmci_driver);
}

int platform_driver_register(struct platform_driver *drv)
{
	if (drv->remove)
		drv->driver.remove = platform_drv_remove;
	if (drv->shutdown)
		drv->driver.shutdown = platform_drv_shutdown;

	return driver_register(&drv->driver);
}
14、15行,drv->remove是 一个特定 (具体)platform驱动的remove回调,比如这里的s3cmci_remove函数。drv->driver.remove是platform框架提供的,所有platform驱动通用。那么,一个特定驱动的remove函数如何得到调用?答案在platform_drv_remove函数中:

static int platform_drv_remove(struct device *_dev)
{
	struct platform_driver *drv = to_platform_driver(_dev->driver);
	struct platform_device *dev = to_platform_device(_dev);

	return drv->remove(dev);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值