1. device_create_file
int device_create_file(struct device *, struct device_attribute *);
在/sys/devices/xxx/目录下创建device属性文件
void device_remove_file(struct device *, struct device_attribute *);
移除/sys/devices/xxx/目录下的device属性文件
2. driver_sysfs_add
from link:http://blog.csdn.net/yj4231/article/details/7799245(Linux设备模型——设备驱动模型和sysfs文件系统解读)
static int driver_sysfs_add(struct device *dev)
{
int ret;
/* 在/sys/bus/platform/drivers/s3c2410-spi目录下建立symlink,链接名为kobj->name(s3c2410-spi.0),
链接指向/sys/devices/platform/s3c2410-spi.0 */
ret = sysfs_create_link(&dev->driver->p->kobj, &dev->kobj,
kobject_name(&dev->kobj));
if (ret == 0) {
/* 在/sys/devices/platform/s3c2410-spi.0/下建立symlink,链接名为driver,
指向/sys/bus/drivers/s3c2410-spi */
ret = sysfs_create_link(&dev->kobj, &dev->driver->p->kobj,
"driver");
if (ret)
sysfs_remove_link(&dev->driver->p->kobj,
kobject_name(&dev->kobj));
}
return ret;
}
static int driver_sysfs_add(struct device *dev)
{
int ret;
/* 在/sys/bus/XXX/drivers/XXX目录下建立symlink,链接名为kobj->name,
链接指向/sys/devices/platform/XXX */
ret = sysfs_create_link(&dev->driver->p->kobj, &dev->kobj,
kobject_name(&dev->kobj));
if (ret == 0) {
/* 在/sys/devices/platform/XXX/下建立symlink,链接名为driver,
指向/sys/bus/xxx/drivers目录下的某个目录*/
ret = sysfs_create_link(&dev->kobj, &dev->driver->p->kobj,
"driver");
if (ret)
sysfs_remove_link(&dev->driver->p->kobj,
kobject_name(&dev->kobj));
}
return ret;
}
* sysfs_create_link - create symlink between two objects.
* @kobj: object whose directory we're creating the link in.
* @target: object we're pointing to.
* @name: name of the symlink.
int sysfs_create_link(struct kobject *kobj, struct kobject *target, const char *name)
第一个参数是要创建连接的对象(就是链接文件所在的目录),第二个参数是指向的对象(就是链接中实实在在的文件或者目录),第三个参数是链接文件名字。
执行完以后,建立了两个链接。
这样就在用户空间呈现出驱动和设备的关系了。我们来验证下。
[root@yj423 s3c2410-spi]#pwd
/sys/bus/platform/drivers/s3c2410-spi
[root@yj423 s3c2410-spi]#ll s3c2410-spi.0
lrwxrwxrwx 1 root root 0 Jan 1 02:28 s3c2410-spi.0 -> ../../../../devices/platform/s3c2410-spi.0
[root@yj423 s3c2410-spi.0]#pwd
/sys/devices/platform/s3c2410-spi.0
[root@yj423 s3c2410-spi.0]#ll driver
lrwxrwxrwx 1 root root 0 Jan 1 02:26 driver -> ../../../bus/platform/drivers/s3c2410-spi