檔案IO方式操作GPIO

2021-08-10 06:41:40 字數 2918 閱讀 8850

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 的返回值是最小的未用檔案描述...