当前位置: 星创客 > 学习资源 > 讲师博文 > 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 = <&gpx2 7 0>;

led3 = <&gpx1 1 0>;

led4 = <&gpf3 4 0>;

led5 = <&gpf3 5 0>;

};

/*

就led2引用节点剖析:

gpx2这一组对应的设备树:exynos4x12-pinctrl.dtsi

582         gpx2: gpx2 {

583             gpio-controller;                                                                                                                                       

584             #gpio-cells = <2>;---->表征的是其子节点或者是继承者的GPIO的<&gpx2 7 0>;

  中&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相关的操作

前台专线:010-82525158 企业培训洽谈专线:010-82525379 院校合作洽谈专线:010-82525379 Copyright © 2004-2018 北京华清远见科技发展有限公司 版权所有 ,京ICP备16055225号,京公海网安备11010802025203号
返回

讲师博文

星创客 - 华清远见旗下高端IT培训品牌

当前位置: 星创客 > 学习资源 > 讲师博文 >

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 g...

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 = <&gpx2 7 0>;

led3 = <&gpx1 1 0>;

led4 = <&gpf3 4 0>;

led5 = <&gpf3 5 0>;

};

/*

就led2引用节点剖析:

gpx2这一组对应的设备树:exynos4x12-pinctrl.dtsi

582         gpx2: gpx2 {

583             gpio-controller;                                                                                                                                       

584             #gpio-cells = <2>;---->表征的是其子节点或者是继承者的GPIO的<&gpx2 7 0>;

  中&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相关的操作

相关推荐

全国咨询热线:400-611-6270

?2004-2018华清远见教育科技集团 版权所有 京ICP备16055225号 京公海网安备11010802025203号