en Linux
sistema operativo, cargar el controlador se divide en dos: el usuario para cargar automáticamente y cargar el arranque del kernel manualmente; hardware puede ser añadido al sistema utilizado de dos maneras: se inicia el sistema hot swap frontal y el sistema se está ejecutando. A continuación, AT91 procesador bajo el controlador I2C arquitectura ARM, por ejemplo, nos dicen acerca de cómo el hardware y los controladores asociados son vinculantes y desagregación.
1. Registro etapa de conducción proceso
1.1 at91_i2c_init () la función
en el fichero drivers /I2C /autobuses /I2C-at91.c, definir una estructura struct platform_driver e inicializado,) a través del uso de macros declarada module_init (cuando se carga el módulo en el kernel llama at91_i2c_init () función. En esta función, llamamos a la función platform_driver_register () para completar el registro.
estática at91_i2c_driver struct platform_driver = {
.probe = at91_i2c_probe,
.Remove = __devexit_p (at91_i2c_remove), Francia
. suspender = at91_i2c_suspend,
.resume = at91_i2c_resume,
.driver = {
.name = " at91_i2c ",
.owner = THIS_MODULE,
}, España
};
static int __init at91_i2c_init (void)
{
platform_driver_register retorno (&at91_i2c_driver);
}
función
en el fichero drivers /base /platform.c, función
1,2 platform_driver_register () la realización y platform_driver_register derivado (), por lo que la función de los otros módulos puede llamar a esta función. Después de terminar en un paquete simple, llamada función driver_register (), completó la transición de la plataforma para lograr la implementación del núcleo de Linux.
A continuación, tenemos que mirar al () y la función platform_drv_probe () platform_match. platform_match () función determina la unidad asociada con el dispositivo, y la función platform_drv_probe () es llamado en una presentación posterior de la función.
//unidad comparativo tanto el nombre como la información del nombre de la información del dispositivo es consistente
int platform_match estática (struct device * dev, struct device_driver * DRV)
{
struct platform_device * pdev = container_of (dev, struct platform_device, dev);
retorno (strncmp (pdev- > nombre, DRV- > nombre, BUS_ID_SIZE) == 0);
}
struct tipoDeBus platform_bus_type = {
.name = " plataforma ", España
.dev_attrs = platform_dev_attrs,
.match = platform_match,
.uevent = platform_uevent,
.suspend = platform_suspend,
.suspend_late = platform_suspend_late,
.resume_early = platform_resume_early,
.resume = platform_resume, España
};
EXPORT_SYMBOL_GPL (platform_bus_type);
/**
* platform_driver_register
* @drv: estructura controlador plataforma
* /
int platform_driver_register (struct platform_driver * DRV)
{
DRV- > driver.bus = &platform_bus_type;
//función en really_probe Platform_drv_probe función de devolución de llamada
si (DRV- > sonda)
DRV- > driver.probe = platform_drv_probe;
si (DRV- > quitar)
DRV- > driver.remove = platform_drv_remove;
si (DRV- > apagado)
DRV- > driver.shutdown = platform_drv_shutdown;
si (DRV- > suspender)
DRV- > driver.suspend = platform_drv_suspend;
si (DRV- > reanudar)
DRV- > conductor. reanudar = platform_drv_resume;
retorno driver_register (&DRV- > conductor);
}
EXPORT_SYMBOL_GPL (platform_driver_register);
1.3 driver_register () la función
en el fichero drivers /base /driver.c se logran driver_register) función (. En esta función, la inicialización del campo device_driver klist_device estructura struct y descargada a través del campo klist_device, el dispositivo puede guardar la lista conductor soportado por y " completa y " mecanismo de interfaz, la sincronización completa entre los hilos. Cadena y y " completa y " detalles de la interfaz puede hacer referencia a [1]. Volver bus_add_driver () la función de los resultados operativos.
/**
* driver_register - registro conductor del autobús
* @drv: controlador para registrar
*
* Se pasa la mayor parte de la obra a la llamada bus_add_driver (), Francia
* ya que la mayoría de las cosas que tenemos que hacer trato con el bus
* estructuras.
*
* el único aspecto interesante es que la configuración @ DRV- > sin carga
* como una conclusión de que se completa cuando la referencia piloto
* recuento llega a 0.
* /
int driver_register (struct device_driver * drv)
{
if ((DRV- > bus- > sonda &&DRV- > sonda)
6. Sfdisk y ndash; copia de seguridad tabla de particiones Si instala varios sistemas, puede lleva
Este período win8.1 Mac OS X 10.9 Mavericks Los dos sistemas operativos se lanzan casi simultáneam
Primero, lo que es haproxyHAProxy proporciona alta disponibilidad, equilibrio de carga y agentes ba
Es bastante incómodo agregar y eliminar programas en Linux. La instalación del software puede descri
Uso gratuito de la documentación de Windows en el escritorio de Linux
La comprensión correcta del uso de la memoria de Linux es demasiado alta
Método de configuración de tiempo en el sistema operativo Linux
Linux telnet service open step
Linux centos apagar y reiniciar comando detallado y combate real
Análisis detallado del problema de seguridad del archivo de contraseña del sistema operativo Linux
Linux hwclock muestra y configura el comando de reloj de hardware detallado
Adición y eliminación de programas a través de software de terceros en Linux
Win7 la búsqueda de carpetas no se puede usar normalmente. Método de procesamiento
Win10 sistema u disco no se puede formatear cómo hacerlo? El formato de disco de
¿Cómo puede el sistema Win7 Win8.1 actualizar permanentemente el sistema Win10 de forma gratuita?
Ejemplo de método de compartir para recuperar la conexión local desaparecido por el sistema XP
Cómo ventanas compartidas con el archivo de la máquina virtual Linux
Cómo sincronizar la página web "WP9" con Win8.1 IE11
El tutorial del sistema le brinda la velocidad de XP
Cómo agregar una barra de direcciones en la barra de tareas de Windows 7
Win10 barra lateral no puede abrir la solución
Optimice su propio sistema informático 8 formas de perder peso (1)