创建sysfs节点

1. sysfs介绍

官方英文介绍如下:http://www.linux.org/threads/sysfs-and-configfs.4956/
如果有时间,还是建议看上面官网的英文原文。
以下是个人翻译:
  Linux有2个虚拟文件系统:sysf和configfs。虚拟文件系统有别于其他文件系统。sysfs和configfs存在与内存中。sysfs的挂载点是/sys/或/sysfs/。然而,configs可能挂载到/config/或/sys/kernel/config/,或则也有可能没有挂载到系统上。
  sysfs在kernel开发阶段,内核缺少一个通用的信息动态变化的系统,procfs包含的信息不与是动态处理的。sysfs由此产生,kernelV2.5版本以上都有sysfs。这个虚拟文件系统包含设备/驱动的信息,同时也包含各种各样的内核数据。sysfs为内核空间和用户空间提供访问的接口。尽管不同的kernel版本之间有一些修改,procfs和sysfs是一个高集成的,标准的文件系统。以下介绍sysfs的子目录:
  */sys/block/ - 此目录包含块设备的sysfs文件的快捷方式。
  */sys/bus/ - 此目录包含系统上不同总线的sysfs文件和数据。
  */sys/class/ - 此目录以设备类型命名的文件夹,如:”printers”, “mem”, “leds”, “input”,等。这些子目录包含在sysfs中与特定设备相关的快捷方式。用户通过按照类型路径来寻找指定设备是很有帮助的。
  */sys/dev/ - 内部包含2个文件目录:block和char,分别标识块设备和字符设备。
  */sys/devices/ - 包含绝大多数的sysfs系统中的设备和文件的快捷方式。
  */sys/firmware/ - 这里包含系统固件信息和配置信息的文件。
  */sys/fs/ - 包含已经挂载的文件系统的相关信息和配置。
  */sys/hypervisor/ - 与管理程序有关的信息。
  */sys/kernel/ - 设置,状态信息和安全策略。
  */sys/module/ - 所有已经加载的模块都放在这里。每一个文件夹都包含了这些模块的有关状态和配置。
  */sys/power/ - 电源状态信息,系统休眠时间等。

  我们实际使用过程中最重要的功能就是:通过sysfs节点让用户空间的程序访问内核空间,从而查询/控制底层设备。

  伸手党可以直接下载附件,内有readme操作方式,可以直接使用。
  欢迎新手逐点阅读,动手操作,一起讨论,一起进步,高手绕道。

2. device_create_file创建sysfs节点

  前一节有了sysfs的简单介绍,那么如何来创建一个sysfs节点?先看文档Documentation\filesystems\sysfs.txt目录下的资料(中文文档:Documentation\zh_CN\filesystems\sysfs.txt),有中文版本,我这里就不再翻译了,打开阅读一下,可以发现创建节点的接口有4个:
  sysfs_create_file    通过kobject创建sysfs的节点(其他3个接口最终都会调用此接口,参数attr中没有读写操作的接口,所以不使用此接口)。
  device_create_file   为设备创建sys的节点。
  bus_create_file     为总线创建sys的节点。
  driver_create_file   为驱动创建sys的节点。

  这4个接口中,linux驱动开发中,用户空间操作内核空间多数都是为了控制设备,那么我们选择实际使用最多的device_create_file接口来创建sysfs节点,并通过创建出来的节点进行读写操作。
  通过阅读kernel代码来实现这个接口(代码查询见文章末尾查询接口定义)。内核代码找到这个接口的定义在drivers/base/core.c中,如下:

/**
 * device_create_file - create sysfs attribute file for device.
 * @dev: device.
 * @attr: device attribute descriptor.
 */
int device_create_file(struct device *dev,
                       const struct device_attribute *attr) 


  我们需要创建dev和attr,来填充此接口,从而实现sysfs节点创建。

2.1 创建dev

  在drivers/base/core.c中找到这个创建设备的接口定义:

/**
 * device_create - creates a device and registers it with sysfs
 * @class: pointer to the struct class that this device should
  • 2
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值