Proc文件系统是提供一个接口给用户,让用户可以查看系统运行的一些状态信息,让用户修改内核的一些参数,比方说printk的打印级别就可以通过proc去修改

Sysfs文件系统,

Sysfs is a ram-based filesystem initially based on ramfs. It provides a means to export kernel data structures, their attributes, and the linkages between them to userspace

--- documentation /filesystems/sysfs.txt

Linux2.6 内核引入了sysfs文件系统。Sysfs被看成是与proc同类别的文件系统。Sysfs把连接在系统上的设备和总线组织成分级的文件, 使其从用户空间可以访问到。

Sysfs被加载在/sys/目录下,它的子目录包括:

Block:   在系统中发现的每个块设备在目录下对应一个子目录。每个子目录中又包含一些属性文件, 它们描述了这个块设备的各方面属性,如:设备大小。(loop块设备是使用文件来模拟的)

Bus  在内核中注册的每条总线在该目录下对应一个子目录, 如:

ide               pci               scsi       usb       pcmcia

其中每个总线目录内又包含两个子目录:

deviecs和drivers, devices目录包含了在整个系统中发现的属于该总线类型的设备,

drivers目录包含了注册到该总线的所有驱动.

Class: 将设备按照功能进行的分类, 如 /sys/class/net 目录下包含了所有网络接口

Devices: 包含系统所有的设备

Kernel: 内核中的配置参数

Module: 系统中所有模块的信息

Firmware: 系统中的固件

Fs 描述系统中的文件系统

Power系统中的电源选项

Kobject 实现了基本的面向对象管理机制,是构成linux2.6设备模型的核心结构。它与sysfs文件系统紧密相连,在内核中注册的每个kobject对象对应sysfs文件系统中的一个目录。

void kobject_init(struct kobject *kobj, struct kobj_type *ktype);

--------  初始化kobject结构

int kobject_add(struct kobject *kobj, struct kobject *parent,

const char *fmt, ...)

----------  将kobject对象注册到linux系统

int kobject_init_and_add(struct kobject *kobj, struct kobj_type *ktype,

struct kobject *parent, const char *fmt, ...)

------  初始化kobject, 并将其注册到linux系统

void kobject_del(struct kobject *kobj)

---- 从linux系统中删除kobject对象

struct kobject *kobject_get(struct kobject *kobj)

---- 将kobject对象的引用计数加1, 同时返回该对象指针

void kobject_put(struct kobject *kobj)

----  将kobject对象的引用计数减1, 如果引用计数将为0, 则调用release方法释放该kobject对象

kobject 的ktype成员是一个指向kobj_type结构的指针,

该结构中记录了kobject对象的一些属性

struct kobj_type{

void (*release)(struct kobject *kobj);

struct sysfs_ops *sysfs_ops;

struct attribute **default_attrs;

};

release:  用于释放kobject占用的资源,当kobject的引用计数为0时被调用。

struct attribute {

char * name; /*属性文件名*/

struct module * owner;

mode_t mode;  /*属性的保护位*/

};

struct  attribute (属性) : 对应与kobject 的目录下的一个文件, Name成员就是文件名。

struct sysfs_ops {

ssize_t (*show) (struct kobject*, struct attribute *, char *);

ssize_t (*store) (struct kobject *, struct attribute *, const char*, size_t);

};

Show:  当用户读属性文件时,该函数被调用,该函数将属性值存入buffer中返回给用户态;

Store: 当用户写属性文件时,该函数被调用,用于存储用户传入的属性值。

代码如下:

#include <linux/device.h>
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/string.h>
#include <linux/sysfs.h>
#include <linux/stat.h>void obj_test_release(struct kobject *kobject);
ssize_t kobj_test_show(struct kobject *kobject, struct attribute *attr,char *buf);
ssize_t kobj_test_store(struct kobject *kobject,struct attribute *attr,const char *buf, size_t count);struct attribute test_attr = {.name = "kobj_config",.mode = S_IRWXUGO,
};static struct attribute *def_attrs[] = {&test_attr,NULL,
};struct sysfs_ops obj_test_sysops = {.show = kobj_test_show,.store = kobj_test_store,
};struct kobj_type ktype = {.release = obj_test_release,.sysfs_ops = &obj_test_sysops,.default_attrs=def_attrs,
};void obj_test_release(struct kobject *kobject)
{printk("eric_test: release .\n");
}ssize_t kobj_test_show(struct kobject *kobject, struct attribute *attr,char *buf)
{printk("have show.\n");printk("attrname:%s.\n", attr->name);sprintf(buf,"hehe %s\n",attr->name);return strlen(attr->name)+2+4;
}ssize_t kobj_test_store(struct kobject *kobject,struct attribute *attr,const char *buf, size_t count)
{printk("havestore\n");printk("write: %s\n",buf);return count;
}struct kobject kobj;
static int kobj_test_init()
{printk("kboject test init.\n");kobject_init_and_add(&kobj,&ktype,NULL,"kobject_test");return 0;
}static int kobj_test_exit(void)
{printk("\033[1;33;40m kobject test exit. \033[0m\r\n");kobject_del(&kobj);printk(KERN_ALERT "Goodbye, cruel world\n");return 0;
}module_init(kobj_test_init);
module_exit(kobj_test_exit);MODULE_DESCRIPTION("kmod-demo1 driver");
MODULE_AUTHOR("zhangbh");
MODULE_LICENSE("Dual BSD/GPL");

如有转载请注明出处

新浪博客:http://blog.sina.com.cn/u/2049150530
博客园:http://www.cnblogs.com/sky-heaven/
知乎:http://www.zhihu.com/people/zhang-bing-hua

【作者】张昺华
【出处】http://www.cnblogs.com/sky-heaven/
【博客园】 http://www.cnblogs.com/sky-heaven/
【新浪博客】 http://blog.sina.com.cn/u/2049150530
【知乎】 http://www.zhihu.com/people/zhang-bing-hua
【我的作品---旋转倒立摆】 http://v.youku.com/v_show/id_XODM5NDAzNjQw.html?spm=a2hzp.8253869.0.0&from=y1.7-2
【我的作品---自平衡自动循迹车】 http://v.youku.com/v_show/id_XODM5MzYyNTIw.html?spm=a2hzp.8253869.0.0&from=y1.7-2
【新浪微博】 张昺华--sky
【twitter】 @sky2030_
【facebook】 张昺华 zhangbinghua
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.

proc文件系统、sysfs文件系统、kobject操作相关推荐

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

    Linux设备模型--设备驱动模型和sysfs文件系统解读笔记 原文:https://blog.csdn.net/yj4231/article/details/7799245 将对Linux系统中的s ...

  2. 虚拟文件系统(无持久存储的文件系统),以proc和sysfs为例

    对于现代操作系统,虚拟文件系统是一个几乎无处不见的功能,因此,要探究现代操作系统的运行机制,对其进行讨论是必然的. 本文使用的是Linux 2.6.x.x,这是一个变革性的版本,无论是内存管理,进程管 ...

  3. 应用层操作gpio的3种方法之一:通过sysfs文件系统

    通过sysfs方式访问gpio,在命令行界面进行操作. Sysfs文件系统是一个类似于proc文件系统的特殊文件系统,用于将系统中的设备组织成层次结构,并向用户模式程序提供详细的内核数据结构信息.这里 ...

  4. Linux 文件系统与设备文件系统 (二)—— sysfs 文件系统与Linux设备模型

    提到 sysfs 文件系统 ,必须先需要了解的是Linux设备模型,什么是Linux设备模型呢? 一.Linux 设备模型 1.设备模型概述 从2.6版本开始,Linux开发团队便为内核建立起一个统一 ...

  5. sysfs 文件系统

    活动地址:CSDN21天学习挑战赛 文章目录 由来 特性 目录 block bus class dev device firmware fs kernel module power 由来   sysf ...

  6. 设备驱动,字符设备驱动、(总线)设备驱动模型、sysfs文件系统、平台设备驱动

    以下内容转载于微信公众号:嵌入式企鹅圈.如有侵权,请告知删除. 学习Linux设备驱动开发的过程中自然会遇到字符设备驱动.平台设备驱动.设备驱动模型和sysfs等相关概念和技术. 对于初学者来说会非常 ...

  7. [中英对照]The sysfs Filesystem | sysfs文件系统

    The sysfs Filesystem | sysfs文件系统 Abstract | 摘要 sysfs is a feature of the Linux 2.6 kernel that allow ...

  8. SAM9X60 curiosity开发板,SYSFS文件系统控制板载三色Led

    驱动位于\buildroot-external-microchip\build\linux-custom\drivers\leds 开发板使用sam9x60_curiosity 应用层控制外设的两种不 ...

  9. Linux那些事儿之我是Sysfs(9)sysfs文件系统模型

    最近Linus炮轰C++,"C++是一种糟糕的(horrible)语言.而且因为有大量不够标准的程序员在使用而使许多真正懂得底层问题,而不会折腾那些白痴'对象模型'".牛人就是牛气 ...

  10. Linux-2.6设备模型与sysfs文件系统

    kobject对象: 它是设备模型的基本结构,对应于sysfs文件系统中的一个目录,它是一个结构体,不过在Linux中引入了面向对象的思想,从某些角度,也可以看成是一个类.kobject对象通常被嵌入 ...

最新文章

  1. 今日arXiv精选 | 近期必读的5篇Transformers相关论文
  2. python 读plt文件_用python读Excel文件
  3. 【Gym - 101196F】Removal Game (环形区间dp,环状,细节优化)
  4. k近邻推荐用到的各种距离
  5. 17-8-26-WebApp总结
  6. Java中ArrayList和LinkedList以及queue的模仿
  7. iphone 内部函数使用 (函数可能无法响应的部分解决方案)
  8. Linux内核部件分析 设备驱动模型之bus
  9. 免费的matlab程序学习下载网站总结
  10. Python+PyCharm+PyQt5抓取链家二手房信息
  11. 北邮“一号邮路”上的数学体验
  12. 从零学习算法竞赛3:aabb问题
  13. linux的OOM killer
  14. 打造圣诞节H5游戏最强音
  15. 浅析web应用防火墙的反向代理部署
  16. Mac使用Karabiner-Elements修改mac默认快捷键
  17. 国内顶尖风光摄影家集锦(作品集+拍摄技巧)
  18. 人工智能面试总结:160个机器学习面试题,赶紧先考考自己!
  19. 面试请假攻略,不用裸辞也能找到工作
  20. no matching distribution found for XXX 或 read timed out解决办法

热门文章

  1. Atitit. 异常的使用总结最佳实践java .net php Vo8f
  2. atitit groovy 总结java 提升效率
  3. paip.多个TOMCAT共存在一台主机上配置方法
  4. (转)研究报告:区块链+供应链金融
  5. Rust : codewars的Sum of Pairs
  6. 有关SQLite数据库的一些实证数据,有一定历史比较和参考意义
  7. 首届!「中国云计算基础架构开发者大会」征稿启动
  8. 机器学习笔记(二十九):决策树、信息熵
  9. Kafka从上手到实践 - Kafka集群:配置Broker | 凌云时刻
  10. 机器学习 声音 分角色_机器学习对儿童电视节目角色的痴迷