Controlando os LEDs no Linux Alpino usando a linha de comando
Desenvolvemos uma placa portadora Raspberry Pi Compute Module embutida para uso industrial: o PCCB.
Como pode ver, existem três LEDs (directamente) programáveis pelo utilizador no PCCB: USUÁRIO / INFO / ACT.
Estes são definidos na árvore de dispositivos. Por exemplo, podemos definir o seguinte na nossa árvore de dispositivos sobrepostos:
//LEDs
fragmento@11 {
alvo = ;
__overlay__ {{
led_act: led_act {
etiqueta = "myledact";
gpios = ;
linux,acionador por defeito = "mmc0";
};
led_info: ledinfo {
etiqueta = "myledinfo";
gpios = ;
linux, gatilho por defeito = "cpu";
};
led_user: led_user {
label = "myleduser";
gpios = ;
linux, acionador por defeito = "batimento cardíaco";
};
};
};
O arquivo fonte (.dts) de sobreposição da árvore de dispositivos precisará ser compilado, e renderá um arquivo .dtbo.
Este ficheiro é incluído como uma sobreposição no config.txt (no nosso caso está incluído num sub ficheiro, usercfg.txt que é incluído a partir do config.txt)
# Sobreposição da placa portadora de controle Pi
dtoverlay=pi-control-carrier-board
Isto irá dizer ao SO VideoCore que é carregado primeiro para passar na árvore de dispositivos para o modelo Pi particular, incluindo a nossa sobreposição ao kernel Linux.
O que é uma árvore de dispositivos?
Os dispositivos ARM têm se tornado cada vez mais personalizados e diversificados em comparação com os dispositivos x86 padrão que tinham componentes padronizados.
A fim de evitar recompilar o kernel e ter que combinar cada hardware modificado, um sistema de descrição do layout do hardware com o kernel do Linux foi concebido.
A árvore de dispositivos.
É um conceito independente do SO, pois é carregado no Kernel do SOes. Qualquer sistema operacional que o deseje, pode suportar.
O kernel Linux receberá a árvore de dispositivos, e assim saberá qual dispositivo está presente, como ele está conectado e como falar com ele (drivers são carregados dependendo das dicas na árvore de dispositivos, por exemplo).
Como um Raspberry Pi não é hardware estático, mas vem em configurações diferentes e pode expor diferentes pinos, por exemplo, e também ter diferentes add-ons (HATs), um add-on adicional foi necessário: sobreposições de árvore de dispositivos.
Estes arquivos permitem modificar a árvore de dispositivos, sem ter que ter uma nova árvore de dispositivos individual para cada possível combinação de hardware que você pode anexar ao Pi / configurar o Pi para.
Como posso controlar os LEDs?
Estes LEDs vão aparecer no sistema, no /sys/class/leds directório:
Como você pode ver, um total de quatro LEDs é exposto aqui, três dos quais (myledact, myledinfo, myleduser) foram adicionados por nós usando o overlay!
Cada um destes LEDs é um diretório em si mesmo,
o que lhe dá controlo sobre o LED.
Lembre-se, no Linux tudo é um arquivo / falar com o kernel é abstraído para fazer operações no sistema de arquivos (na verdade é um paradigma UNIX).
Corre
gatilho de gato
para o LED.
Ele mostrará uma lista de quais gatilhos podem ser definidos para ele:
nenhum rc-feedback kbd-scrolllock kbd-numlock kbd-capslock kbd-kanalock kbd-shiftlock kbd-altgrlock kbd-ctrllock kbd-altlock kbd-altlock kbd-shiftrlock kbd-shiftrlock kbd-ctrllock kbd-ctrlrlock temporizador com luz de fundo de batimento cardíaco gpio cpu cpu0 cpu1 cpu2 cpu3 pânico de entrada por defeito [mmc0]
Note que o último gatilho, mmc0 está entre parênteses rectos. Isto é o que o LED está ajustado no momento!
Você pode tentar configurá-lo para qualquer um dos outros gatilhos, escrevendo este gatilho no LED (se você tiver direitos suficientes ):
echo "timer" > gatilho
Vai fazer o LED piscar.
Nota: se você listar o diretório de controle LED novamente, você verá entradas adicionais - nova funcionalidade que é exposta para o modo timer:
delay_off e delay_on
cat delay_off
rende 500. Estes são 500 milissegundos.
Você pode ajustar esses valores para fazer o LED piscar mais rápido, por exemplo:
echo "150" > delay_off
echo "150" > delay_on
Ou mais devagar...
echo "1500" > delay_on
echo "1500" > delay_off
Um par de gatilhos dignos de nota:
- nenhuma: não há actividade no LED
- mmc0: está ativo se o Flash / microSD estiver sendo acessado
- cpu: está activa com a actividade da CPU (é bom monitorizar o quão ocupada está a CPU, pois será um pouco mais fraca se houver menos actividade da CPU, graças efectivamente a uma espécie de PWM)
- Heartbeat: dará um padrão de piscada constante para mostrar que o Pi ainda está vivo e o kernel ainda está online e a fazer o seu trabalho.
Controlar o LED GPIO a partir do meu próprio código?
Para controlar os LEDs a partir do seu próprio código, usando as bibliotecas GPIO, defina o gatilho para "nenhum".
echo "nenhum" > gatilho
Você ainda pode ligá-lo e desligá-lo a partir da linha de comando, escrevendo com brilho (1 para ligá-lo, 0 para desligá-lo):
echo "1" > brilho
echo "0" > brilho
Agora você é capaz de controlar um LED a partir da linha de comando E você aprendeu algo sobre árvores de dispositivos e sobreposições de árvores de dispositivos, parabéns!