Linux那些事儿之我是Sysfs(11)sysfs 创建普通文件

原创 2007年09月12日 21:15:00
最近彭宇的案件炒得沸沸扬扬,究竟这个社会怎么了?

sysfs文件系统中,普通文件对应于kobject中的属性。用sysfs_create_file(),参数如下:

sysfs_create_file(struct kobject * kobj, const struct attribute * attr) 

传给它的参数是kobj和attr,其中,kobject对应的是文件夹,attribute对应的是该文件夹下的文件。

int sysfs_create_file(struct kobject * kobj, const struct attribute * attr)
{
                    BUG_ON(!kobj || !kobj->dentry || !attr);
                    return sysfs_add_file(kobj->dentry, attr, SYSFS_KOBJ_ATTR);
}
它直接调用sysfs_add_file()

int sysfs_add_file(struct dentry * dir, const struct attribute * attr, int type)
{
                    struct sysfs_dirent * parent_sd = dir->d_fsdata;
                    umode_t mode = (attr->mode & S_IALLUGO) | S_IFREG;
                    int error = 0;

                    down(&dir->d_inode->i_sem);
                    error = sysfs_make_dirent(parent_sd, NULL, (void *) attr, mode, type);
                    up(&dir->d_inode->i_sem); 
                    return error;
}

int sysfs_make_dirent(struct sysfs_dirent * parent_sd, struct dentry * dentry,
   void * element, umode_t mode, int type)
{
                  struct sysfs_dirent * sd;

                  sd = sysfs_new_dirent(parent_sd, element);
                  if (!sd)
                                    return -ENOMEM;

                  sd->s_mode = mode;
                  sd->s_type = type;
                  sd->s_dentry = dentry;
                  if (dentry) {
                                    dentry->d_fsdata = sysfs_get(sd);
                                    dentry->d_op = &sysfs_dentry_ops;
                  }

                  return 0;
}

sysfs_create_file()仅仅是调用了sysfs_make_dirent()创建了一个sysfs_dirent结构。与sysfs_create_dir()不同,它甚至没有在sysfs文件系统下创建inode结构。这项工作被滞后了,在sysfs_lookup()->sysfs_attach_attr()里面完成的。

版权声明:本文为博主原创文章,未经博主允许不得转载。

sysfs文件系统之建立文件

------------------------------------------------ #纯属个人理解,如有问题敬请谅解! #kernel version: 2.6.26 #Autho...
  • qwaszx523
  • qwaszx523
  • 2017年06月07日 15:14
  • 152

在/sysfs文件系统中添加和删除文件

在Linux-2.6.18内核中编写一个内核模块,其功能是在/sysfs文件系统中增加一个目录hello,并在这个目录中增加一个文件world,文件的内容为hello world。 代码附录在博文的...
  • softimite_zifeng
  • softimite_zifeng
  • 2016年11月23日 20:42
  • 231

sysfs_create_file示例一

#include #include #include #include #include static int hello_value; static ssize_t hello...
  • xmzzy2012
  • xmzzy2012
  • 2015年09月06日 16:23
  • 1609

在sys目录下创建属性文件 sysfs_create_group()

正常情况下, 我们可以通过module_param()在module相应目录下创建一个文件, 以用作user space与kernel space的交互. 如果需要在/sys/bus/usb/devi...
  • chrovery
  • chrovery
  • 2015年03月19日 20:04
  • 3441

Linux设备模型——设备驱动模型和sysfs文件系统解读

本文将对Linux系统中的sysfs进行简单的分析,要分析sysfs就必须分析内核的driver-model(驱动模型),两者是紧密联系的。在分析过程中,本文将以platform总线和spi主控制器的...
  • yj4231
  • yj4231
  • 2012年07月29日 19:34
  • 11903

linux内核sysfs详解

"sysfs is a ram-based filesystem initially based on ramfs. It provides a means to export kernel dat...
  • skyflying2012
  • skyflying2012
  • 2013年09月17日 18:35
  • 19730

linux sysfs下创建文件

linux sysfs创建 读 写
  • lugandong
  • lugandong
  • 2015年06月22日 16:14
  • 1326

Linux那些事儿之我是Sysfs(12)举例三:sysfs读入文件夹内容

上回我们说到,如何创建文件夹和文件。我们发现,在sysfs中,inode并不那么重要。这是因为我们所要读写的信息已经就在内存中,并且已经形成了层次结构。我们只需有dentry,就可以dentry->f...
  • xie0812
  • xie0812
  • 2016年05月17日 17:49
  • 343

linux内核sysfs详解-1

sysfs 是 Linux 内核中设计较新的一种虚拟的基于内存的文件系统,它的作用与 proc 有些类似,但除了与 proc 相同的具有查看和设定内核参数功能之外,还有为 Linux 统一设备模型...
  • u014213012
  • u014213012
  • 2016年11月12日 17:17
  • 905

sysfs 文件系统详解

sysfs是用于表现设备驱动模型的文件系统,它基于ramfs。要学习linux的设备驱动模型,就要先做好底层工作,总结sysfs提供给外界的API就是其中之一。sysfs文件系统中提供了四类文件的创建...
  • LinuxEngineer
  • LinuxEngineer
  • 2014年01月09日 16:15
  • 2405
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Linux那些事儿之我是Sysfs(11)sysfs 创建普通文件
举报原因:
原因补充:

(最多只允许输入30个字)