OKMX6DL/Q 平台 GPIO 功能应用笔记

本文档介绍了在飞凌 OKMX6DL/Q-S3 平台(Linux 4.1.15)上配置和使用 GPIO 的两种方法。

基本信息

  • 原始路径: /工作相关/飞凌嵌入式imx6全部资料/原始下载资料/OKMX6DL、Q系列产品应用笔记/OKMX6DL&Q-S3-linux4.1.15应用笔记/GPIO/GPIO 应用笔记.pdf
  • 文件大小: 762 KB
  • 页数: 9页
  • 处理日期: 2026-09-20
  • 提取方式: PDF文本提取(pdf-inspector)
  • 状态: done
  • 适用范围: 飞凌 OKMX6DL/Q-S3 平台 Linux 4.1.15

方法一:使用 iomux(设备树配置)

适用于需要在设备树中定义 GPIO 引脚复用功能的场景。

步骤

  1. 查找引脚定义

    • 在 kernel/arch/arm/boot/dts/imx6q-pinfunc.h 中查找对应的引脚宏定义
    • 例如:#define MX6QDL_PAD_EIM_A17__GPIO2_IO21 0x0f0 0x404 0x000 0x5 0x0
  2. 修改设备树

    • 编辑 Kernel/arch/arm/boot/dts/imx6qdl-sabresd.dtsi
    • 添加引脚定义,去掉其他复用功能
  3. 编译烧录

    • 编译生成新的镜像并烧写到开发板
  4. 文件系统操作

    # 计算 GPIO 编号: GPIOn_IOx = (n-1)*32 + x
    # GPIO2_IO21 = (2-1)*32+21 = 53
     
    # 导出 GPIO
    echo 53 > /sys/class/gpio/export
     
    # 设置为输出
    echo out > /sys/class/gpio/gpio53/direction
    echo 1 > /sys/class/gpio/gpio53/value  # 高电平
    echo 0 > /sys/class/gpio/gpio53/value  # 低电平
     
    # 设置为输入
    echo in > /sys/class/gpio/gpio53/direction
     
    # 取消导出
    echo 53 > /sys/class/gpio/unexport

GPIO 输出测试脚本示例

#!/bin/bash
for test in 53 168
do
    echo $test > /sys/class/gpio/export
    echo out > /sys/class/gpio/gpio$test/direction
    echo $1 > /sys/class/gpio/gpio$test/value
    echo $test > /sys/class/gpio/unexport
done
echo complete

执行:./gpiotest_o.sh 0(输出低电平)或 ./gpiotest_o.sh 1(输出高电平)

方法二:创建 dev/gpio 节点(内核驱动)

适用于需要通过字符设备接口控制 GPIO 的场景。

步骤

  1. 查找引脚定义

    • 在 kernel/arch/arm/boot/dts/imx6q-pinfunc.h 中查找
  2. 修改设备树配置文件

    • 编辑 Kernel/arch/arm/boot/dts/imx6qdl-sabresd.dtsi
    • 确保引脚未被其他功能占用
  3. 添加设备节点

    • 修改 Kernel/arch/arm/boot/dts/imx6q-s3-sabresd.dts
    • 在 drivers/gpio 目录下添加驱动文件 gpio-user.c
    • 同时添加 Kconfig 和 Makefile
  4. 修改内核配置

    # driver/gpio/Makefile
    obj-$(CONFIG_GPIO_USER_INTF) += gpio-user.o
    # driver/gpio/Kconfig
    config GPIO_USER_INTF
        tristate "gpio user interface"
        ---help---
        this driver for all gpio control
    # arch/arm/config/imx_v7_defconfig
    CONFIG_GPIO_USER_INTF=y
    
  5. 编译内核

    • 确认生成 gpio-user.o
    • 用新的 zImage 和 dtb 替换 SD 卡 system 目录中的文件
  6. 使用测试程序

    # 编译 gpio-test.c
    gcc -o gpio-test gpio-test.c
     
    # 输出高电平
    ./gpio-test out 0 1
     
    # 输出低电平
    ./gpio-test out 0 0

关键要点

  1. GPIO 编号计算: GPIOn_IOx = (n-1)*32 + x
  2. sysfs 接口: 通过 /sys/class/gpio/ 目录控制 GPIO
  3. 设备树: 必须在设备树中正确配置引脚复用功能
  4. 电源域: GPIO 输出高电平电压取决于引脚所在的电源域

关联笔记