linux子系统led,Linux设备驱动GPIO子系统
Linux設備驅動GPIO子系統
時間:2017-12-05?????來源:星創客
1、內核中gpio的函數API--->gpiolib.c
[1]測試gpio端口是否合法:
int gpio_is_valid(int number);
[2]申請、釋放gpio管腳
static inline int gpio_request(unsigned gpio, const char *label);
static inline void gpio_free(unsigned gpio);
[3]標記gpio的使用方向包括輸入還是輸出/*成功返回零失敗返回負的錯誤值*/
static inline int gpio_direction_input(unsigned gpio);
static inline int gpio_direction_output(unsigned gpio , int value);
[4]獲得gpio引腳的值和設置gpio引腳的值(對于輸出)
static inline int gpio_get_value(unsigned gpio);
static inline void gpio_set_value(unsigned int gpio, int value);
[5]gpio當作中斷口使用
static inline int gpio_to_irq(unsigned int gpio);
2、用戶空間gpio的調用
在/sys/下提供了相關用戶層與底層進行交互的屬性文件;
/sys/class/gpio/
(2.0)內核配置
Device Drivers ?--->
-*- GPIO Support ?--->
[*] ? /sys/class/gpio/... (sysfs interface)
如果說用戶空間想跟內核中的GPIO管叫進行交互的話,首先需要將該管腳導出至用戶空間;
(2.1) export/unexport
/sys/class/gpio/export
(2.2) /sys/class/gpio/gpioN:pin
direction: in/out
value:0/1
(2.3)/sys/class/gpio/gpiochipN
3、gpio的led編寫方式
(3.0)原理圖中led對應管腳信息:
led2 ?gpx2_7
led3 ?gpx1_0
led4 ?gpf3_4
led5 ?gpf3_5
(3.1)GPIO管腳設備樹的寫法:
[1]改寫設備樹
設備樹寫法:
fs4412-leds-gpio{
compatible = "fs4412,leds";
/* index : ? ? ?0 ? ? ? ? 1*/
led2 = ;
led3 = ;
led4 = ;
led5 = ;
};
/*
就led2引用節點剖析:
gpx2這一組對應的設備樹:exynos4x12-pinctrl.dtsi
582 ? ? ? ? gpx2: gpx2 {
583 ? ? ? ? ? ? gpio-controller;
584 ? ? ? ? ? ? #gpio-cells = <2>;---->表征的是其子節點或者是繼承者的GPIO的;
中&gpx2后邊的參數個數,7代表第七個管腳,0代表工作模式
586 ? ? ? ? ? ? interrupt-controller;
587 ? ? ? ? ? ? #interrupt-cells = <2>;
588 ? ? ? ? };
*/
編譯設備樹:
make dtbs
拷貝設備樹生成的文件至掛載目錄:
cp xxx.dtb ?~/tftpboot
[2]程序編寫
[2.1]將設備樹中的設備信息所在的節點獲取
設備樹節點信息獲取:of_find_node_by_path
gpio管腳獲取 ? ? ?:of_get_named_gpio
[2.2]獲取該節點中的設備信息
[2.3]執行gpio相關的操作
總結
以上是生活随笔為你收集整理的linux子系统led,Linux设备驱动GPIO子系统的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 腾讯代理 MMORPG 游戏《命运方舟》
- 下一篇: linux端口访问规则,linux 查看