0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Linux应用层控制外设的两种不同的方式

jf_94171069 来源:jf_94171069 作者:jf_94171069 2024-10-05 19:03 次阅读

01

sysfs文件系统控制外设(linux4.8开始废弃)

众所周知,linux下一切皆文件,那么应用层如何控制硬件层,同样是通过 文件I/O的方式来实现的,那、么应用层控制硬件层通常有两种方式:

1、/dev/ 目录下为各设备节点,通过对这些设备文件的I/O操作可以实现对底层硬件的操作

2、sysfs 文件系统的主要功能是对系统设备进行管理,它可以产生一个包含所有系统硬件层次的视图,而 sysfs 文件系统挂载在 /sys 目录下

wKgaomb4z66AfgSGAAEBbuY4Cyc846.jpg

一、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沉淀的技术内容方向如下:

wKgaombqoM2AYL2RAAQrZ8e-uz8392.jpg

奇迹物联的业务服务范围:基于自研的NB-IoT、Cat1、Cat4等物联网模组,为客户物联网ODM/OEM解决方案服务。我们的研发技术中心在石家庄,PCBA生产基地分布在深圳、石家庄、北京三个工厂,满足不同区域&不同量产规模&不同产品开发阶段的生产制造任务。跟传统PCBA工厂最大的区别是我们只服务物联网行业客户。

连接我们,和10000+物联网开发者一起 降低技术和成本门槛

让蜂窝物联网应用更简单~~

哈哈你终于滑到最重要的模块了,

千万不!要!划!走!忍住冲动!~

欢迎加入飞书“开源技术交流群”,随时找到我们哦~

点击链接如何加入奇迹物联技术话题群(https://rckrv97mzx.feishu.cn/docx/Xskpd1cFQo7hu9x5EuicbsjTnTf)可以获取加入技术话题群攻略

Hey 物联网从业者,

你是否有了解过奇迹物联的官方公众号“eSIM物联工场”呢?

这里是奇迹物联的物联网应用技术开源wiki主阵地,欢迎关注公众号,不迷路~

及时获得最新物联网应用技术沉淀发布

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Linux
    +关注

    关注

    87

    文章

    11219

    浏览量

    208872
  • 内存
    +关注

    关注

    8

    文章

    2996

    浏览量

    73867
  • 文件系统
    +关注

    关注

    0

    文章

    284

    浏览量

    19882
收藏 人收藏

    评论

    相关推荐

    两种采样方式

    两种采样方式.....................................
    发表于 08-08 15:04

    请问小车转向两种方式有什么优缺点?

    我知道的小车转向常见的有两种方式,一是通过舵机控制转向,另一是通过控制
    发表于 05-21 02:37

    SQL语句的两种嵌套方式

    一般情况下,SQL语句是嵌套在宿主语言(如C语言)中的。有两种嵌套方式:1.调用接口(CLI):提供一些库,库中的函数和方法实现SQL的调用2.直接嵌套SQL:在代码中嵌套SQL语句,提交给预处理器,将SQL语句转换成对宿主语
    发表于 05-23 08:51

    linux配置mysql的两种方式

    两种方式:a、$ find / -name mysql–print 查看是否有mysql文件夹b、$ netstat -a –n 查看是否打开3306端口
    发表于 07-26 07:46

    Linux实现输入参数求和的两种方式

    Linux实现输入参数求和(两种方式
    发表于 03-26 11:44

    【学习打卡】OpenHarmony的应用层说明

    通过应用层实现控制与其他设备的通信。它是一抽象服务,并且它将应用程序的其余部分与传输过程相屏蔽。应用层位于所有
    发表于 07-14 08:44

    电力操作电源两种控制方式的比较

    电力操作电源两种控制方式的比较   1引言 开关电源是一个闭环的自动控制系统,开关电源的控制环节的设计是其设计
    发表于 07-10 08:43 1377次阅读
    电力操作电源<b class='flag-5'>两种</b><b class='flag-5'>控制</b><b class='flag-5'>方式</b>的比较

    逆变器的两种电流型控制方式

    逆变器的两种电流型控制方式 摘要:研究分析了逆变器的两种双环瞬时反馈控制方式
    发表于 07-10 11:21 3981次阅读
    逆变器的<b class='flag-5'>两种</b>电流型<b class='flag-5'>控制</b><b class='flag-5'>方式</b>

    学会处理Linux内核访问外设I/O资源的方式

    Linux内核访问外设I/O内存资源的方式两种:动态映射(ioremap)和静态映射(map_desc)。
    发表于 05-05 13:54 473次阅读

    单片机常用的两种延时控制方式

    单片机中常用的延时控制方式两种。一是采用编程的方式达到延时的目的,另一方法则是通过单片机中
    发表于 07-17 10:22 5875次阅读
    单片机常用的<b class='flag-5'>两种</b>延时<b class='flag-5'>控制</b><b class='flag-5'>方式</b>

    linux spi应用层驱动以及回环测试代码

    linux spi应用层驱动以及回环测试代码
    发表于 10-22 15:47 2次下载

    嵌入式Linux应用层开发教程(一)基本概念

    1 应用层与驱动要想学习嵌入式Linux应用层的开发,首先要区分好应用层和驱动之间的关系。我
    发表于 11-01 17:59 14次下载
    嵌入式<b class='flag-5'>Linux</b><b class='flag-5'>应用层</b>开发教程(一)基本概念

    星三角的两种控制方式

    今天给大家展示一下星三角的两种控制控制方式的电路图,PLC 控制方式以三菱PLC 为例
    发表于 05-05 15:53 627次阅读
    星三角的<b class='flag-5'>两种</b><b class='flag-5'>控制</b><b class='flag-5'>方式</b>

    Linux中LED驱动的应用层控制

    今天,我们就站在巨人的肩膀上,利用内核开发者已经写好的驱动来实现我们想要的功能。 应用层控制 除了可以在shell中通过 echo 、 cat 的方式控制Led,我们也可以在写一个
    的头像 发表于 09-27 11:09 505次阅读

    Linux应用层操作寄存器

    --- > [*] /dev/mem virtual device support Linux应用层操作寄存器 除了直接使用devmem,我们也可以在Linux应用层自己实现一个de
    的头像 发表于 10-08 15:16 1167次阅读
    <b class='flag-5'>Linux</b><b class='flag-5'>应用层</b>操作寄存器