每当我们新增一个kobject结构的时候,同时会在/sys下创建一个目录。

kobject_add()  ->  create_dir() -> sysfs_create_dir()

此时,我还想重申,kernel代码的更新换代是很快的,我们的目的是懂得代码背后的原理,知识,或曰哲学。我不想讲的太细,因为关于sysfs的部分从2.6.10到现在2.6.22已经改了很多了。但其总体架构没变。写此文的目的是让您跟着我的思路走一遍,对sysfs有了一个总体上的认识。然后自己就可以去看最新的代码了。最新的代码肯定是效率更高,条理逻辑更清晰。

sysfs_create_dir_ns()流程图如下:
        -> kernfs_create_dir_ns()
                                          -> kernfs_new_node();

fs/sysfs/dir.c

int sysfs_create_dir_ns(struct kobject *kobj, const void *ns)
{struct kernfs_node *parent, *kn;BUG_ON(!kobj);if (kobj->parent)parent = kobj->parent->sd;elseparent = sysfs_root_kn;if (!parent)return -ENOENT;kn = kernfs_create_dir_ns(parent, kobject_name(kobj),S_IRWXU | S_IRUGO | S_IXUGO, kobj, ns);if (IS_ERR(kn)) {if (PTR_ERR(kn) == -EEXIST)sysfs_warn_dup(parent, kobject_name(kobj));return PTR_ERR(kn);}kobj->sd = kn;return 0;
}

找到父辈的kobject,再调用kernfs_create_dir_ns();

fs/kernfs/dir.c

struct kernfs_node *kernfs_create_dir_ns(struct kernfs_node *parent,const char *name, umode_t mode,void *priv, const void *ns)
{struct kernfs_node *kn;int rc;/* allocate */kn = kernfs_new_node(parent, name, mode | S_IFDIR, KERNFS_DIR);if (!kn)return ERR_PTR(-ENOMEM);kn->dir.root = parent->dir.root;kn->ns = ns;kn->priv = priv;/* link in */rc = kernfs_add_one(kn);if (!rc)return kn;kernfs_put(kn);return ERR_PTR(rc);
}

kernfs_new_node()创建一个新的索引节点kernfs_node.

Linux那些事儿之我是Sysfs(10)sysfs 创建目录相关推荐

  1. Linux设备之我是usb,linux那些事儿之我是usb

    linux那些事儿之我是usb,复旦大学教授肖林甫先生给学生们解说的linux操作系统的一些硬件驱动开发的事儿. 内核说明: 我是U盘 说的是2.6.10的内核 我是Sysfs 说的是2.6.10的内 ...

  2. Linux系统USB驱动目录,Linux那些事儿之我是USB 目录

    目录 第1篇  Linux那些事儿之我是USB Core 1.引子 2 2.它从哪里来 2 3.PK 3 4.漫漫辛酸路 3 5.我型我秀 4 6.我是一棵树 5 7.我是谁 9 8.好戏开始了 11 ...

  3. 读书笔记《Linux那些事儿之我是USB》

    第一篇:Linux那些事儿之我是USB Core USB诞生于inel 产生是为了解决前期计算机并口串口的问题,实现一种解决速度,扩展性,易用性的通信方式. 速度:usb2.0高速模式,480MB/s ...

  4. Linux那些事儿之我是Hub(9)While You Were Sleeping(二)

    老实说,从函数一个开始的598行直到627行都没有什么可说的.其中需要一提的是,606行,调用usb_buffer_alloc()申请内存,赋给hub->buffer.614行,调用kmallo ...

  5. linux 那些事儿之我是 u 盘,《Linux那些事儿之我是USB》.PDF

    <Linux 那些事儿之我是 USB> 作者:华清远见 第 1 章 Linux 那些事儿之我是 USB Core 专业始于专注 卓识源于远见 1 .引子 老夫子们痛心疾首地总结说,现代青年 ...

  6. 《Linux那些事儿之我是USB》我是U盘(1)小城故事

    这个故事中使用的是2.6.22的内核代码.在Linux内核代码目录中,所有与设备驱动程序有关的代码都在drivers/目录下面,在这个目录中用ls命令可以看到很多子目录: lfg1:/usr/src/ ...

  7. 《Linux那些事儿之我是USB》我是U盘(4)想到达明天现在就要启程

    既然知道了编写模块的方法,那么编写设备驱动程序自然也就不难了.我相信,每一个会写模块的人都不会觉得写设备驱动有困难. 真的,我没说假话,写驱动不是什么难事,你完全可以很自信地说,你已经可以写 设备驱动 ...

  8. Linux那些事儿之我是Sysfs(7)dentry与inode

    我们在进程中要怎样去描述一个文件呢?我们用目录项(dentry)和索引节点(inode).它们的定义如下: include/linux/dcache.h struct dentry { /* RCU ...

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

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

最新文章

  1. 【MongoDB异常】Exception authenticating MongoCredential解决方法
  2. 类的静态成员变量和静态成员函数的使用方法三
  3. 数学特级老师:数学除了做习题,这份140G的资料一定要收藏!
  4. 【OpenCV 例程200篇】19. 图像的圆形遮罩
  5. 实训项目四 powerpoint 综合应用_【深化改革结硕果】新疆番茄综合精深加工关键技术及产业化应用项目取得重大突破...
  6. 《Python入门到精通》文件操作
  7. windows下双击可运行的Java软件打包方案
  8. Rust: Integers: Recreation One
  9. 中国电信封锁用户80系列端口及应对办法
  10. ssm+JSP计算机毕业设计英雄联盟赛事新闻管理系统qeg6l【源码、程序、数据库、部署】
  11. 中国电影|嘉宝盘点近几年国内票房突破30亿的影片
  12. 高通SDX12:USB2.0 端口枚举失败问题分析及解决方案
  13. 【SSD测试专题四】Performance
  14. 万由nas系统安装MySQL_【不折腾】VM虚拟机安装体验万由U-NAS系统
  15. SSRF - ctfhub -2【FastCGI协议、Redis协议、URL Bypass、数字IP Bypass、302跳转 Bypass、DNS重绑定Bypass】
  16. 要访问1KB的内存为啥需要10位地址线,而不是13位?
  17. 1.清除最近使用过的文档记录
  18. 【矩阵论-20220919(1.1)——数域、线性空间定义和基本性质】
  19. eclipse下载安装及配置jdk和maven
  20. PIPIOJ 1033: 拆字游戏 dfs连通分量

热门文章

  1. Python逻辑运算符 and ,or not 的理解
  2. nginx检查配置文件语法是否正常,需要检查主配置文件
  3. python关于字典的操作
  4. Docker 仓库管理
  5. 玩转Spring Cloud之配置中心(config server config client)
  6. Activiti——流程变量(六)
  7. 2022-2028年中国汽车雷达行业深度调研及投资前景预测报告
  8. jQuery.fly插件实现添加购物车抛物线效果
  9. 用python的numpy作线性拟合、多项式拟合、对数拟合
  10. [ActionScript 3.0] AS向php发送二进制数据方法之——在URLRequest中构造HTTP协议发送数据...