Acredito que não consegui entender completamente os benefícios de escrever drivers de dispositivo em sistemas embarcados para alguns dispositivos específicos, como GPIO, quando há formas alternativas de fazer o mesmo trabalho.
Você pode acessar os GPIOs via sysfs e árvore de dispositivos.
- Escreva uma nova sobreposição de árvore de dispositivos e ative-a
- Vá para o /sys/class/gpio
- Exporte o pino necessário e comece a usá-lo (por meio de chamadas simples de shell ou dentro do aplicativo c/c++)
Escreva seu próprio driver.
- Codifique as funcionalidades reais.
- Exponha o driver a um nó (como /dev/tty) no espaço do usuário.
- Escreva outro código c/c++ para acessar o driver (também pode ser acessado por meio de chamadas simples de shell)
- Se você precisar de novas funcionalidades, primeiro altere o driver e depois o seu código. (Por que?)
Use diretamente /dev/mem;
- Inclua mman.he use o objeto /dev/mem para definir ou obter o status do GPIO.
Então,
- 1 -> será obsoleto e lento. (Ok, absolutamente benéfico para prototipagem rápida)
- 2 -> Como isso é mais rápido que 1? O primeiro também é outro driver GPIO, não é?
- 3 -> Não é o melhor e mais rápido caminho?
Fiz várias perguntas acima, mas aqui está a minha maior dúvida; por que não devo ir direto com a 3ª solução?
A vantagem da opção 2 é que você pode validar a solicitação em um único local. Digamos que, para uma máquina de lavar louça, você possa garantir que o sensor da porta diga que a porta está fechada antes de ligar a água. Claro que você pode dizer às pessoas para verificar o bit de status da porta antes de colocar a água no bit, mas todos eles farão isso?
Uma desvantagem potencial das opções 1 e 3 são as permissões. Depende de quão sofisticado é o dispositivo embutido, mas você pode querer ter diferentes ids de usuário fazendo coisas diferentes, por exemplo, um roteador doméstico pode ter um uid diferente executando um servidor http fazendo a interface do usuário da web e um daemon diferente operando os LEDs do painel frontal. Embora seja possível que os drivers gpio tenham controle de acesso refinado, a maioria tem uma abordagem de tudo ou nada. Com a opção 2, você pode decidir quais usuários podem acessar quais instalações em um nível fino.
A desvantagem da opção 2 é que ela é mais complicada e geralmente requer código no kernel.