linux驱动之GPIO子系统

一、前言

在嵌入式中,GPIO作为一个常用的信息输入输出手段经常被用在各种场合,那么今天本文就来简单地说一下嵌入式linux中的GPIO子系统。本文为笔者的理解,如果错漏还望指出

二、GPIO子系统介绍

在嵌入式linux中,GPIO引脚 通常联系在一起。但是在嵌入式linux系统的代码结构中,他们的关系远比我们想象的复杂。

2.1 pinctrl

在嵌入式linux中,用 pin control subsystem 来对一款芯片的引脚进行管理,我们经常在设备树中看到 pinctrl 这样的节点,其实就是 引脚控制子系统 驱动的设备树节点。该子系统的帮助各个驱动设备管理引脚,包括 引脚功能复用(pin multiplexing)引脚配置(pin configuration)(如输出电平及上下拉电阻) 等。所以其他的设备驱动在调用 pin control subsystem 提供的接口来对本驱动所需要的引脚进行相关功能的配置。
各个设备如果需要复用引脚,则在设备树的 pinctrl 对各个设备的引脚进行配置,将这些配置作为 pinctrl 的子节点,然后设备驱动在自己的设备树节点中引脚这些配置节点
一般 ARM soc 的数据手册会把 pin controller 的内容放入 GPIO controller 的章节中,各个设备可以通过自己节点的属性来指向 pinctrl 的某个子节点,也就是 pin configuration 来获取相应的引脚配置

2.1 GPIO子系统

GPIO子系统 相对于 pin control subsystem 来说是更加上层的子系统,它将 引脚 配置为 GPIO 并且控制其输入输出,所以从这方面来看,GPIO引脚 在系统软件层面并不是一个概念

三、GPIO子系统使用

3.1 应用使用方法

应用层的使用放到相对简单,可以直接通过 sysfs 来操作 GPIO口

  1. 使用命令 echo num > /sys/class/gpio/export 导出 GPIO口,其中 numGPIO口 的编号
  2. 导出后会生成节点 /sys/class/gpio/gpioN
  3. 通过读写(比如使用 echocat 等工具)生成的节点来获取 GPIO口 的信息及状态

3.2 驱动使用方法

3.2.1 获取设备树信息

获取 GPIO口 信息的设备树接口 在of_gpio.h,这里不做详细讲解,读者们可以直接通过接口函数的命名来熟悉使用方法

另外,关于 GPIO口 设备树节点的属性命名方式是一般为 name-gpios , 其中 name 通常用于指该 GPIO口在设备里的具体用途。比如用于复位,则属性可以命名为 reset-gpios,举例在设备树中表示为 reset-gpios = <&gpio1 15 1>。在驱动中使用 of_get_named_gpi函数 返回值来得到对应的 GPIO号

3.2.2 接口说明

int gpio_request(unsigned gpio, const char *label)

  1. 作用:申请GPIO
  2. 参数分析:
  • unsigned gpio:gpio端口号
  • const char *label:给该gpio端口起的名字
  1. 返回值:
  • 成功返回0
  • 失败返回负数的错误码

int gpio_direction_output(unsigned gpio, int value)

  1. 作用:GPIO的初始化为输出,并设置输出电平:
  2. 参数分析:
  • unsigned gpio:gpio端口号
  • int value:输出值

int gpio_direction_input(unsigned gpio)

  1. 作用:初始化为输入
  2. 参数分析:
  • unsigned gpio:gpio端口号

void gpio_set_value(unsigned gpio, int value)

  1. 作用:GPIO的输出电平设置:
  2. 参数分析:
  • unsigned gpio:gpio端口号
  • int value:输出值

int gpio_get_value(unsigned gpio)

  1. 作用:得到GPIO的电平
  2. 参数分析:
  • unsigned gpio:gpio端口号

void gpio_free(unsigned gpio)

  1. 作用:释放GPIO
  2. 参数分析:
  • unsigned gpio:gpio端口号

int gpio_to_irq(unsigned gpio)

  1. 作用:申请GPIO口中断,返回的值即中断编号可以传给request_irq()和free_irq()
  2. 参数分析:
  • unsigned gpio:gpio端口号

int gpio_export(unsigned gpio, bool direction_may_change)
内核可以对已经被gpio_request()申请的gpio端口的导出进行明确的管理,

  1. 参数分析:
  • unsigned gpio:gpio端口号
  • direction_may_change:表示用户程序是否允许修改gpio的方向,假如可以则参数direction_may_change为真

void gpio_unexport(unsigned gpio)

  1. 作用:撤销GPIO的导出
  2. 参数分析:
  • unsigned gpio:gpio端口号

四、参考链接

应用层使用GPIO:https://blog.csdn.net/mirkerson/article/details/8464290
gpio_direction_output 和 gpio_set_value之间的使用关系https://blog.csdn.net/zhaoqi2617/article/details/53082813

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,219评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,363评论 1 293
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,933评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,020评论 0 206
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,400评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,640评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,896评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,597评论 0 199
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,327评论 1 244
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,581评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,072评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,399评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,054评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,083评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,849评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,672评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,585评论 2 270

推荐阅读更多精彩内容