Desarrollo de controladores vs acceso sysfs vs mmap para GPIO

Desarrollo de controladores vs acceso sysfs vs mmap para GPIO

Creo que no puedo comprender completamente los beneficios de escribir controladores de dispositivos en sistemas integrados para algunos dispositivos específicos, como GPIO, cuando existen formas alternativas de hacer el mismo trabajo.

  1. Puede acceder a los GPIO a través de sysfs y el árbol de dispositivos.

    • Escriba una nueva superposición de árbol de dispositivos y habilítela
    • Vaya a /sys/class/gpio
    • Exporte el pin requerido y comience a usarlo (a través de simples llamadas de shell o dentro de la aplicación c/c++)
  2. Escribe tu propio controlador.

    • Codificar las funcionalidades reales.
    • Exponga el controlador a un nodo (como /dev/tty) en el espacio de usuario.
    • Escriba otro código c/c++ para acceder al controlador (también se puede acceder a él mediante simples llamadas de shell)
    • Si necesita nuevas funcionalidades, primero cambie el controlador y luego el código. (¿Por qué?)
  3. Utilice directamente /dev/mem;

    • Incluya mman.h y use el objeto /dev/mem para configurar u obtener el estado de GPIO.

Entonces,

  • 1 -> quedará obsoleto y será lento. (Vale, absolutamente beneficioso para la creación rápida de prototipos)
  • 2 -> ¿Cómo es eso más rápido que 1? El primero también es otro controlador GPIO, ¿no?
  • 3 -> ¿No es la mejor y más rápida forma?

Hice varias preguntas arriba pero aquí está mi pregunta más importante; ¿Por qué no debería seguir directamente con la tercera solución?

Respuesta1

La ventaja de la opción 2 es que puedes validar la solicitud en un solo lugar. Digamos que, en el caso de un lavavajillas, puede asegurarse de que el sensor de la puerta indique que la puerta está cerrada antes de abrir el agua. Seguro que puedes decirle a la gente que verifique el bit de estado de la puerta antes de abrir el bit de agua, pero ¿lo harán todos?

Una posible desventaja de las opciones 1 y 3 son los permisos. Depende de qué tan sofisticado sea el dispositivo integrado, pero es posible que desee tener diferentes ID de usuario que hagan diferentes cosas; por ejemplo, un enrutador doméstico puede tener un uid diferente ejecutando un servidor http que realiza la interfaz de usuario web y un demonio diferente que opera los LED del panel frontal. Si bien es posible que los controladores gpio tengan un control de acceso detallado, la mayoría tiene un enfoque de todo o nada. Con la opción 2 puedes decidir qué usuarios pueden acceder a qué instalaciones a un nivel fino.

La desventaja de la opción 2 es que es más complicada y normalmente requiere código en el kernel.

información relacionada