Linux 文件系统中有几个目录结构不是实际的磁盘文件目录。相反,这些目录结构和其中的“文件”是伪文件或 Linux 操作系统服务和数据,它们以文件的形式呈现,可以使用文件操作进行访问,但不是存储在持久存储(例如硬盘或固态硬盘)上的实际文件。状态盘。
现代 Linux API 使用和兼容性研究:支持时支持什么
除了主要的系统调用表之外,Linux 还导出了许多
通过伪文件系统的附加 API,例如 /proc、/dev 和
/系统。这些被称为伪文件系统,因为它们不受支持
通过磁盘,而是将内核数据结构的内容导出到
应用程序或管理员就好像它们存储在文件中一样。
这些伪文件系统是导出调整的便捷位置
参数、统计数据和其他特定子系统或设备
特定的 API。尽管许多这些伪文件用于
命令行或管理员编写的脚本中,有一些是例行公事的
由应用程序使用。为了充分了解使用模式
Linux 内核中,伪文件也必须考虑。
伪文件的类比
从用户角度思考这些伪文件的一种方法是它们是一种远程过程调用Linux 内核的接口,使用文件系统语义来请求执行某些操作。文件系统语义映射到以下通用操作和行为:
- 打开伪文件意味着打开用户应用程序和 Linux 内核中的某些功能之间的连接
- 读取伪文件是指通过连接读取Linux内核中某些功能提供的数据块
- 写伪文件意味着通过连接向Linux内核中的某些功能发送请求消息(该消息可以是带数据的命令、仅命令或仅数据)
- 关闭伪文件意味着关闭用户应用程序与 Linux 内核中的某些功能之间的连接
不同的伪文件公开不同的 Linux 内核数据和服务,这意味着关于文件操作如何映射到通过伪文件公开的 Linux 内核功能的接口规范将不仅取决于 Linux 内核功能或伪文件的处理程序,而且取决于伪文件的 Linux 内核功能或处理程序。还有Linux内核版本。
这篇 StackOverFlow 帖子,从内核模块创建 sysfs 条目,包含一个伪文件处理程序的简单示例/sys
显示了提供 Linux 内核将新伪文件的处理程序挂接到 Linux 内核所需的函数接口的基础知识。
这篇 StackOverFlow 帖子,如何在/proc/driver下创建proc条目?,包含一个伪文件处理程序的简单示例/proc
.
这两个简单的示例都与源代码具有相似的结构。然而,这些特定示例可能使用已弃用的 Linux 内核接口,因此我提供这些链接只是为了说明伪文件处理程序的底层功能。
导出和取消导出
通常,运行 Linux 的底层硬件的 GPIO 引脚不会暴露给用户应用程序。 Linux 内核使用设备驱动程序使用这些引脚与设备进行交互。
的目的export
是将选定的 GPIO 引脚作为伪文件公开给用户空间,允许用户应用程序与某些硬件执行自己的交互。并非所有可用或可能的 GPIO 引脚都可能会暴露。可以使用哪些引脚来暴露export
将取决于什么/sys
处理程序已被插入到 Linux 内核中,以及这些处理程序允许执行的操作。
实际公开哪些伪文件以及如何使用这些伪文件将取决于 GPIO 引脚的功能,例如数字引脚与模拟引脚与支持 PWM 或具有上拉或下拉电阻的引脚的比较。公开哪些文件还取决于处理程序的功能/sys/class/gpio/
提供。 GPIO 引脚可能具有可用的上拉或下拉电阻,但处理程序可能不提供操作它的接口。
向export
伪文件将创建一个代表所请求的 GPIO 引脚的伪文件目录。这是通过向export
带有包含数据的消息的伪文件export
命令需要正确识别所请求的 GPIO 引脚。然后该消息由 GPIO 处理export
Linux 内核中的 sysfs 处理程序创建代表 GPIO 引脚的伪文件夹以及伪文件,这些文件为指定 GPIO 引脚提供用户应用程序和 sysfs 处理程序之间的接口。处理程序提供物理 GPIO 引脚和引脚设备驱动程序与伪文件表示或接口之间的层。
The unexport
伪文件删除 GPIO 引脚伪文件,以便不再可以与用户应用程序中表示的 GPIO 引脚进行交互。
有关 PWM sysfs 支持的注意事项:正如通过 sysfs 接口支持 GPIO 引脚一样/sys
还支持 PWM 引脚。根文件夹是/sys/class/pwm
其功能在架构上与 GPIO 引脚的功能类似。有一个类似的export
and unexport
使 PWM 引脚可用的功能以及使用导出的 PWM 伪文件是通过对与代表 PWM 引脚的伪文件夹关联的一组文件进行标准文件操作。看在 Dragonboard410c 上使用 PMIC PWM其中描述了“PWM 通过 MPP_4 引脚公开,即低速扩展连接器上的引脚 28”的基础知识。
启动脚本发生变化
引导脚本更改使用/sys/class/gpio/export
创建请求的 GPIO 伪文件。但是,创建的伪文件具有一组在创建伪文件时设置的默认访问权限。由于创建是在具有 root 权限的初始化期间进行的,因此chmod
命令用于允许任何用户应用程序与创建的伪文件交互,而不仅仅是创建它们的用户 root 。
自从export
是在启动和初始化期间完成的,目的是创建 GPIO 引脚伪文件,该文件将在设备通电时保留在原位,并在设备使用期间保留在原位。
DragonBoard 410C 低功耗连接器上的每个 GPIO 引脚都由几个伪文件表示,value
用于传达引脚的值(无论是高电平还是低电平)和direction
用于传达引脚的方向(无论是输入引脚还是输出引脚)。所以我们需要做一个chmod
对于每个伪文件,我们希望用户应用程序访问包括这些伪文件所在的伪文件夹,例如/sys/class/gpio/gpio938
其中包含/sys/class/gpio/gpio938/value
and /sys/class/gpio/gpio938/direction
.