外设控制(点灯)应用
1. sysfs接口:
sysfs是一种在Linux内核中提供文件系统接口的方式,它可以用于控制和监视GPIO引脚。使用sysfs接口可以通过读写特定的文件来操作GPIO引脚。
1.1使用linux系统的GPIOsysfs直接进行IO控制
1.2使用shell脚本进行IO控制
#!/bin/bash
echo "hello world!"
echo "gpio44 loading user space!"
echo 44 > /sys/class/gpio/export
# set gpio44 out
echo out > /sys/class/gpio/gpio44/direction
# delay 1s
sleep 1
echo 0 > /sys/class/gpio/gpio44/value
sleep 1
echo 1 > /sys/class/gpio/gpio44/value
sleep 1
echo 0 > /sys/class/gpio/gpio44/value
echo "gpio44 loading user space!"
echo 44 > /sys/class/gpio/unexport
这个shell脚本是需要在系统root权限运行的,大致意思是gpio导入用户空间,设置gpio输出,延时1s,设置输出为0,延时1s,设置输出为1,延时1s,设置输出为0,gpio取消导入用户空间
1.3使用C语言进行IO控制
使用vim 创建一个test.c
vim test.c
使用gcc 编译test.c的可执行文件
gcc test.c
使用root权限运行。
sudo ./a.out
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>
#define GPIO44_SET \
{ \
fd = open("/sys/class/gpio/gpio44/value", O_WRONLY); \
write(fd, "1", sizeof("1")); \
close(fd); \
}
#define GPIO44_RESET \
{ \
fd = open("/sys/class/gpio/gpio44/value", O_WRONLY); \
write(fd, "0", sizeof("0")); \
close(fd); \
}
void read_gpio(int __fd, char *__value)
{
__fd = open("/sys/class/gpio/gpio44/value", O_RDONLY);
read(__fd, __value, 1);
close(__fd);
printf("GPIO value: %c\n", *__value);
return;
}
int main()
{
int fd;
char value;
//chcek gpio44 exist
if (access("/sys/class/gpio/gpio44", F_OK) == 0)
{
printf("loading gpio port\n");
fd = open("/sys/class/gpio/export", O_WRONLY);
write(fd, "44", sizeof("44"));
close(fd);
}
printf("set gpio direction\n");
fd = open("/sys/class/gpio/gpio44/direction", O_WRONLY);
write(fd, "out", sizeof("out"));
close(fd);
// set GPIO 44 value
printf("set gpio44 value \n");
// GPIO44_RESET;
// fd = open("/sys/class/gpio/gpio44/value", O_WRONLY);
// write(fd, "1", sizeof("1"));
// close(fd);
for (int i = 0; i < 10; i++)
{
read_gpio(fd, &value);
GPIO44_SET;
sleep(1);
read_gpio(fd, &value);
GPIO44_RESET;
sleep(1);
}
printf("clear GPIO44\n");
fd = open("/sys/class/gpio/unexport", O_WRONLY);
write(fd, "44", sizeof("44"));
close(fd);
return 0;
}
输出为:
loading gpio port
set gpio direction
set gpio44 value
GPIO value: 0
GPIO value: 1
GPIO value: 0
GPIO value: 1
GPIO value: 0
GPIO value: 1
GPIO value: 0
GPIO value: 1
GPIO value: 0
GPIO value: 1
GPIO value: 0
GPIO value: 1
GPIO value: 0
GPIO value: 1
GPIO value: 0
GPIO value: 1
GPIO value: 0
GPIO value: 1
GPIO value: 0
GPIO value: 1
clear GPIO44
gpio44将会间隔1s高低电平切换。
接入的led将会闪烁。。。
总结:gpiosysfs的控制一般来说会使用c语言或者是shell进行控制,接下来使用VF2去实现一个驱动试试。