您的位置:首页 > 其它

内核设备驱动API之device_rename

2018-03-23 16:32 615 查看
int device_rename(struct device *dev, const char *new_name)用于给已经存在设备重新命令。
其源码分析如下:
int device_rename(struct device *dev, const char *new_name)
{
struct kobject *kobj = &dev->kobj;
char *old_device_name = NULL;
int error;
#获得需要改名的设备
dev = get_device(dev);
if (!dev)
return -EINVAL;
#打印改名后新的名字
dev_dbg(dev, "renaming to %s\n", new_name);
#获得这个逻辑设备老的name
old_device_name = kstrdup(dev_name(dev), GFP_KERNEL);
#如果这个设备本来就没有name,改名就没有必要了,直接退出
if (!old_device_name) {
error = -ENOMEM;
goto out;
}
#修改这个device在sysfs下的name
if (dev->class) {
error = sysfs_rename_link_ns(&dev->class->p->subsys.kobj,
kobj, old_device_name,
new_name, kobject_namespace(kobj));
if (error)
goto out;
}
#修改sysfs的name后,然后才修改这个设备kobject的name
error = kobject_rename(kobj, new_name);
if (error)
goto out;

out:
#和get_device相对应
put_device(dev);
#释放之前为设备老的name申请的memory
kfree(old_device_name);

return error;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: