visto recientemente el modelo de controlador de dispositivo Linux, en kobject, KSET por lo que no es misión muy clara. Cuando vea una estructura device_driver esta estructura, pensar en una pregunta: ¿Dónde está su función de inicialización llaman? Cuando la función de registro ante la unidad para activar el PCI PCI conducción puede llamarlo, cuando se conduce S3C2410 struct largos enganchen a la platform_device mach-smdk2410.c * smdk2410_devices dispositivo añadido es también llamado {}. Pero nunca pensé en el proceso de registro del controlador específico y exige una profunda investigación.
a continuación, abra el seguimiento de SourceInsight bits:
driver_register de mira: int driver_register (struct device_driver * DRV) {klist_init (&DRV- > klist_devices, klist_devices_get, klist_devices_put); init_completion ( &DRV- > sin carga); bus_add_driver retorno (DRV);} init_completion klist_init y no ir solos, algunos de los trabajos puede ser de 2,6 a hacer este modelo de dispositivo. La intuición me dice que vaya bus_add_driver.
bus_add_driver en: kobject son más y klist, attr y así sucesivamente. O relacionados con el modelo del dispositivo. Pero hay una: driver_attach (DRV); solo escuchar el nombre como: driver_attach vacío (struct device_driver * DRV) {bus_for_each_dev (DRV- > bus, NULL, DRV, __driver_attach);} Este familiares dispositivos transversales en el autobús y establecer con __driver_attach. En __driver_attach son principalmente en esto: driver_probe_device (DRV, dev); driver_probe_device fue a ir a ver: hay una muy importante :! Si (DRV- > bus- > & coincidir; &DRV- > bus - > partido (dev, DRV)) Goto Hecho; obviamente, la función de concordancia se pidió a un conductor de autobús. Si devuelve 1, se puede continuar, hecho de otra manera para arriba. palabras de ejecución hereda: si (DRV- > sonda) {ret = DRV- > sonda (dev), si (r) {dev- > driver = NULL; Goto ProbeFailed;} se llama siempre que la presencia de la sonda. Con esto se completa la llamada de la sonda.
La cadena proceso clave o en DRV- > bus- > partido, ya que el resto del lugar es malo, entonces el registro falla, pero no fallan, siempre y cuando el registro y devolver un partido, qucheng entonces definitivamente se llama de la sonda. Usted puede inscribirse para un tipo de bus y bus, y siempre volver partido 1, se encuentra, siempre y cuando la estructura tipo de bus device_driver correcta, la función de la sonda siempre se llama dispositivo de .PCI tiene su propio modelo de autobús, que se estima en su hay una coincidencia en la condición de determinación. static int pci_bus_match (dispositivo struct * dev, struct device_driver * drv) {struct pci_dev * pci_dev = to_pci_dev (dev); struct pci_driver * pci_drv = to_pci_driver (drv); const struct pci_device_id * found_id; found_id = pci_match_device (pci_drv, pci_dev); si (found_id) return 1; return 0;} y luego rastrear sabe se basa principalmente en familiarizados id_table venir. Otra solución ------------------------------- ----------------- -------------------------------------------------- ----------------------------
ve desde driver_register, aquí estoy aquí está:
int driver_register (struct device_driver * DRV) {if ((DRV- > > autobús-; sonda &&DRV- > sonda) |
|
(DRV- > bus- > & eliminan; &DRV- > quitar) |
|
(DRV- > bus- > apagado &&DRV- > apagado)) {printk (KERN_WARNING " controlador '% s' necesita una reforma - por favor utilice métodos tipoDeBus \\ n ", DRV- > nombre); klist_init} (&DRV- > klist_devices, null, null); bus_add_driver retorno (DRV);} klist_init irrelevante, no es él, para ir en particular bus_add_driver:
int bus_add_driver (struct device_driver * drv .) {//una primera kobject_set_name (&DRV- > kobj, "% s ", DRV- > nombre);. //2 más kobject_register (&DRV- > kobj) //3 a continuación. llamar: driver_attach (DRV)} int driver_attach (struct device_driver * DRV) {bus_for_each_dev retorno (DRV- > bus, NULL, DRV, __driver_attach);} function es real __driver_attach:
static int __driver_attach (struct dispositivo dev *, void * data) {... si (dev- >! conductor) driver_probe_device (DRV, dev); ...} int driver_probe_device (struct device_driver * drv, struct device * dev) {. . ..//1 primer bus determina si partido: if (! DRV- > bus- > & partido; &DRV- > > autobús-; partido (dev, DRV)) Goto hecho; //2. de nuevo con La sonda banco de ejecución: ret = really_probe (dev, DRV); ...} es una función really_probe que estamos buscando:
static int really_probe (struct dispositivo dev *, * estructura device_driver DRV) {... función de conducción de autobuses //1 sonda pertenece llama primero :. si (dev- > bus- > sonda) {ret = dev- > bus- > sonda (dev); si (RET) Goto probe_failed;} else if (DRV- > sonda) {//2 y luego llamar a la función de sonda de conducir:. ret = DRV- > sonda (dev), si (r) Goto probe_failed;} ...} en donde, drv - > sonda (dev), es la función sonda específica vocación real de la unidad de alcanzar. Es decir, el correspondiente título de este artículo están pidiendo, la función de la sonda en este momento se llama.
partición del disco en Linux, formateo del sistema de archivos y dispositivo raid - comparando el fo
1. Bloquee la cuenta de creación propia redundante en el sistema Método de verificación: Ejecu
Linux y BSD son sistemas libres, de código abierto, similares a Unix. Incluso usan mucho del mismo
CentOS (Community Enterprise Operating System) es un sistema operativo de código abierto. Es casi
Utilice ntop para solucionar de manera eficiente los problemas de red de Linux
Linux Cómo prohibir que root use ssh para iniciar sesión y modificar ssh port
Tutorial de reinicio de comando de reinicio de Linux
Diseño y aplicación del sistema Linux incorporado
Análisis de puntos clave de la tecnología de clúster del sistema Linux
Instalación y desinstalación de software bajo Linux
Top Ten Tips Linux Fast Starts comienza lo más rápido posible
Tutorial de configuración de instalación de Sarg
El comando de monitoreo en tiempo real de la CPU de Linux mpstat presenta
Win10 Windows Defender no puede abrir el indicador. No se puede iniciar.
Cómo utilizar IIS con el sistema Windows 10 para crear un servidor ftp
¿Cuál es la función de F1 a F12 en el teclado de la computadora?
Comprender qué archivos especiales están en el sistema Windows XP
Verifique que el sistema Win7 no sea una habilidad genuina
Tres consejos para una administración eficiente de los servidores Windows
Samsung abrirá el sistema Bada el próximo año para reducir la dependencia de Android
La aplicación de solicitud de Win10 no puede ejecutarse en la computadora