GNU/Linux >> Tutoriales Linux >  >> Linux

Dificultad para comprender el uso de MODULE_DEVICE_TABLE (usb, id_table)

Por lo general, se usa para admitir la conexión en caliente, cargando/insertando el controlador para un dispositivo si aún no está cargado.

Aquí hay una pregunta similar:Detectar la presencia de un dispositivo cuando está conectado en caliente en Linux

(De mi respuesta)

Funciona de la siguiente manera:

  1. Cada controlador en el código expone su ID de proveedor/dispositivo usando:

      MODULE_DEVICE_TABLE(of, omap_mcspi_of_match);
    
  2. En el momento de la compilación, el proceso de compilación extrae esta información de todos los controladores y prepara una tabla de dispositivos.

  3. Cuando inserta el dispositivo, el kernel hace referencia a la tabla de dispositivos y si se encuentra una entrada que coincida con el dispositivo/ID del proveedor del dispositivo agregado, entonces su módulo se carga e inicializa.


Según los controladores de dispositivos Linux:

  1. MODULE_DEVICE_TABLE se utiliza para generar archivos de mapas por depmod programa;
  2. Cuando el dispositivo se conecta en caliente, el controlador del bus genera un evento de conexión en caliente. Llamadas del núcleo /sbin/hotplug con las variables ambientales apropiadas establecidas;
  3. Dados archivos de mapas e información del entorno, /sbin/hotplug decide qué módulo cargar y realmente lo carga. Si el módulo ya está cargado, está bien.

Debo mencionar nuevamente que este mecanismo solo garantiza que el módulo necesario esté en su lugar cuando el dispositivo está conectado. Eso no vincula el módulo con ese dispositivo ni con nada más. Solo carga el módulo.

Para verificar si el controlador está bien para un dispositivo específico, match() función de bus_type se utiliza.


Así es como entiendo las cosas [compatible con Xbuntu 14.04].

Una vez que escribimos un módulo, podemos cargarlo manualmente o automáticamente.

  • Manualmente -> insmod nombredelmódulo.ko o modprob nombredelmódulo.ko
  • Automáticamente-> Hay varias formas.

    1. copiar a /lib/modules/`uname -r`/kernel/modulename.ko y actualice /etc/modules . El sistema cargará el módulo durante el arranque.

    2. Escriba un script/comando para cargar el módulo.ko para un hardware específico add /change /remove evento en un udev regla /etc/udev/rules.d/10-local.rules . Puede cargar/descargar usando este método.

    3. Codifique su módulo con MODULE_DEVICE_TABLE registro. Luego cargue su modulename.ko una vez y ejecute depmod comando [sudo depmod -a ] para agregar el nuevo módulo a /lib/modules/3.16.0-34-generic/modules.alias /lib/modules/3.16.0-34-generic/modules.dep archivos Como sé, el sistema se cargará solo si el módulo no está cargado.

Puede monitorear la carga/descarga del módulo usando eventos udev usando:

monitor udevadm

comando.


Linux
  1. Descripción de la persistencia del dispositivo y Oracle ASMLib

  2. Comprender las marcas de tiempo de los archivos de Mac

  3. configurar dispositivo para desarrollo (???????????? sin permisos)

  4. Cambios en los parámetros del módulo del kernel (usando /sys/module)

  5. Obtener el consumo de energía de un dispositivo USB

Cómo encontrar el uso de ancho de banda del dispositivo USB en Linux

Timekpr:controle el uso informático de las cuentas de usuario

Controle el uso de RAM y CPU por Kodi en tiempo real

Entendiendo el comando time en Linux

Comprensión de los perfiles optimizados recomendados por RedHat

¿En qué se parecen el tiempo de CPU y el uso de CPU?