2017-09-25 8 views
0

GPIO 핀 중 하나에 LED가 연결된 인텔 갈릴레오 보드가 있습니다. 갈릴레오에 전원을 연결하면 LED가 1 초 동안 켜졌다가 다시 꺼집니다. 일단 어플리케이션을 시작하면 LED를 조작 할 수 있습니다. 하지만 이제 전체 부팅 과정에서 LED가 켜지도록하고 응용 프로그램이 시작되면 LED를 조작해야합니다. 커널 코드를 변경하고 완전히 다시 빌드해야한다는 것을 알았습니다.부팅 프로세스 중 GPIO 상태 설정

누구든지 전에 시도한 경우 알려주세요. 미리 감사드립니다.

+0

프로젝트 * 메타 ACPI *이 Github에서에있다 여기에서 ACPI를 통해 GPIO 라인을 조작하는 방법을 찾을 수 있습니다. 참고로 언급 한 방법으로 문제를 완전히 해결할 수는 없으며 기본적으로 UEFI 응용 프로그램을 작성하고 실행하거나 부트 로더를 해킹해야합니다 (UEFI에서 Linux는 UEFI 응용 프로그램으로도로드 될 수 있습니다). – 0andriy

답변

1

가능하면 부트 로더에서 GPIO의 기본 상태를 높게 또는 낮게 만들 수 있습니다. 또는 Linux 커널 및 장치 트리의 다음 변경 사항을 참조하십시오.

: 아치/XXX/부팅/DTS/xxxx.dts

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

: 드라이버/LED에/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

답장을 보내 주셔서 감사합니다. 인텔 갈릴레오는 x86 아치를 사용합니다. 하지만 경로로 갔을 때 : arch/xxx/boot/dts/x86 arch의 경우 확장자가 .dts 인 파일이 없습니다. 그래서 leds-gpio.c 만 바꿔야합니다. – cgoma