static int gpio_export(int pin)
{
char buffer[BUFFER_MAX];
int len;
int fd;
fd = open("/sys/class/gpio/export", O_WRONLY);
if (fd < 0) {
fprintf(stderr, "Failed to open export for writing!\n");
return(-1);
}
len = snprintf(buffer, BUFFER_MAX, "%d", pin);
if (write(fd, buffer, len) < 0) {
fprintf(stderr, "Fail to export gpio!");
return -1;
}
close(fd);
return 0;
}static int gpio_unexport(int pin)
{
char buffer[BUFFER_MAX];
int len;
int fd;
fd = open("/sys/class/gpio/unexport", O_WRONLY);
if (fd < 0) {
fprintf(stderr, "Failed to open unexport for writing!\n");
return -1;
}
len = snprintf(buffer, BUFFER_MAX, "%d", pin);
if (write(fd, buffer, len) < 0) {
fprintf(stderr, "Fail to unexport gpio!");
return -1;
}
close(fd);
return 0;
}static int gpio_direction(int pin, int dir)
{
static const char dir_str[] = "in\0out";
char path[DIRECTION_MAX];
int fd;
snprintf(path, DIRECTION_MAX, "/sys/class/gpio/gpio%d/direction", pin);
fd = open(path, O_WRONLY);
if (fd < 0) {
fprintf(stderr, "failed to open gpio direction for writing!\n");
return -1;
}
if (write(fd, &dir_str[dir == IN ? 0 : 3], dir == IN ? 2 : 3) < 0) {
fprintf(stderr, "failed to set direction!\n");
return -1;
}
close(fd);
return 0;
}static int gpio_write(int pin, int value)
{
static const char values_str[] = "01";
char path[DIRECTION_MAX];
int fd;
snprintf(path, DIRECTION_MAX, "/sys/class/gpio/gpio%d/value", pin);
fd = open(path, O_WRONLY);
if (fd < 0) {
fprintf(stderr, "failed to open gpio value for writing!\n");
return -1;
}
if (write(fd, &values_str[value == LOW ? 0 : 1], 1) < 0) {
fprintf(stderr, "failed to write value!\n");
return -1;
}
close(fd);
return 0;
}static int gpio_read(int pin)
{
char path[DIRECTION_MAX];
char value_str[3];
int fd;
snprintf(path, DIRECTION_MAX, "/sys/class/gpio/gpio%d/value", pin);
fd = open(path, O_RDONLY);
if (fd < 0) {
fprintf(stderr, "failed to open gpio value for reading!\n");
return -1;
}
if (read(fd, value_str, 3) < 0) {
fprintf(stderr, "failed to read value!\n");
return -1;
}
close(fd);
return (atoi(value_str));
}int main(int argc, char *argv[])
{
int i = 0;
gpio_export(P24);
gpio_direction(P24, OUT); // GPIO为输出状态
for (i = 0; i < 10; i++) {
printf("LED Blink\n");
gpio_write(P24, i % 2);
usleep(500 * 1000);
}
gpio_write(P24, 0); // 恢复输出低电平
gpio_unexport(P24);
return 0;
}# 可执行文件 TARGET=test # 源文件 SRCS=gpio-sysfs.c # 目标文件 OBJS=$(SRCS:.c=.o) # 指令编译器和选项 CROSS=arm-fsl-linux-gnueabi- CC=$(CROSS)gcc STRIP=$(CROSS)strip CFLAGS=-Wall -std=gnu99 -O2 $(TARGET):$(OBJS) $(CC) -o $@ $^ $(STRIP) $@ clean: rm -rf $(TARGET) $(OBJS) # 连续动作,先清除再编译链接,复制到tftpboot中 install:clean $(TARGET) @echo 复制到tftpboot目录 cp $(TARGET) ~/tftpboot @echo 复制结束 # 编译规则 $@代表目标文件 $< 代表第一个依赖文件 %.o:%.c $(CC) $(CFLAGS) -o $@ -c $<
#!/bin/sh tftp -g -r test 192.168.1.106 chmod a+x test echo "start to run test." ./test

EasyARM i.mx28学习笔记——文件IO方式操作GPIO,布布扣,bubuko.com
EasyARM i.mx28学习笔记——文件IO方式操作GPIO
原文:http://blog.csdn.net/xukai871105/article/details/38456079