【问题标题】:Setting GPIO status during boot process在启动过程中设置 GPIO 状态
【发布时间】:2018-10-19 05:28:34
【问题描述】:

我有一块带有 LED 的 Intel Galileo 板连接到一个 GPIO 引脚。当我将电源连接到 Galileo 时,LED 会亮一秒钟,然后再次熄灭。

一旦我的应用程序启动,我就可以操作 LED。但是现在我希望我的 LED 在整个启动过程中打开,一旦我的应用程序启动它应该在此之后操作 LED。我想要实现这一点,我必须更改内核代码并完全重新构建它。

【问题讨论】:

  • 在 Github 上有一个项目 meta-acpi,您可以在其中找到如何通过 ACPI 操作 GPIO 线路的示例。请注意,上述任何方法都不能完全解决您的问题,否则您基本上需要编写和运行 UEFI 应用程序,或者破解引导加载程序(在 UEFI 中,Linux 也可能作为 UEFI 应用程序加载)

标签: linux linux-kernel gpio intel-galileo


【解决方案1】:

如果可能,您可以在引导加载程序中将 GPIO 的默认状态设置为高/低。或者,参考以下 linux 内核和设备树的变化。

:arch/xxx/boot/dts/xxxx.dts

led@4 {
label = "evmsk:green:heartbeat";
gpios = <&gpio1 7 0>;
linux,default-trigger = "heartbeat";
default-state = "off";
};

:drivers/leds/leds-gpio.c

state = of_get_property(child, "default-state", NULL);
if (state) {
if (!strcmp(state, "keep"))
led.default_state = LEDS_GPIO_DEFSTATE_KEEP;
else if (!strcmp(state, "on"))
led.default_state = LEDS_GPIO_DEFSTATE_ON;
else
led.default_state = LEDS_GPIO_DEFSTATE_OFF;
}

ret = gpio_direction_output(led_dat->gpio, led_dat->active_low ^ state);

【讨论】:

  • 感谢您的回复。我猜英特尔伽利略使用 x86 架构。但是当我转到路径:arch/xxx/boot/dts/ for x86 arch 时,没有扩展名为 .dts 的文件。所以我只需要改变leds-gpio.c吗?
  • 我也没有在 5.4.y 分支中看到它,yocto BSP 似乎可以从这里获得:downloadcenter.intel.com/download/26418?v=t 你可以挖掘食谱。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多