Estoy trabajando en este momento en un proyecto que, entre otras cosas, controla los ventiladores de la computadora. Básicamente, los ventiladores están controlados por el chip superIO de su computadora. Accedemos al chip directamente usando IO mapeado por puerto, y desde allí podemos acceder al dispositivo de ventilador lógico. El uso de port-mapped IO requiere que el código se ejecute en modo kernel, pero windows no proporciona ningún controlador para el puerto genérico IO (con buenas razones, ya que es una herramienta muy poderosa), así que escribimos nuestro propio controlador y lo usamos.
Si desea seguir este camino, básicamente necesita conocimientos en dos áreas: desarrollo de controladores y cómo acceder e interpretar la información del chip superIO. Cuando comenzamos el proyecto, no sabíamos nada en ninguna de estas áreas, por lo que ha estado aprendiendo navegando, leyendo y finalmente haciendo. Para obtener el conocimiento, nos ha ayudado especialmente al mirar estos enlaces:
- El WDK, que es el Kit de controladores de Windows. Necesita esto para compilar cualquier controlador que escriba para Windows, con esto viene una gran cantidad de código fuente, por ejemplo, controladores, incluido un controlador para IO general mapeado en puerto, llamado portio.
- WinIO tiene un código fuente para un controlador en C, un dll en C que instala y carga programáticamente ese controlador, y algún código C# para una GUI, que carga el dll y lee/escribe en los puertos. El controlador es muy similar al de portio.
- lm-sensors es un proyecto de Linux que, entre otras cosas, detecta su chip superIO./prog/detect/sensors-detect es el programa perl, que hace la detección, y hemos pasado un tiempo revisando el código para ver cómo interactuar con un chip superIO.
- Cuando estábamos revisando el código lm-sensors, era muy bueno tener herramientas como RapidDriver y RW-everything, ya que nos permitían simular una carrera de detección de sensores.Este último es el más poderoso y es muy útil para visualizar el espacio IO, mientras que el primero proporciona un acceso más fácil a algunas operaciones que se correlacionan mejor con las detecciones de sensores (leer/escribir bytes en el puerto)
- Finalmente, usted Necesito encontrar la hoja de datos de tu chip superIO. A partir de los ejemplos que he visto, los controladores de entorno de cada chip proporcionan una funcionalidad similar (velocidad del ventilador r/w, temperatura de lectura, voltaje del chip de lectura), pero varían en qué registros debe escribir para obtener esta funcionalidad . This lugar ha tenido todas las hojas de datos, que hemos necesitado hasta ahora.
¿Dónde entra ACPI en acción aquí? Teóricamente, uno podría parchear el DSDT, compilar con el compilador ASL, cargar la tabla parcheada, y luego la velocidad del ventilador sería controlada por esa lógica parcheada. Otra opción es usar nhc.exe, que tiene un modelo de complemento, algo así como, que permite a un desarrollador escribir código para controlar los objetos administrados por ACPI. – Cheeso