aperturas del núcleo cuando el respectivo trabajo do_basic_setup archivo de inicialización del controlador en init /main.c de la función () para hacer .static anular __init do_basic_setup (void) {/* Los conductores enviar eventos de conexión en caliente * /init_workqueues (); usermodehelper_init (); driver_init ();
#ifdef CONFIG_SYSCTLsysctl_init (); #endif
/* inicialización de una red necesita un contexto de proceso * /sock_init ();
(do_initcalls );} donde driver_init () para hacer un poco de inicialización del núcleo, inicializar vistazo al código entenderán los controladores adecuados hacen do_initcalls __init vacío .static (void) {* initcall_t llamada () en do_initcalls;. int cuenta = preempt_count ();
para (llame = __initcall_start; llamar < __initcall_end; llamar ++) {char * msg;
si (initcall_debug) {printk (KERN_DEBUG " Calling initcall 0x% p ", * llamada); print_fn_descriptor_symbol (":% s () ", (unsigned long) * llamada); printk (" \\ n ");}
(* llamada) ();
msg = NULL; if (! preempt_count () = recuento) {mensaje = " " desequilibrio de preferencia;; preempt_count () = count;} if ( irqs_disabled ()) {msg = " interrupciones deshabilitadas "; local_irq_enable ();} if (msg) {printk (KERN_WARNING " error en initcall en 0x% p: " " volvieron con% s \\ n ", * llamada , msg);}}
/* Asegúrese de que no hay cosas pendientes de la initcall secuencia * /flush_scheduled_work ();} este es el arco archivo __initcall_start /xxx /kernel /vmlinux.lds.S ( donde xxx es el nombre de su arquitectura, por ejemplo i386), este archivo se utiliza por el núcleo cuando ld que define los diferentes sectioin, para ver de entender. En este documento hay un .initcall.init, código es el siguiente :. __ = initcall_start; initcall.init: .. {* (Initcall1.init.) * (Initcall2.init.) * (Initcall3.init.) * (Initcall4. init) * (. initcall5.init) * (. initcall6.init) * (. initcall7.init)}
hay siete prioridad inicializado, el núcleo de acuerdo con este orden de prioridad de carga. estas prioridades se definen en el archivo include /linux /init.h se presta atención a la realización de la macro __define_initcall entender el código en cuestión es la siguiente: ..
#define __define_initcall (nivel, fn) \\ initcall_t estática __initcall _ ## fn __attribute_used__ \\ __ atributo __ ((__ sección __ (" .initcall " nivel de " .init "))) = fn
#define core_initcall (fn) __define_initcall (" 1 ", fn) #define postcore_initcall (fn) __define_initcall (" 2 ", fn) #define arch_initcall (fn) __define_initcall (" 3 ", fn) #define subsys_initcall (fn) __define_initcall (" 4 ", fn) #define fs_initcall (fn) __define_initcall (" 5 ", fn) #define device_initcall (fn) __define_initcall (y quot; quot;, 6 y fn) #define late_initcall (fn) __define_initcall (" quot;, 7 y fn)
Podemos ver, controladores de dispositivos, escribimos a menudo en module_init común, de hecho, corresponde a la prioridad 6: #define __initcall (fn) device_initcall (fn)
#define module_init (x) __initcall (x);
____________
pero ¿cómo me siento a su pregunta no se debe a la secuencia de carga causado? supongo. también escribí pantalla táctil impulsado, me siento un poco más serio con una pantalla táctil, y también es útil en I2C. usted debe sellar estas estructuras se forman en su coche para ir, una estructura input_dev, una es serio (o con un i2c_driver), y luego para controlar el orden de carga .module_init deberá estar inscripto i2c_driver, input_dev entonces registrada en attach_adapter tiempo.
hoy en un intento por hacer que el tiempo para usar con otra API unidad (I2C) proporcionada por un problema de dependencia encontrado durante la inicialización del núcleo.
Me haría subir y en funcionamiento antes de la inicialización I2C, y luego API I2C también se proporciona en un estado inutilizable. Disponibilidad de una gran cantidad de información, la Internet estaba empezando a decir que todo este orden usando macros conductor module_init son inciertos (no he encontrado ninguna información autorizada).
Todas las funciones __init en la sección .initcall.init también se guarda un puntero de función, en el núcleo de inicialización llama a la función de puntero __init por estos punteros de función, y después de toda la inicialización se ha completado, liberar toda la sección init (incluyendo .init.text, .initcall.init etc.).
Tenga en cuenta que el orden en que la función del núcleo llama sólo durante la secuencia de inicialización y de función punteros relacionados con el presente documento, y estas funciones 1) en sí es independiente del orden en la sección .init.text. En el kernel 2.4, que también es el orden de los punteros de función y enlaces relacionados con la orden, es incierto. 2.6 kernel, sección initcall.init 7 se divide en sub-secciones, a saber
de > .initcall1.init .initcall2.init .initcall3.init .initcall4.init .initcall5.init .initcall6. init .initcall7.initde > cuando
cuando se desea colocar la sección .initcall1.init función fn, siempre y cuando la declaración
de > core_initcall (fn); de >
puede ser.
otro método para la definición de los respectivos segmentos son:
de > core_initcall (fn) --- > .initcall1.init postcore_initcall (fn) --- > .initcall2. arch_initcall init (fn) --- > .initcall3.init subsys_initcall (fn) --- > .initcall4.init fs_initcall (fn) --- > .initcall5.init device_initcall (fn) --- >. initcall6.init late_initcall (fn) --- > .initcall7.initde >
2.4 es compatible con el initcall (fn) es equivalente a device_initcall (fn). Orden entre las respectivas sub-secciones se determinan, es decir, la primera llamada de la .initcall1.init puntero de función, a continuación, llamando a la .initcall2.init puntero de función, y similares. Secuencialmente los punteros de función en cada sub-sección y el enlace está asociado secuencia, es incierto.
Linux y BSD son sistemas libres, de código abierto, similares a Unix. Incluso usan mucho del mismo
Cuando hicimos el experimento, grabamos el archivo bin en la tarjeta SD, como el experimento de la l
Todo el mundo sabe cómo verificar el tiempo de instalación del sistema win7. De hecho, es muy simpl
ifconfig -a Ver toda la información de NIC de Linux ifconfig eth0 down Apague la tarjeta de red et
VSFTP servidor de instancias Tutorial
Instalación y desinstalación básica del sistema operativo Linux RPM y TAR
Cómo establecer sysctl.conf para mejorar el rendimiento de Linux (sysctl.conf más completa excelente
Acerca de la puerta de enlace predeterminada de Linux
la transmisión de datos -sk en la capa de enlace de la pila de protocolos Linux
Accesos directos comunes bajo la línea de comando de Linux
Configurar comando para ordenar
En los artículos de modelo de controlador de dispositivo Linux de
Comando de linux detallado mkdir
Yum desde el CD de montaje o el tutorial básico de instalación de ISO
Interpretación del código fuente del kernel del sistema operativo Linux
Resuelva el método de no poder abrir el video en formato exe en el sistema Win8
Magic Shadow Factory: la conversión de teléfonos móviles en formato 3GP universal
Solución detallada para error de puntero FAST_CWD en GRADS en win10
¿Cómo resolver el problema de XP al entrar en la pantalla azul del sistema pe?
¿Cómo cerrar el mantenimiento automático de Win10? Cómo desactivar el mantenimiento automático
El sistema Win10 desinstala 360 dos métodos
No hay solución de salida de sonido en el sistema Win7
La razón por la que el sistema WinXP abre la ventana de apagado y resuelve el problema