在嵌入式设备中控制GPIO 一般做法是通过写一个单独的驱动程序。而大多数资料显示都是使用这一种方法。
但其实Linux下有一个通用的 GPIO 控制接口, 就是 sysfs文件系统
什么是sysfs文件系统
sysfs 是 Linux 2.6 引入的一个新型文件系统,是一个基于内存的文件系统,它的作用是
将内核信息以文件的方式提供给用户程序使用。 该文件系统的目录层次结构严格按照内核的
数据结构组织。
sysfs 提供一种机制,使得可以显式的描述内核对象、对象属性及对象间关系。sysfs 有
两组接口,一组针对内核,用于将设备映射到文件系统中,另一组针对用户程序,用于读取
或操作这些设备。
大意就是 sysfs 将设备映射到文件系统中来, 并提供一定的接口用于操作这些外设。
sysfs提供了什么样的接口
因为这次重点是使用GPIO,主要看看 /sys/class/gpio 目录下的内容
有两个接口
* /sys/class/gpio/export 文件用于通知系统需要导出控制的GPIO引脚编号
* /sys/class/gpio/unexport 用于通知系统取消导出
*/sys/class/gpio/gpiochipX 目录保存系统中GPIO寄存器的信息,包括每个寄存器控制引脚的起始编号base,寄存器名称,引脚总数 导出一个引脚的操作步骤
GPIO引脚编号是什么
引脚编号 = 控制引脚的寄存器基数 + 控制引脚寄存器位数
例如 GPIO3.26: 3 * 32 + 26 = 122
向/sys/class/gpio/export写入此编号,比如122号引脚,在shell中可以通过以下命令实现,命令成功后生成/sys/class/gpio/gpio122目录,如果没有出现相应的目录,说明此引脚不可导出.
不可导出有两个原因。
1)没有这个外设
2)外设在其他复用功能中占用
使用sysfs文件系统控制LED
查看官方文档可知,使用AP-Demo 板子上的LED必须接上4个跳线帽, 如下图显示。
LED1 | GPIO 3.26 |
LED2 | GPIO 3.22 |
LED3 | GPIO 3.20 |
LED4 | GPIO 2.7 |
- echo 122 > /sys/class/gpio/export
复制代码
可以看到 出现了 gpio122 目录
目录里面的文件用于修改GPIO的功能。
direc
tion:修改端口输出输入方向
value:端口的值
我们需要点亮LED灯,必须设置GPIO为输出。
- echo out > /sys/class/gpio/gpio122/direction
复制代码
GPIO 输出低电平 此时LED1点亮。
- echo 0 > /sys/class/gpio/gpio122/value
复制代码
- echo 1 > /sys/class/gpio/gpio122/value
复制代码
此时关闭LED1
到此已经可以自由控制灯的亮灭了。 下一篇 用 C 语言写一个流水灯的程序。
0
|
|
|
试用报告的发帖积分可以改为0分哈!系统默认是1个积分就变成悬赏提问帖了。
|
|
|
|
|
我确定有改的。 但还是会变悬赏帖。
之前都不会, 可能是换了 win10. IE版本不同的问题。
|
|
|
|
|