linux-kernel - latest - upgrade kernel linux
Arquitectura de reloj Linux (1)
En Linux, ¿cómo se implementa la arquitectura del reloj? Hay un archivo include/linux/clkdev.h
struct clk_lookup {
struct list_head node;
const char *dev_id;
const char *con_id;
struct clk *clk;
};
¿Cuáles son los diversos campos y se utiliza ampliamente en la arquitectura del reloj en arch/arm/Board***/...
?
La infraestructura del reloj genérico de Linux está documentada en clk.txt . Para ARM, Sasha Hauer creó recientemente el marco de reloj común (últimos dos años). Los relojes están estructurados en una relación padre / hijo . El SOC típico (sistema en chip) tiene relojes principales creados a partir de un cristal que se reducen (con un contador) o aumentan con un PLL y tal vez ambos. La jerarquía es importante para el ahorro de energía. Por lo general, los dispositivos solo usan uno de los relojes más bajos / más jóvenes del árbol. Cuando un dispositivo solicita un reloj, la infraestructura asegura que todos los padres estén iniciados.
Anteriormente (legado), los relojes se pasaban desde el archivo de la máquina ( arch/arm/Board***/
referencia arch/arm/Board***/
) al controlador / dispositivo a través de los datos de la plataforma; finalmente a través de platform_device_register()
. A veces, los relojes se derivan del nombre del dispositivo. Por ejemplo, el controlador fec podría usar fec-clk . Esto no funcionó bien para múltiples configuraciones de máquina , por lo que se introdujo el mecanismo de datos de la plataforma . Incluso maquinaria más nueva usa un dt (o tabla de dispositivos). Aquí, no hay archivos de máquina, solo una tabla de dispositivos que se pasa del cargador de arranque al kernel. En este caso, el dt le dice al conductor qué reloj usar.
Originalmente, dev_id
y con_id
debían relacionar relojes para un dispositivo y relojes conectados (padre / hijo). Por lo general, dev_id
o con_id
son NULL ya que solo se necesita un aspecto. Creo que esta visión fue encontrada deficiente; especialmente para comenzar una cadena de reloj completa. Entonces, dependiendo de la versión de Linux, la respuesta varía. Incluso en la fuente actual, algunas plataformas (como orion
) aún usan un mecanismo anterior. No creo que orion
admita árboles de dispositivo .
Las respuestas específicas dependerán de su versión de Linux y de la máquina (y posiblemente de la plataforma) en uso.
Vea también: clkdev.c , clk.c
Código abierto: hay muchas mutaciones. Todos ellos tienen un plan diferente.
Referencia: mensaje de Russell Kings en ARM clkdev , original no implicaba pedido.