Linux文件系统 devfs/udev/sysfs简述

IOT-OS之RT-Thread(十)--- DFS文件系统管理与devfs/elmfat示例 文件系统是一套实现了数据的存储、分级组织、访问和获取等操作的抽象数据类型 (Abstract data type),是一种用于向用户提供底层数据访问的机制。文件系统通常存储的基本单位是文件,即数据是按照一个个文件的方式进行组织。当文件比较多时,将导致文件繁多,不易分类、重名的问题。而文件夹作为一个容纳多个文件的容器而存在。 阅读详情

因为字符设备和块设备都很好的体现了“一切都是文件”的设计思想,所以了解掌握Linux文件系统,设备文件系统就显得很重要了。于是从重新简单的整理了一下 Linux文件系统 devfs/udev/sysfs 等三个系统的特点与联系。

devfs文件系统

按照时间顺序,devfs(设备文件系统)是由Linux2.4内核引入的,当时被许多工程师基于了高度的评价,devfs的出现使得设备驱动程序能够自主的管理自己的设备文件。比如,可以通过程序在设备初始化的时候在 /dev 目录下创建设备文件,卸载时将他删除,而且设备驱动程序可以指定设备名,所有者和权限位,而且用户空间程序可以修改所有者和权限位,并且不再需要为设备驱动程序分配主设备号以及次设备号,在程序中可以直接给 register_chrdev()传递0主设备号用来获取可用的主设备号。并且可以在 devfs_register() 中指定次设备号。
使用devfs的例子如下:

static devfs_handle_t devfs_handle;
static int __init xxx_init(void)
{
int ret;
int I;
/*在内核中注册设备*/
ret = register_chrdev(XXX_major, DEVICE_NAME, &xxx_fops);
if( ret < 0)
{
   printk(DEVICE_NAME “ can’t register major number\n”);
   return ret;
}
/*创建设备文件*/
devfs_handle = devfs_register(NULL, DEVICE_NAME, DEVFS_FL_DEFAULT, xxx_MAJOR, 0, S_IFCHR | S_IRUSR | S_IWUSR, &xxx_fops, NULL);
…
printk(DEVICE_NAME “ initialized\n”);
return 0;
}

static void __exit xxx_exit(void)
{
devfs_unregister(devfs_handle);/*撤消设备文件*/
unregister_chrdev(XXX_MAJOR, DEVICE_NAME);/*注销设备*/
}

module_init(xxx_init);
module_exit(xxx_exit);

udev文件系统

尽管devfs 有这样那样的优点,但是在Linux2.6内核中,devfs被认为是过时的方法,并最终被抛弃,udev取代了它。udev 完全在用户态工作,利用设备加入或移除时内核所发送的热拔插时间来工作,在热拔插时,设备的详细信息会由内核同过netlink套接字发送出来,发送的事情叫uevent,另外一中情况是对于已经插入的设备,在开机的时候就已经插入的设备,称为冷拔插设备,对于冷拔插设备,Linux内核提供了sysfs下面一个uevent节点,可以往该节点写一个“add”,使得内核重新发送netlink套接字,之后udev就可以接收到冷拔插设备的netlink消息了。udev 和 devfs的另一个显著的区别在于,当采用devfs时候,当一个并不存在的/dev 结点被打开的时候,devfs会自动的加载对应的驱动,而udev则不能这么做,这是因为udev的设计者认为Linux应该在设备被发现的时候加载驱动模块,而不是当他被访问的时候,udev的设计者认为devfs所提供的打开 /dev结点时自动加载驱动的功能对于一个配置正确的计算机来说是多余的,系统中的所有设备都应该产生热拔插事件而不是加载恰当的驱动。
使用udev的例子如下:

#include <linux/device.h>
…

static struct class * xxx_class;

static int __init xxx_init(void)

{

int ret;
int i;

/*在内核中注册设备*/
ret = register_chrdev(XXX_major, DEVICE_NAME, &xxx_fops);

if( ret < 0)
{
   printk(DEVICE_NAME “ can’t register major number\n”);
   return ret;
}

//注册一个类,使mdev可以在"/dev/"目录下面建立设备节点
xxx_class = class_create(THIS_MODULE, DEVICE_NAME);

if(IS_ERR(led_class))
{
   printk("Err: failed in EmbedSky-leds class. \n");
   return -1;
}

//创建一个设备节点,节点名为DEVICE_NAME
class_device_create(xxx_class, NULL, MKDEV(xxx_major, 0), NULL, DEVICE_NAME);
…
printk(DEVICE_NAME “ initialized\n”);
return 0;
}

static void __exit xxx_exit(void)
{
unregister_chrdev(XXX_MAJOR, DEVICE_NAME);/*注销设备*/
class_device_destroy(xxx_class, MKDEV(xx_major, 0));//删掉设备点
class_destroy(xxx_class);               //注销类
}

module_init(xxx_init);
module_exit(xxx_exit);

sysfs文件系统

同样由于 devfs 文件系统不确定的设备映射关系,有时一个设备映射的设备文件可能不同,例如U盘有可能对应sda,又有可能对应sdb。并且没有足够的主/次设备号,当设备过多的时候,就会出现问题,另外 /dev目录下的文件太多而且不能表示当前系统上的实际设备。因此引入了一个新的文件系统 sysfs文件系统,是用来对系统的设备进行管理的,它可以产生一个包括所有系统硬件的层级视图,与提供进程和状态信息的proc文件系统十分相似。把实际连接到系统上的设备和总线组织成一个分级的文件,用户空间的程序同样可以利用这些信息以实现和内核的交 互,该文件系统是当前系统上实际设备树的一个直观反应,它是通过kobject子系统来建立这个信息的。想要了解sysfs文件系统 就要先了解一下linux设备模型,我在另一篇文章中简单的说过,地址是:https://blog.youkuaiyun.com/LinuxArmbiggod/article/details/78815859

总线、驱动、设备最终都会落实为sysfs中的一个目录,他们三个都可以认为是kobject的派生类,kobject可以看做是所有总线、设备和驱动的抽象基类,一个kobject对应一个sysfs中的一个目录。

Linux设备驱动开发(5.4.58)-3-NEWCHR 本文目标 本文在上一节的基础上,采用可以指定主设备号,次设备号,手动申请dev_t和自动申请dev_t的API,封装一个全局的对象结构体并用private_data在方法间传递,减少全局变量使用,寄存器操作改用readl和writel,引入cdev、class、device对象。 驱动里面的全局结构体是对象私有数据,fops是对象内部的操作函数,可以通过系统调用对外public。 cdev、class、device应该是驱动对象的各种父类,用来抽象各种子系统的数据和行为,以便实现统一框架。 以上是我个人理解 阅读详情

相关推荐

Linux 文件系统与设备文件系统 (一)—— udev 设备文件系统

一、什么是Linux设备文件系统       首先我们不看定义,定义总是太抽象很难理解,我们先看现象。当我们往开发板上移植了一个新的文件系统之后(假如各种设备驱动也移植好了),启动开发板,我们用串口工具进入开发板,查看系统/dev目录,往往里面没有或者就只有null、console等几个系统必须的设备文件在这儿外,没有任何设备文件了。那我们移植好的各种设备驱动的设备文件怎么没有啊?如果要使用这些

知秋一叶 1万+

Linux内核之dev devfs udev sysfs及关系

Linux内核之dev devfs udev sysfs及关系

多云转晴,适合debug的博客 2984

udev,mdev,devfs,sysfs,uevent之间的关系

什么是Linux设备文件系统 首先我们不看定义,定义总是太抽象很难理解,我们先看现象。当我们往开发板上移植了一个新的文件系统之后(假如各种设备驱动也移植好了),启动开发板,我们用串口工具进入开发板,查看系统/dev目录,往往里面没有或者就只有null、console等几个系统必须的设备文件在这儿外,没有任何设备文件了。那我们移植好的各种设备驱动的设备文件怎么没有啊?如果要使用这些...

QQ2558030393的博客 1146

Linux·设备文件devfs

设备文件devfs

m0_64560763的博客 739

dev devfs udev sysfs及关系

dev devfs udev sysfs及关系 Linux 下对设备的管理方式主要有/dev和sysfs两种,前者是将设备注册为设备节点放入/dev目录下,而后者是在linux2.6内核后引入的新的文件系统。 ➤/dev方式 关于/dev的管理方式,也经历了几代,下面介绍/dev管理方式的发展: ➣静态/dev文件: 在Linux中,老的设备管理方式是将设备通过设备节点放入/dev目录下,每个设备节点是/dev根目录下的一个文件,那么。如何区分这些设备节点,为了对这些设备节点...

a746742897的博客 396

Linux设备管理文件系统DevFS与SysFS备忘

SysFS提供了一种方便的机制来获取和配置设备的信息,开发者可以通过读写SysFS的接口和属性文件来进行设备管理。DevFS是早期Linux内核中用于设备管理的文件系统,它以文件的形式表示系统中的设备。它们提供了一种将设备和驱动程序以文件的形式表示的机制,使得设备的访问和配置更加方便。它以一种层次结构的方式组织设备信息,并提供了一系列的属性文件来描述设备的状态和配置。SysFS的挂载点通常是/sys目录。属性文件:SysFS提供了一系列的属性文件,用于描述设备的状态和配置,而DevFS没有这个特性。

PixelNinja的博客 220

linux / dev、devfs、udev 和 sysfs 关系

sysfs 把连接在系统上的设备和总线组织成为一个分级的文件,它们可以被从用户的空间存取到。简单介绍 sysfs 文件系统,您可能想知道 sysfs 是怎么认出系统中存在的设备以及应该使用什么设备号。对于已经编入内核的驱动程序,当被内核检测到的时候,会直接在 sysfs 中注册其对象;对于编译成模块的驱动程序,当模块载入的时候才会这样做。一旦挂载了 sysfs 文件系统(挂载到 /sys),内建的驱动程序在 sysfs 注册的数据就可以被用户空间的进程使用,并提供给 udev 以创建设备节点。1、sysfs

布袋和尚 747

linux设备管理之devfs文件系统

伴随着 Linux 2.4 版本的发行,出现了大量的文件系统可能性,其中包括 ReiserFS、XFS、GFS 和其它文件系统。这些文件系统听起来的确都很酷,但是它们真正能做些什么呢,擅长在哪些方面,以及在 Linux 产品环境下如何才能安全地使用它们呢?Daniel Robbins 通过向您展示如何在 Linux 2.4 的环境下建立这些新的高级文件系统来回答以上的问题。遵从这个方法,它提供了在实际实现过程中的有价值的建议、性能信息和重要的技术性注意要点,以便于您在新的文件系统中能有令人愉快的经历。在本文中:Daniel 解释了使用设备管理文件系统 devfs 的意义和好处,让您对其有所认识以便在下一篇文章中向您展示如何最佳地在系统上安装 devfs。

Linux下/dev和/sys/class初探

/dev 下的文件是真实的设备,UDEV在运行时创建。 /sys/class 是由kernel在运行时导出的,目的是通过文件系统暴露出硬件的层级关系。

weixin_43379278的博客 6008

Cadence Virtuoso IC617:从零构建传输门与反相器的Schematic设计实战

本文详细介绍了使用Cadence Virtuoso IC617进行传输门与反相器Schematic设计的完整流程,包括环境准备、原理图绘制、Symbol创建、仿真验证及实用技巧。通过分步指导和实战经验分享,帮助初学者快速掌握集成电路设计基础,提升EDA工具应用能力。

weixin_29194693的博客 600

LabVIEW 调用MATLAB 进行图像处理的实现

程机械及设备的变形、振动、冲击、粗糙度、刚度和强度等特性,还可用在土木结构、水利设施的变形测量[4][5]。因此,该技术在机械、土木、水利、电器、航空航天、兵器工业及生物医学等领域的检测中具有非常重要的地位。将物面前方空间的散斑用摄像设备记录下来,当物体运动或由于受力而变形时,这些随机分布的散斑图也随之在空间按一定的规律运动,因此能用记录的散斑图在计算机上分析物体的运动和变形,这就是电子散斑技术。当物体的漫反射表面被激光照射时,漫反射的光波在物体表面的前方相互干涉,由于漫反射光的。

qq_37971227的博客 3874

Linux驱动开发_设备文件系统详解

何为设备管理器? 设备管理器就是负责管理这台电脑上的外设,当我们通过电脑提供的USB口插入一个键盘、鼠标时设备管理器会与其通讯来确认你插入的到底是一个什么样的设备,然后在创建对应的设备驱动。 以上的前提下是你的设备是流行设备且被操作系统的设备管理器支持的情况下,倘若我们有一个未知的设备,或者是我自己开发的硬件产品,如我们自己写的键盘,我们不使用通用键盘通讯协议,我们非要自己创建一套我们键盘自己的协议,包括内部架构、PCB都是我们自己设计的,一个全新的键盘,虽然也是键盘但是协议,与硬件架构不同于ISO标准

17岁boy的博客 3913

铭飞MCMS源码部署

文章目录前言一、下载铭飞源码二、部署源码1.使用IDEA打开源码2.配置tomcat环境2.1下载tomcat并测试是否可以成功启动(此处不赘述)2.2在IDEA中安装tomcat环境并配置3.添加数据库,并配置3.1新建数据库3.2 导入sql配置三、启动测试 前言 铭飞MCMS基于IDEA、tomcat和mysql的环境搭建。 提示:以下是本篇文章正文内容,下面案例可供参考 一、下载铭飞源码 gitee:https://gitee.com/mingSoft/MCMS/releases(各种版本按需下

MARS_ZORO的博客 4066

Linux驱动学习:Linux文件系统与设备文件

作用一直,都是用于分割命令的,第一个命令是指:匹配。后面的序列,并删除;第二个命令是指:匹配。文件描述了Linux设备号的分配情况。udev的轻量级版本:mdev;:查看系统中包含的设备文件。:获知系统中注册的设备。netlink套接字。android中的是。

GS8FG的博客 558

保姆级教程:Synology NAS共享文件夹从创建到权限设置的完整流程

本文提供了一份详尽的Synology NAS共享文件夹创建与权限设置指南。重点讲解了如何将NAS接入企业AD域,并利用域管理员账户进行集中身份验证和权限管理。文章从基础概念、域环境配置、文件夹创建、精细化权限分配到客户端访问与维护,完整覆盖了构建安全高效企业级文件共享空间的全流程,旨在帮助管理员实现便捷的团队协作与数据安全管理。

u9v0w的博客 556

正点原子RK3588 Android 12镜像构建实战:从环境配置到烧录验证全指南

本文提供了一份基于正点原子RK3588开发板的Android 12镜像构建全流程实战指南。内容涵盖从Ubuntu环境配置、SDK获取、编译内核与系统,到最终镜像打包与烧录验证的完整步骤,并分享了内核驱动定制与系统优化技巧,旨在帮助开发者高效完成瑞芯微RK3588平台的系统定制工作。

grass的博客 812

关于udev,sys,proc,tmpfs一些定义的问题

谈这些概念之前,首先不得不说下devfs。devfs(设备文件系统)时由Linux2.4内核引入的,它的出现可以使得程序在设备初始化时在/dev目录下创建设备文件,卸载时将它删除。虽然它在2.6内核版本后已被udev取代,这里还是简要列出它的范例,方便后面的分析。

westlor的专栏 1628

创新引入HAttention模块:提升YOLOv8小目标检测精度【YOLOv8】

YOLOv8在前几个版本的基础上进行了多项优化,特别是在模型的速度和精度上做了较大改进。改进的backbone:引入了更加高效的骨干网络(backbone)设计,如更深的网络层和更高效的特征提取模块。增强的Neck模块:使用了PANet等机制来更好地融合不同尺度的特征,增强了多尺度目标检测能力。增强的Head模块:包括多头检测头,以便针对不同大小的目标进行更精细的预测。尽管如此,YOLOv8仍面临着在小目标检测精度上不如大型目标的挑战,尤其在复杂背景或高密度目标环境下。

博客 2769

嵌入式linux_驱动开发---devfs sysfs 模型

Linux哲学------一切皆文件利用Linux内核模块module,加载或者卸载驱动服务app-->devfs-->vfs-->驱动iOapp-->sysfs-->vfs--->驱动IO(注:一般不这样用,sysfs设备模型主要用来管理)

m0_67140353的博客 153

UE5接入在线直播视频源,如hls(m3u8)格式

UE5接入在线直播视频源

专注GIS开发 9501

LeRobot 入门教程(三)在仿真环境和自定义机器人上部署 LeRobot

本教程详细介绍了基于真实世界机器人和仿真环境的模仿学习实现方法,涵盖数据采集、训练策略和评估全流程。在真实机器人部分,重点讲解了远程操作设置、摄像头配置、数据集记录与管理技巧、策略训练(支持GPU/MPS设备)以及模型评估。仿真环境部分则演示了gym-hil的安装使用、模拟数据采集和策略训练。此外,教程还提供了自定义机器人集成指南,包括电机选择、接口继承、传感器/动作特征定义、连接管理和校准配置等核心步骤。所有方法均支持HuggingFace数据集中心和Weights & Biases工具链,为机器

2506_90492529的博客 2402

udev

转:http://www.360doc.com/content/11/0415/21/1317564_109922388.shtml udev 是Linux kernel 2.6系列的设备管理器。它主要的功能是管理/dev目录底下的设备节点。它同时也是用来接替devfs及hotplug的功能,这意味着它要在添加/删 除硬件时处理/dev目录以及所有用户空间的行为,包括加载firmware时。ud...

pengdonglin137的专栏 50

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

linux中pci设备和udev关系,/sys/dev 和/sys/devices 和udev的关系

disk)Access: 2011-08-24 18:25:02.902025252 +0800Modify: 2011-08-18 15:14:17.281472005 +0800Change: 2011-08-18 15:14:17.281472005 +0800/sys/devices:----------------------------Contains a filesystem rep...

weixin_36244175的博客 298

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Linux dev目录详解

转载自https://blog.youkuaiyun.com/maopig/article/details/7195048 在linux下,/dev目录是很重要的,各种设备都在下面。下面简单总结一下: dev是设备(device)的英文缩写。/dev这个目录对所有的用户都十分重要。因为在这个目录中包含了所有Linux系统中使用的外部设备。但是这里并不是放的外部设备的驱动程序,这一点和windows,dos操作系统不一样。它实际上是一个访问这些外部设备的端口。我们可以非常方便地去访问这些外部设备,和访问一个文件,一个目录

bhegi_seg的博客 4581

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Linux┊理解devfs、sysfs、udev、tmpfs

linux下有专门的文件系统用来对设备进行管理,devfs和sysfs就是其中两种。   一、devfs   devfs是在2.4内核就出现了,它是用来解决linux中设备管理混乱的问题,你查看一下/dev下的设备文件就知道其中有许多是空的(也就是没有对应的硬件的),但是它们却必须存在,所以这给linux设备管理带来了很多麻烦,为了解决这个问题,linux内核开发人员开发了devfs,并用一个

joben的专栏 9010

Linux设备模型:从devfs到sysfs与udev的演进

cCopychar *buf)// 注册属性通过sysfs与udev的协同工作,Linux实现了灵活高效的设备管理机制。这种设计不仅解决了传统方案的功能缺陷,更为现代计算机系统的设备管理提供了可扩展的框架。理解这一模型的工作原理,将帮助开发者更好地进行驱动开发和系统调试。

波风水门的博客 2276
上一篇: sysfs属性组创建例程
下一篇: Android 系统自动关机或重启关键操作
Ma浩然
博客等级 码龄9年 1万+粉丝 462原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ma浩然

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值