Linux 内核 /sys/class类

本文探讨了Linux设备模型中的类概念,解释了类如何提供设备的高级视图,抽象出低级实现细节,使驱动能够统一处理不同类型的设备。文章还介绍了类在sysfs中的组织方式,并讨论了类子系统作为向用户空间输出信息的最佳途径。

我们在本章中要考察最后的设备模型概念是类.一个类是一个设备的高级视图, 它抽象出 低级的实现细节. 驱动可以见到一个 SCSI 磁盘或者一个 ATA 磁盘, 在类的级别, 它们都 是磁盘. 类允许用户空间基于它们做什么来使用设备, 而不是它们如何被连接或者它们如 何工作.

 

几乎所有的类都在 sysfs 中在 /sys/class 下出现. 因此, 例如, 所有的网络接口可在

/sys/class/net 下发现, 不管接口类型. 输入设备可在 /sys/class/input 下, 以及串 行设备在 /sys/class/tty. 一个例外是块设备, 由于历史的原因在 /sys/block.

 

类成员关系常常由高级的代码处理, 不必要驱动的明确的支持. 当 sbull 驱动( 见 16 章) 创建一个虚拟磁盘设备, 它自动出现在 /sys/block. snull 网络驱动(见 17 章)没 有做任何特殊事情给它的接口在 /sys/class/net 中出现. 将有多次, 但是, 当驱动结束 直接处理类.

 

在许多情况, 类子系统是最好的输出信息到用户空间的方法. 当一个子系统创建一个类, 它完全拥有这个类, 因此没有必要担心哪个模块拥有那里发现的属性. 它也用极少的时间 徘徊于更加面向硬件的 sysfs 部分来了解, 它不是一个直接浏览的好地方. 用户会更加 高兴地在 /sys/class/some-widget 中发现信息, 而不是,

/sys/device/pci0000:00/0000:00:10.0/usb2/2-0:1.0.

 

驱动核心输出 2 个清晰的接口来管理类. class_simple 函数设计来尽可能容易地添加新 类到系统. 它们的主要目的, 常常, 是暴露包含设备号的属性来使能设备节点的自动创建. 常用的类接口更加复杂但是同时提供更多特性. 我们从简单版本开始.

转载于:https://www.cnblogs.com/fanweisheng/p/11147997.html

Linux 系统中,`/sys/class/gpio/gpiochipxxx` 接口是 GPIO 子系统的一部分,用于提供用户空间对 GPIO 控制器的访问能力。这些接口是由 `gpiolib-sysfs.c` 中的代码实现,并归属于 `gpio_class` ,通过 `device_create_with_groups` 函数创建了相关的 sysfs 文件节点 [^3]。 每个 `gpiochipxxx` 目录对应一个 GPIO 控制器实例,其中 `xxx` 是控制器的起始 GPIO 编号。通过这些接口,用户可以查看和操作特定 GPIO 控制器的信息和功能。例如,可以查看控制器的基本属性,如 `base` 和 `label`,以及获取该控制器管理的 GPIO 数量 `ngpio` 等信息 [^5]。 ### 操作方法 #### 查看 GPIO 控制器信息 要查看一个 GPIO 控制器的基本信息,可以通过读取其属性文件来实现。例如,要查看 `gpiochip0` 的基本信息,可以使用以下命令: ```bash cat /sys/class/gpio/gpiochip0/base cat /sys/class/gpio/gpiochip0/label cat /sys/class gpio/gpiochip0/ngpio ``` 这些命令将分别显示控制器的起始 GPIO 编号、标签以及管理的 GPIO 数量 [^5]。 #### 操作 GPIO 引脚 要操作一个具体的 GPIO 引脚,首先需要将其从内核空间导出到用户空间,这通过向 `export` 文件写入目标 GPIO 编号完成。一旦导出成功,就可以通过创建的 `gpioN` 目录下的文件来设置引脚的方向(输入或输出)及其值(高或低)。 ##### 导出 GPIO 引脚 ```bash echo N > /sys/class/gpio/export ``` 这里的 `N` 是要操作的 GPIO 引脚编号 [^2]。 ##### 设置 GPIO 引脚方向 ```bash echo out > /sys/class/gpio/gpioN/direction ``` 或者对于输入引脚: ```bash echo in > /sys/class/gpio/gpioN/direction ``` 这里的 `gpioN` 是之前导出的 GPIO 引脚编号对应的目录 [^2]。 ##### 设置或读取 GPIO 引脚值 对于输出引脚,设置其值为高电平: ```bash echo 1 > /sys/class/gpio/gpioN/value ``` 对于输入引脚,读取其当前值: ```bash cat /sys/class/gpio/gpioN/value ``` 完成操作后,可以通过向 `unexport` 文件写入相同的 GPIO 编号来释放该引脚 [^2]。 需要注意的是,如果某个 GPIO 引脚已经被内核驱动程序占用,则尝试导出该引脚将会失败,并提示错误信息 [^5]。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值