Linux应用层控制外设的两种不同的方式
01
sysfs文件系统控制外设(linux4.8开始废弃)
众所周知,linux下一切皆文件,那么应用层如何控制硬件层,同样是通过 文件I/O的方式来实现的,那、么应用层控制硬件层通常有两种方式:
1、/dev/ 目录下为各设备节点,通过对这些设备文件的I/O操作可以实现对底层硬件的操作
2、sysfs 文件系统的主要功能是对系统设备进行管理,它可以产生一个包含所有系统硬件层次的视图,而 sysfs 文件系统挂载在 /sys 目录下

一、sys目录架构
进入到 sys 目录下,可以看到如下文件:
包括 block、bus、class、dev、devices、firmware、fs、kernel、
modules、power 等
二、sys 目录介绍
sysfs 是一个基于内存的文件系统,同 devfs 、 proc 文件系统一样,称为虚拟文件系统;它的作用是将内核信息以文件的方式提供给应用层使用。
sysfs 文件系统的主要功能便是对系统设备进行管理,它可以产生一个包含所有系统硬件层次的视图。
sysfs 文件系统挂载在 /sys 目录下,
/sys/devices:
这是系统中所有设备存放的目录,也就是系统中的所有设备在 sysfs 中的呈现、表达,也是 sysfs 管理设备的最重要的目录结构。
/sys/block:
块设备的存放目录,这是一个过时的接口,按照 sysfs 的设计理念,系统所有的设备都存放在/sys/devices 目录下,所以/sys/block 目录下的文件通常是链接到/sys/devices 目录下的文件。
/sys/bus:
这是系统中的所有设备按照总线类型分类放置的目录结构,/sys/devices 目录下每一种设备都是挂在某种总线下的,譬如 i2c 设备挂在 I2C 总线下。同样,/sys/bus 目录下的文件通常也是链接到了/sys/devices 目录。
/sys/class:
这是系统中的所有设备按照其功能分类放置的目录结构,同样该目录下的文件也是链接到了/sys/devices 目录。按照设备的功能划分组织在/sys/class 目录下,譬如/sys/class/leds目录中存放了所有的 LED 设备,/sys/class/input 目录中存放了所有的输入类设备。
/sys/dev:
这是按照设备号的方式放置的目录结构,同样该目录下的文件也是链接到了/sys/devices 目录。该目录下有很多以主设备号:次设备号(major:minor)命名的文件,这些文件都是链接文件,链接到/sys/devices 目录下对应的设备。
/sys/firmware:
描述了内核中的固件。
/sys/fs:
用于描述系统中所有文件系统,包括文件系统本身和按文件系统分类存放的已挂载点。
/sys/kernel:
这里是内核中所有可调参数的位置。
/sys/module:
这里有系统中所有模块的信息。
/sys/power:
这里是系统中电源选项,有一些属性可以用于控制整个系统的电源状态。
td {white-space:nowrap;border:1px solid #dee0e3;font-size:10pt;font-style:normal;font-weight:normal;vertical-align:middle;word-break:normal;word-wrap:normal;}
| block | 块设备的存放目录,这是一个过时的接口,按照sysfs的设计理念,系统所有的设备都存放在/sys/devides目录下,所以/sys/block目录下的文件通常是链接到/sys/devices目录下的文件 |
| bus | 这是系统中的所有设备按照总线类型分类放置的目录结构,/sys/devices 目录下每一种设备都是挂在某种总线下的,譬如 i2c 设备挂在 I2C 总线下。同样,/sys/bus 目录下的文件通常也是链接到了/sys/devices 目录。 |
| class | 这是系统中的所有设备按照其功能分类放置的目录结构,同样该目录下的文件也是链接到了/sys/devices 目录。按照设备的功能划分组织在/sys/class 目录下,譬如/sys/class/leds目录中存放了所有的 LED 设备,/sys/class/input 目录中存放了所有的输入类设备。 |
| dev | 这是按照设备号的方式放置的目录结构,同样该目录下的文件也是链接到了/sys/devices 目录。该目录下有很多以主设备号:次设备号 (major:minor) 命名的文件,这些文件都是链接文件,链接到/sys/devices 目录下对应的设备。 |
| devices | 这是系统中所有设备存放的目录,也就是系统中的所有设备在 sysfs 中的呈现、表达,也是 sysfs 管理设备的最重要的目录结构。 |
| firmware | 描述了内核中的固件。 |
| fs | 用于描述系统中所有文件系统,包括文件系统本身和按文件系统分类存放的已挂载点。 |
| kernel | 这里是内核中所有可调参数的位置。 |
| module | 包含当前系统中已加载的模块,包括编译到内核和编译成模块(.ko)的驱动 |
| power | 这里是系统中电源选项,有一些属性可以用于控制整个系统的电源状态。 |
上表显示的便是 sysfs 文件系统中的目录,包括 block 、 bus 、 class 、 dev 、 devices 、 firmware 、 fs 、 kernel 、 modules、 power 等,每个目录下又有许多文件或子目录,对这些目录的说明如所示:
Linux 内核中为了尽量降低驱动开发者难度以及接口标准化,就出现了设备驱动框架的概念; Linux 针对各种常见的设备进行分类,譬如 LED 类设备、输入类设备、 FrameBuffer 类设备、 video 类设备、 PWM 设备等等,并为每一种类型的设备设计了一套成熟的、标准的、典型的驱动实现的框架,这个就叫做设备驱动框架。设备驱动框架为驱动开发和应用层提供了一套统一的接口规范,譬如对 LED 类设备来说,内核提供了 LED 设备驱动框架,驱动工程师编写 LED 驱动时,使用 LED 驱动框架来开发自己的 LED 驱动程序,这样做的好处就在于,能够对上层应用层提供统一、标准化的接口、同时又降低了驱动开发工程师的难度。
02
Libgpiod库控制外设
包括字符设备文件和块设备文件,设备文件便是各种硬件设备向应用层提供的一个接口,应用层通过对设备文件的 I/O 操作来操控硬件设备,譬如 LCD 显示屏、串口、按键、摄像头等等,所以设备文件其实是与硬件设备相互对应的。设备文件通常在/dev/ 目录下,我们也把/dev 目录下的文件称为设备节点。
libgpiod是用于与linux GPIO交互的C库和工具,从 linux 4.8 后,官方不推荐使用 GPIO sysfs 接口,libgpiod库封装了 ioctl 调用和简单的API接口。
与sysfs方式相比,libgpiod可以保证所有分配的资源,在关闭文件描述符后得到完全释放,并且拥有sysfs方式接口中不存在的功能(如时间轮询,一次设置/读取多个gpio值)。此外libgpiod还包含一组命令行工具,允许用户使用脚本对gpio进行个性化操作。
目前有六个命令行工具可用
gpiodetect:列举所有的gpio芯片以及它们名字,标签和io数目
gpioinfo:列举所有gpio芯片以及它们的名字,制造商,方向,激活状态,附加标志等
gpioget:获取特定gpio引脚的当前值
active-high是高电平 值为1 active-low是低电平 值为0
gpioset :设置特定的当前值
gpiofind :获取gpiochip的name和offset eg:gpiofind GPIO26 是加上line的名字
gpiomon : 监视特定io上的特定事件
本文章源自奇迹物联开源的物联网应用知识库Cellular IoT Wiki,更多技术干货欢迎关注收藏Wiki:Cellular IoT Wiki 知识库(https://rckrv97mzx.feishu.cn/wiki/wikcnBvAC9WOkEYG5CLqGwm6PHf)
欢迎同学们走进AmazIOT知识库的世界!
这里是为物联网人构建的技术应用百科,以便帮助你更快更简单的开发物联网产品。
Cellular IoT Wiki初心:
在我们长期投身于蜂窝物联网 ODM/OEM 解决方案的实践过程中,一直被物联网技术碎片化与产业资源碎片化的问题所困扰。从产品定义、芯片选型,到软硬件研发和测试,物联网技术的碎片化以及产业资源的碎片化,始终对团队的产品开发交付质量和效率形成制约。为了减少因物联网碎片化而带来的重复开发工作,我们着手对物联网开发中高频应用的技术知识进行沉淀管理,并基于 Bloom OS 搭建了不同平台的 RTOS 应用生态。后来我们发现,很多物联网产品开发团队都面临着相似的困扰,于是,我们决定向全体物联网行业开发者开放奇迹物联内部沉淀的应用技术知识库 Wiki,期望能为更多物联网产品开发者减轻一些重复造轮子的负担。
Cellular IoT Wiki沉淀的技术内容方向如下:
奇迹物联的业务服务范围:基于自研的NB-IoT、Cat1、Cat4等物联网模组,为客户物联网ODM/OEM解决方案服务。我们的研发技术中心在石家庄,PCBA生产基地分布在深圳、石家庄、北京三个工厂,满足不同区域&不同量产规模&不同产品开发阶段的生产制造任务。跟传统PCBA工厂最大的区别是我们只服务物联网行业客户。
连接我们,和10000+物联网开发者一起 降低技术和成本门槛
让蜂窝物联网应用更简单~~
哈哈你终于滑到最重要的模块了,
千万不!要!划!走!忍住冲动!~
欢迎加入飞书“开源技术交流群”,随时找到我们哦~
点击链接如何加入奇迹物联技术话题群(https://rckrv97mzx.feishu.cn/docx/Xskpd1cFQo7hu9x5EuicbsjTnTf)可以获取加入技术话题群攻略
Hey 物联网从业者,
你是否有了解过奇迹物联的官方公众号“eSIM物联工场”呢?
这里是奇迹物联的物联网应用技术开源wiki主阵地,欢迎关注公众号,不迷路~
及时获得最新物联网应用技术沉淀发布
- 首列舒适型中老铁路国际旅游列车开启跨国之旅,首列舒适型中老铁路国际旅游列车开启跨国之旅
- 燃油车全系配置高阶智能,福特新蒙迪欧上市挑战B级车市场格局
- 港产联动 广西防城港港企双向赋能成良性循环,港产联动 广西防城港港企双向赋能成良性循环
- 美国私营部门11月就业岗位意外减少3.2万个
- 瞬间涨停!A股尾盘利好突袭!六部门发文 有序发展直播电商等新业态
- 专访|指挥家托努·卡尔尤斯特:爱沙尼亚的远古和现代之声
- 专家学者桂林探讨植物园建设 推进国家植物园体系建设,专家学者桂林探讨植物园建设 推进国家植物园体系建设
- 时隔12年广东再摘男篮金牌,杜锋从球员到教练成就三冠王
- 辽宁港口集团开通“美西中东”集装箱远洋干线,辽宁港口集团开通“美西中东”集装箱远洋干线
- 价格周报|本周猪价继续反弹,机构称供给端压力不减、猪价仍将震荡磨底
- 宁夏“数智粮库”:科技赋能粮食储备提质增效,宁夏“数智粮库”:科技赋能粮食储备提质增效
- (第八届进博会)华商“摆渡人”助进博合作跨越山海,(第八届进博会)华商“摆渡人”助进博合作跨越山海
- 日本再发生熊伤人事件,3人受伤
- 报告:全球互联网发展迈入智能化新阶段,报告:全球互联网发展迈入智能化新阶段
- B站CEO陈睿:优质创作者是社会财富,投稿5年以上UP主数量超过200万
- 全国首单两岸融合水土保持生态产品价值转化交易在福建闽清签约,全国首单两岸融合水土保持生态产品价值转化交易在福建闽清签约