Estoy buscando algunos indicadores para entender cómo el kernel de Linux implementa la configuración de varios relojes de hardware. Esto básicamente se relaciona con el trabajo de configuración de los diversos relojes que usarán las funciones de hardware como la LCD, UART, etc. Por ejemplo, cuando Linux arranca, ¿cómo maneja la configuración de los relojes para UART o USB? Tal vez algo así como un gerente de reloj o algo así.Implementación de señales de reloj de hardware en Linux Kernel
Básicamente estoy tratando de implementar algo similar para un sistema operativo diferente en un nuevo hardware en el que estoy trabajando. Cualquier ayuda sería realmente apreciada.
[Editar]
Gracias por las respuestas y los enlaces. Así que aquí está lo que he implementado hasta ahora. Esto debería darte una idea de hacia dónde me dirijo.
Busqué el Manual de referencia de hardware para el sistema particular al que estoy apuntando y escribí un código para supervisar/modificar las señales/pines de los periféricos que me interesan, es decir, activarlos/desactivarlos desde la línea de comandos. una colección de estos relojes/señales en conjunto controlan un periférico. El HRM diría que si desea encender el UART o algo así, encienda tal y tales señales/pines. Y @BjoernD sí, estoy usando algo así como una función mmap() para hablar con los periféricos.
Lo esencial de mi pregunta es que quiero entender el diseño y la implementación de un Administrador de reloj/periférico que utiliza la utilidad que ya he escrito. Este Clock/Peripheral Manager me daría el control de habilitar/deshabilitar los periféricos que quiero. Básicamente, este Manager me permitiría hacer cambios en el código de inicio que se está ejecutando en este momento. Además, durante el tiempo de ejecución, los procesos pueden llamar a este administrador para encender/apagar los dispositivos de modo que se optimice el consumo de energía. Puede que no tenga mucho sentido, pero yo mismo estoy tratando de entender esto.
Ahora estoy seguro de que algo como esto se habría implementado en Linux o para cualquier sistema operativo por cuestiones de rendimiento (nadie querría perder energía encendiendo todos los periféricos en el arranque). Quiero entender la arquitectura de software de la misma. La referencia de cualquier sistema operativo sería a partir de ahora para al menos obtener una ventaja. Además, no estoy escribiendo mi propio sistema operativo, hay un sistema operativo en su lugar, pero estoy buscando más en un software de nivel tablero aka BSP para trabajar. Pero de todos modos, gracias por el enlace al sistema operativo, son realmente buenos. Lo aprecio.
Gracias!
Así que lo que básicamente estoy tratando de hacer es tener algún tipo del sistema en el lugar para que pueda encender apropiadamente las señales/relojes requeridos para el h/w respectivo. –
Contd (la clave de retorno supuestamente pega el comentario) Así, por ejemplo, durante el arranque quizás solo se encienda UART, pero el resto quizás se apague para ahorrar energía. Más tarde, cuando el LCD necesite iniciarse puede enviar una solicitud a un administrador en ciertas señales (esto se conocería a partir de las especificaciones h/w). Por lo tanto, la utilidad tomará las medidas apropiadas al configurar los bits necesarios en el registro de control para LCD "HIGH". –
Estoy seguro de que esto se ha tratado de una manera organizada en el kernel de Linux, es solo que no sé dónde buscar. –