Linux 在引导过程中设置GPIO状态

Linux 在引导过程中设置GPIO状态,linux,linux-kernel,gpio,intel-galileo,Linux,Linux Kernel,Gpio,Intel Galileo,我有一个Intel Galileo板,LED连接到其中一个GPIO引脚。当我将电源连接到伽利略时,LED亮起一秒钟,然后再次熄灭 一旦我的应用程序启动,我就能够操纵LED。但现在我希望我的LED在整个引导过程中打开,一旦我的应用程序启动,它应该在启动后操作LED。我想要实现这一点,我必须更改内核代码并完全重新构建它 如果可能,您可以在引导加载程序中设置GPIO高/低的默认状态。或者,参考linux内核和设备树中的以下更改 :arch/xxx/boot/dts/xxxx.dts led@4 { l

我有一个Intel Galileo板,LED连接到其中一个GPIO引脚。当我将电源连接到伽利略时,LED亮起一秒钟,然后再次熄灭


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

如果可能,您可以在引导加载程序中设置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";
};

谢谢你的回复。我猜intel galileo使用x86 arch。但当我转到路径:arch/xxx/boot/dts/for x86 arch时,没有扩展名为.dts的文件。我也没有在5.4.y分支中看到它,yocto BSP似乎可以从这里获得:您可以深入研究配方。Github上有一个项目meta acpi,您可以在其中找到如何通过acpi操纵gpio线的示例。注意,上述任何方法都不能完全解决您的问题,否则您基本上需要编写并运行UEFI应用程序,或者破解引导加载程序(在UEFI btw中,Linux也可以作为UEFI应用程序加载)
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);