void sysfs_notify(struct kobject *kobj, const char *dir, const char *attr);
void sysfs_notify_dirent(struct sysfs_dirent *sd);
sysfs_notify()和sysfs_notify_dirent()都是用来唤醒在读写属性文件(sysfs节点)时因调用select()或poll()而阻塞的用户进程。如:
用户空间代码如下:
int main()
{
int hw_fd;
int err;
struct pollfd pfd;
int value = 0;
hw_fd = open("/sys/devices/platform/hw_ps/install", O_RDONLY);//sysfs节点
if (hw_fd < 0)
return -EFAULT;
pfd.fd = hw_fd;
while (1) {
pfd.revents = 0;
err = poll(&pfd, 1, -1); //用户进程调用poll操作时会睡眠,等待内核空间代码调用sysfs_notify()唤醒
if (err) {
err = read(hw_fd, &value, 1);
if(err < 0)
return -ERR;
if(value != 0)
break;
}
}
close(hw_fd);
}
内核空间代码在某处调用sysfs_notify()用来唤醒用户进程:
sysfs_notify(&(pedv->dev.kobj), NULL, "install");
sysfs_notify()第一个参数是内核调用sysfs_create_group/sysfs_create_file创建sysfs节点时的struct kobject对象;
第三个参数是节点的名字;
第二个参数暂时未知,常用NULL。