Dispositivo modelo bus, driver, tutorial básico del dispositivo

  
 

Kobject, kset es la estructura básica del modelo de dispositivo. El modelo de dispositivo utiliza estas dos estructuras para completar la relación jerárquica del dispositivo. Sin embargo, en la escritura del controlador del dispositivo real, básicamente no utilizamos kobject, kset estas estructuras. Debido a que estas estructuras están integradas en estructuras más grandes, porque las estructuras kobject y kset solo pueden representar la relación jerárquica de los dispositivos, pero la conducción de un dispositivo no es una simple relación jerárquica. Kobject, la estructura de kset debe integrarse en una estructura más grande, kobject, kset se usa para representar la relación jerárquica, y otros miembros se usan para representar las funciones específicas del controlador del dispositivo.

En el modelo de dispositivo, veremos que el controlador del dispositivo se compone principalmente de tres partes: bus, controlador y dispositivo. A través de estos tres componentes estándar, todo tipo de dispositivos complicados se vuelven a alcanzar. El propósito de simplificar la escritura del controlador del dispositivo, es decir, el controlador del dispositivo que escribimos, es en realidad solo una pequeña parte de estas tres partes.


El controlador de dispositivo que escribimos debe ser un controlador que pertenezca primero a un bus, como el bus USB, o pertenezca al bus PCI, o pertenezca al bus I2C, etc., porque hemos escrito Controlador del dispositivo: cuando se registra e instala en el sistema, el sistema primero verificará a qué bus pertenece (se definió el controlador del dispositivo cuando se escribió) y agregará el controlador al kset del bus correspondiente, es decir, el objeto del controlador de dispositivo actual. Unir el kset del bus correspondiente para formar una asociación jerárquica. Cuando el sistema detecta que existe un dispositivo (hardware), también determina primero a qué bus pertenece el dispositivo (conexión de hardware), luego atraviesa todos los controladores de dispositivo bajo el bus actual y encuentra si hay un controlador de dispositivo a través de la función de sonda del propio bus. La coincidencia de programas puede controlar el dispositivo actual (generalmente obteniendo el PID, VID del dispositivo, comparado con el PID, VID del controlador para ver si coincide), si hay un controlador para conducir el dispositivo, entonces el dispositivo actual también se agrega a En el kset del bus, si no hay un controlador para el dispositivo manejable, solo puede existir en la lista de dispositivos del bus, y si el dispositivo no puede coincidir a través del bus, no hay manera de existir en la lista de dispositivos del bus. Como un bus administra todos los controladores en el bus y los dispositivos en el bus, necesita separar todos los dispositivos y todos los controladores, y configurar un kset de dispositivo y un kset de controlador de dispositivo para administrar todos los dispositivos. Y el controlador de dispositivo, entonces, el bus kset en realidad contiene dos ksets (dispositivo kset, controlador de dispositivo kset), el dispositivo kset contiene todos los kops del dispositivo de bus actual, el controlador de dispositivo kset contiene todos los dispositivos del bus actual El kobject se activa y todos los buses forman el kset del bus, que se reduce a formar la relación jerárquica de la siguiente figura:
bus-dirver-device

Cada dispositivo está conectado a diferentes En el bus, cuando el dispositivo está conectado al bus correspondiente, se determina el tipo de bus correspondiente, y cuando el dispositivo está conectado al bus, el bus primero escanea el dispositivo para ver si el dispositivo es adecuado para el bus. Si es apropiado, entonces escanee la lista de controladores del dispositivo en todo el bus para averiguar si hay un controlador que pueda administrar el dispositivo. Si lo encuentra, entonces se termina el dispositivo. El miembro del puntero correspondiente en el cuerpo apunta al controlador correspondiente. Si el controlador del dispositivo correspondiente no se encuentra temporalmente, el puntero del controlador en la estructura del dispositivo está temporalmente vacío, lo que indica que aún no hay controlador del dispositivo y también está en la cola de dispositivos del bus. En espera: si el dispositivo no puede pasar la verificación de bus, no aparecerá en la lista de dispositivos de bus, naturalmente no escaneará la lista de controladores de dispositivo para encontrar el controlador correspondiente.

Y cada controlador de dispositivo se instala en el bus correspondiente, ya sea una instalación manual o automática. La llamada instalación consiste en montar el controlador en la lista de controladores del bus correspondiente. El montaje en la lista de controladores de bus correspondiente, en primer lugar para cumplir con los requisitos de coincidencia de bus, solo adecuado para los requisitos, se puede montar en la lista de controladores de bus, y solo cuando se alcanza este paso, el sistema escaneará toda la lista de dispositivos de bus para encontrar ¿Hay algún dispositivo que necesite administrar este controlador? Si se encuentra el dispositivo, la lista de administración del dispositivo en el controlador registrará la dirección del dispositivo para lograr el propósito de administrar el dispositivo.

Después de insertar el dispositivo anterior, o de instalar el controlador, solo aparecerá el dispositivo en el sistema y no habrá controlador de dispositivo. Solo estarán presentes el controlador de dispositivo y el dispositivo correspondiente. En este momento, El dispositivo o el controlador del dispositivo esperarán temporalmente en su propia cola. Una vez que se instala un controlador o se inserta un nuevo dispositivo, escaneará automáticamente la lista vinculada correspondiente para detectar la posibilidad de emparejamiento.

Para combinar las tres relaciones anteriores, como se muestra en la figura:
bus-dirver-device

Tipo de bus de modelo de dispositivo Linux - bus_typebus_type

Estructura de datos relacionada:
Cada tipo de bus admitido por el núcleo está representado por un objeto de tipo bus. Un subsistema-subsistema está incrustado en bus_type. El subsistema bus_subsys en el sistema agrega los subsistemas en todos los tipos de bus juntos. Bus_subsys corresponde al directorio /sys /bus en sysfs.

Además, hay dos objetos kset incrustados en bus_type: dispositivos y controladores. Representa el dispositivo y el conductor en el bus.



Las funciones bus_for_each_dev () y bus_for_each_drv () se utilizan para recorrer todos los elementos en la lista de dispositivos y controladores en el bus, respectivamente.

Copyright © Conocimiento de Windows All Rights Reserved