设置引导过程中的GPIO状态

问题描述:

我有英特尔伽利略板,LED连接到GPIO引脚之一。当我将电源连接到伽利略时,LED亮起一秒钟然后再次关闭。 一旦我的应用程序启动,我可以操纵LED。但是现在我希望我的LED在整个引导过程中打开,一旦我的应用程序启动,它应该在那之后操作LED。我想要实现这一点,我必须改变内核代码,并完全重新构建它。设置引导过程中的GPIO状态

如果有人曾经尝试过,请让我。 在此先感谢

+0

有一个项目*元ACPI * Github上您可以在这里找到如何通过ACPI操作GPIO线路的示例。请注意,上述任何一种方式都不会完全解决您的问题,否则您基本上需要编写并运行UEFI应用程序,或者破解引导加载程序(在UEFI中顺便说一句,Linux也可以作为UEFI应用程序加载) – 0andriy

如果可能,可以在引导加载程序中使GPIO的默认状态为高/低。或者,请参阅以下Linux内核和设备树中的更改。

:弓/ XXX的/ boot/DTS/xxxx.dts

[email protected] { 
label = "evmsk:green:heartbeat"; 
gpios = <&gpio1 7 0>; 
linux,default-trigger = "heartbeat"; 
default-state = "off"; 
}; 

:驱动器/ LED灯/指示灯,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); 
+0

感谢您的回复。我猜intel galileo使用x86 arch。但是当我去到arch:arch/xxx/boot/dts/for x86 arch时,没有扩展名为.dts的文件。所以我只需要改变leds-gpio.c。 – cgoma