You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Yocto构建嵌入式Linux的树莓派3 GPIO引脚访问问题求助

问题背景
  • 开发目标:在搭载嵌入式Linux系统的树莓派3上编写C程序实现LED闪烁功能
  • 系统构建方案:基于Yocto、适配树莓派3的Poky、OpenEmbedded构建可写入SD卡启动的系统镜像
  • 已完成工作:已添加应用运行所需的相关层,可正常完成简单Hello World程序的开发与部署运行
  • 当前故障:访问GPIO引脚时出现异常,无法正常控制引脚输出
排查与解决步骤

1. 确认镜像GPIO相关依赖与配置完整性

Yocto构建的最小镜像默认不会包含GPIO用户态访问的相关组件,优先做以下检查:

  • 登录树莓派终端执行gpiodetect,如果提示命令不存在,说明镜像未集成libgpiod库与配套工具。需要在构建配置中添加对应组件:在local.conf或自定义镜像的.bb文件中加入IMAGE_INSTALL:append = " libgpiod libgpiod-tools",重新构建镜像烧录即可。
  • 执行dmesg | grep gpio查看内核启动日志,正常输出应包含pinctrl-bcm2835 GPIO控制器初始化成功的记录。如果没有相关输出,需要检查设备树配置:在local.conf中确认KERNEL_DEVICETREE已添加对应树莓派3的dtb文件(3B型号对应bcm2710-rpi-3-b.dtb,3B+对应bcm2710-rpi-3-b-plus.dtb),同时检查RPI_EXTRA_CONFIG配置项中没有添加禁用GPIO的参数。

2. 替换GPIO访问实现方式

传统sysfs方式访问GPIO已经被内核废弃,在新的Yocto版本内核中默认会关闭sysfs GPIO支持,直接使用libgpiod库做用户态GPIO访问即可,以下是可直接运行的LED闪烁C代码示例:

#include <gpiod.h>
#include <stdio.h>
#include <unistd.h>

#define GPIO_CHIP "gpiochip0"  // 树莓派3主GPIO控制器编号,可通过gpiodetect查询调整
#define LED_BCM_PIN 18         // 接LED的GPIO引脚BCM编号,根据实际接线修改

int main() {
    struct gpiod_chip *chip = gpiod_chip_open_by_name(GPIO_CHIP);
    if (!chip) {
        perror("打开GPIO控制器失败");
        return 1;
    }

    struct gpiod_line *led_line = gpiod_chip_get_line(chip, LED_BCM_PIN);
    if (!led_line) {
        perror("获取LED引脚句柄失败");
        gpiod_chip_close(chip);
        return 1;
    }

    if (gpiod_line_request_output(led_line, "led_blink_demo", 0) < 0) {
        perror("配置引脚为输出模式失败");
        gpiod_chip_close(chip);
        return 1;
    }

    while (1) {
        gpiod_line_set_value(led_line, 1);
        sleep(1);
        gpiod_line_set_value(led_line, 0);
        sleep(1);
    }

    gpiod_line_release(led_line);
    gpiod_chip_close(chip);
    return 0;
}

编写对应Yocto程序recipe时,需要在配置中添加DEPENDS = "libgpiod",构建系统会自动完成库的链接,不需要手动指定编译链接参数。

3. 访问权限问题排查

  • 若不使用root用户运行程序,需要先将运行程序的用户加入gpio用户组,执行usermod -aG gpio <你的用户名>,重启设备后权限生效。
  • 执行ls -l /dev/gpiochip0检查设备节点权限,正常权限位应为crw-rw---- 1 root gpio,若组权限没有读写位,可在镜像配置中添加udev规则修正权限。

内容的提问来源于stack exchange,提问作者SmokedPorcupine

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 17:57:27