0 前言
本文描述如果通過檔案io sysfs方式控制easyarm gpio埠。通過sysfs方式控制gpio,先訪問/sys/class/gpio目錄,向export檔案寫入gpio編號,使得該gpio的操作介面從核心空間暴露到使用者空間,gpio的操作介面包括direction和value等,direction控制gpio方向,而value可控制gpio輸出或獲得gpio輸入。
linux學習可從應用出發,先不糾結linux驅動編寫,先把linux給玩起來。
【相關博文】
【 easyarm i.mx28學習筆記——安裝和使用tftp】
【 樹莓派學習筆記——shell指令碼操作gpio】
【 linux學習筆記——例說makefile 索引博文】
【**倉庫】
**倉庫位於bitbucket——
1 暴露gpio操作介面
[cpp]view plain
copy
static
int gpio_export(int pin)
len = snprintf(buffer, buffer_max, "%d", pin);
if (write(fd, buffer, len) < 0)
close(fd);
return 0;
}
2 隱藏gpio操作介面
[cpp]view plain
copy
static
int gpio_unexport(int pin)
len = snprintf(buffer, buffer_max, "%d", pin);
if (write(fd, buffer, len) < 0)
close(fd);
return 0;
}
3 配置gpio方向
[cpp]view plain
copy
static
int gpio_direction(int pin, int dir)
if (write(fd, &dir_str[dir == in ? 0 : 3], dir == in ? 2 : 3) < 0)
close(fd);
return 0;
}
【簡單說明】
dir_str[dir == in ? 0 : 3], dir == in ? 2 : 3 如果輸入為常數巨集in, 取dir_str[0]=「in」;若輸入常數巨集為out,取dir_str[0]=「out」。此處巧妙的使用了在陣列中的「\0」。
4 控制gpio輸出
[cpp]view plain
copy
static
int gpio_write(int pin, int value)
if (write(fd, &values_str[value == low ? 0 : 1], 1) < 0)
close(fd);
return 0;
}
5 獲得gpio輸入
[cpp]view plain
copy
static
int gpio_read(int pin)
if (read(fd, value_str, 3) < 0)
close(fd);
return (atoi(value_str));
}
6 gpio翻轉操作
【main函式】
[cpp]view plain
copy
int main(int argc, char *argv)
gpio_write(p24, 0); // 恢復輸出低電平
gpio_unexport(p24);
return 0;
}
【makefile】
——此處的**tab顯示可能存在問題,請以**倉庫為主。
[plain]view plain
copy
# 可執行檔案
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 $<
Linux操作GPIO(檔案IO方式)
首先,看看系統中有沒有 sys class gpio 這個資料夾。如果沒有請在編譯核心的時候加入 device drivers gpio support sys class gpio sysfs inte ce sys class gpio 的使用說明 gpio operation 通過 sys 檔...
檔案IO操作
在對乙個檔案或者裝置進行讀寫之前,都需要先開啟,以獲得該檔案或者裝置的操作指標,也就是檔案描述符。有了檔案描述符,後續就可以進行讀取,修改操作了。標頭檔案函式宣告 int open const char pathname,int flags,mode t mode 返回值成功 返回檔案描述符 失敗 ...
檔案操作IO
dup oldfd 和dup2 oldfd,newfd 這兩個函式我們可以用來複製檔案描述符。1 其中oldfd和newfd分別是複製前檔案描述符和複製後的檔案描述符。2 這兩個函式的呼叫都將複製檔案描述符oldfd,且他們的返回值都為新的檔案描述符。3 不同點是dup 的返回值是最小的未用檔案描述...