嵌入式Linux下Libgpiod 应用示例

1). 简介
  NXP iMX8是NXP去年底发布的基于Cortex-A72/A53和Coretex-M4异构多核架构的ARM处理器,本文就基于嵌入式Linux演示GPIO相关应用示例。
  本文所演示的ARM平台来自于Toradex 基于NXP iMX8QM ARM处理器的Apalis iMX8QM ARM嵌入式平台。
  2). 准备
  a). Apalis iMX8QM ARM核心版配合Apalis Evaluation Board载板,连接调试串口UART1(载板X29)到开发主机方便调试。
  b). Apalis iMX8 Cortex-A核心安装Toradex Ycoto Linux Console image V3.04版本,详细信息请参考这里。
  d). Apalis Evaluation Board GPIO相关硬件连接
  X2 MXM_3 <-> X34 LED1
  X2 MXM_5 <-> X34 SW5
  X2 MXM_11 <-> X34 SW1
  3). GPIO 命令行测试
  a). 嵌入式Linux系统下之前呗广泛应用的GPIO工具为sysfs GPIO接口(/sys/class/gpio),但是目前这个项目已经处于deprecated状态,经Linux Kernel Community确定其替代者就是GPIO字符设备API Libgpiod。因此,尽管本文测试使用的Toradex Ycoto Linux Console image V3.04版本依然支持sysfs GPIO接口,但是已经不建议使用,如果需要相关说明,可以参考这里。本文接下来的测试都是基于Libgpiod来进行。
  b). GPIO 数字编码
  ./ ARM SOC定义GPIO管脚通常为一串字母数字的组合,之前sysfs API操作时候需要将不同SOC GPIO的字母数字命名转换为纯数字编码,对于不同的SOC转换规则的详细说明请见这里,而本文使用的libgpiod API则直接可以按照GPIO命名进行操作,更为直观和便利。
  ./ 首先根据 Apalis iMX8 datasheet 4.4章节的表格,找出所需要GPIO管脚的字母数字组合命名,比如本文涉及的三个GPIO管脚;在接下来的Libgpiod API中都需要使用对应的GPIO命名中的和这两个参数来操作对应的GPIO管脚
  ### GPIO字符数次串命名规则:LSIO.GPIO.IO
  X2 MXM_3 -> LSIO.GPIO0.IO09
  X2 MXM_5 -> LSIO.GPIO0.IO12
  X2 MXM_11 -> LSIO.GPIO4.IO01
  c). 在具体调试GPIO之前,还需要确认在Linux kernel device tree中,这个管脚被定义为GPIO且并没有被其他驱动功能占用,否则在具体操作GPIO的时候会出现冲突导致异常,关于device tree的说明本文不赘述,可以参考这里。本文所涉及的三个GPIO管脚默认即配置为GPIO,因此无需修改。
  d). 调用Libgpiod API在命令行下进行GPIO测试
  ./ Apalis iMX8 上电开机进入嵌入式Linux系统,下面操作在调试串口下进行
  ./ 罗列GPIO banks,也就是对应的上面提到的controller。可以看到有8个banks,每个banks包含32 lines,也就是32 gpio。当然,实际上结合具体的SOC和模块定义,不一定每个banks和lines都有对应的GPIO管脚,有效的肯呢个只是一部分。
  -----------------------------------
  root@apalis-imx8:~# gpiodetect
  gpiochip0 [5d080000.gpio] (32 lines)
  gpiochip1 [5d090000.gpio] (32 lines)
  gpiochip2 [5d0a0000.gpio] (32 lines)
  gpiochip3 [5d0b0000.gpio] (32 lines)
  gpiochip4 [5d0c0000.gpio] (32 lines)
  gpiochip5 [5d0d0000.gpio] (32 lines)
  gpiochip6 [5d0e0000.gpio] (32 lines)
  gpiochip7 [5d0f0000.gpio] (32 lines)
  -----------------------------------
  ./ 查看某个bank具体GPIO lines的情况

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值