Leer o configurar registros en la placa base

1

Con los microcontroladores es bastante fácil encender / apagar un LED escribiendo en un registro.

Esta pregunta es, en cambio, un intento de escribir en un registro de dispositivo PCI en una computadora de escritorio.

De manera similar, me gustaría leer / escribir los registros en la placa base para controlar los ventiladores (encendido, apagado o incluso la velocidad) o los LED de alimentación o disco duro, o los sensores de temperatura.

Dado, por ejemplo, una placa base Asus y un sistema operativo Linux, ¿es posible? ¿Y qué tipo de hoja de datos se debe leer, si existe, para obtener los nombres de registro en la placa base? Nunca encontré para una placa base de consumo algo como la hoja de datos de un microcontrolador.

    
pregunta BowPark

2 respuestas

2

La documentación sin duda existe. No siempre disponible gratuitamente, pero existe.

Siempre hay un código fuente de linux y bsd que también puede leer si son compatibles con estos periféricos, ya está (sí, sé que no siempre es una lectura fácil).

Si ya existe un controlador de dispositivo para este periférico, aprenda cómo comunicarse con ese controlador de dispositivo. lm-sensores como comentó pjc50 es un ejemplo.

Si no es así, a menudo puede perforar la protección del sistema operativo con mmap () y desde la aplicación hablar directamente con las cosas. Dependiendo de lo que esté tratando de hacer (equipo de prueba de la placa madre, equipo de prueba de la tarjeta pcie, etc.) puede ser suficiente. La forma correcta de hacerlo es modificar o escribir un controlador de kernel y hablar con / a través de él para llegar al periférico, puede ser un controlador tan delgado o grueso como desee, pero al menos la última milla de escrituras / lecturas proviene de kernel espacio no de aplicación.

Note DOS aún se usa para la placa base y otras pruebas, siendo uno de los mejores sistemas operativos de metal (oxímoron intencional), y si está trabajando estrechamente con una compañía de placa base, pueden proporcionar la fuente o los fragmentos de código de sus programas de prueba. que parpadea leds o lee el sensor de temperatura, etc.

Sí, la documentación de la placa base, incluso si tiene acceso, no es lo mismo que un microcontrolador, la audiencia es diferente, a menudo son solo los programadores de biografías (contratistas) y las personas de prueba internas que necesitan la documentación, y es así como podría Ser garabatos en una pizarra.

Al ser una PC, lo que necesita un sistema operativo se define por convención o descubrimiento, por lo que no necesita documentación, simplemente busca cosas y encuentra lo que está presente mediante programación. Según sea necesario, en función de lo que encuentre, vaya a ese sitio específico de proveedores de chips para obtener la hoja de datos (que se lee como un microcontrolador) para esa parte. Un chip pcie bridge de Intel, justo allí en el sitio web de intels. Un puente usb o master, mismo trato. Tarjeta de video, bueno, puede que no sean tan abiertas. Controlador de disco duro, encuentra la hoja de datos. Ethernet, busque la hoja de datos y léala. lspci es tu amigo lsusb es tu amigo Google es tu amigo.

    
respondido por el old_timer
1

Escritura de código para Linux es muy diferente a escribir código para un microcontrolador . En un sistema operativo moderno, realiza llamadas a través del sistema operativo, a un controlador, que luego habla con un hardware específico, no haciendo todo esto directamente.

Un pequeño microcontrolador puede tener una hoja de datos de 600 páginas ... las hojas de datos no están hechas sobre una computadora completa porque serían diez mil páginas o más, y serían diferentes para cada cambio de hardware. Además, algunos IC utilizados en el interior, como la GPU, contienen propiedad intelectual , lo que significa que el proveedor no quiere compartir cómo funciona. Ellos crean los controladores. Pero con el tiempo, muchas de las funciones básicas de la computadora se han estandarizado en ciertas direcciones, como que COM1 es 0x3F8 y LPT1 es 0x3BC. (UEFI es otra historia.) En Linux, intente estos para encontrar direcciones de dispositivos. Tenga en cuenta que la BIOS de la computadora establece muchas de estas direcciones, pero los sistemas operativos modernos no tienen que usar la BIOS en absoluto .

La única forma en que una computadora y un microcontrolador son remotamente comparables es en el nivel de lenguaje de ensamblador . E incluso entonces hay muchas diferencias entre ellos, pero al menos comparten registros físicos, direcciones de E / S e instrucciones. Para Linux, la programación en ensamblador probablemente se haría usando NASM . La búsqueda en la web aparece mucho, como Acceso directo a la tarjeta de sonido en NASM (no OS) . Incluso un sistema operativo completo ( MenuetOS ) se ha escrito en ensamblador, sin embargo, utiliza una sintaxis ligeramente diferente (FASM). Aún así, puede ser interesante ver cómo están accediendo a las cosas, solo por curiosidad. Para usuarios de MS Windows, consulte MASM32 y GoASM .

El ensamblador todavía se puede utilizar para todo, desde la programación de aplicaciones hasta el desarrollo del sistema operativo, pero está bastante anticuado. Espere una curva de aprendizaje muy pronunciada si elige el ensamblador ... no porque el ensamblador sea inherentemente difícil, sino porque probablemente quiera utilizar un sistema operativo, y eso agrega una gran cantidad de ambigüedad y complicación al ensamblador. Del mismo modo, el desarrollador de MenuetOS ha estado trabajando en su sistema operativo desde 2005. C y otros lenguajes de nivel superior ocultan gran parte de esta complejidad, por lo que la mayoría de las personas encuentran esto preferible.

Pero parece que lo que quieres hacer es escribir un controlador. Los controladores pueden acceder al hardware. Se puede encontrar mucha información buscando cómo + hacer + escribir + controlador + Linux como this , pero lo que probablemente desee es más como Escribir controladores de dispositivos en Linux . Que es demasiado largo para colocar aquí. Basta con decirlo, un buen (moderno) libro sobre escribir controladores de dispositivo en Linux sería su mejor apuesta.

    
respondido por el rdtsc

Lea otras preguntas en las etiquetas