¿Cómo podemos personalizar el orden de carga del controlador incorporado (para hacer que parte del módulo de controlador incorporado cargue primero, y el módulo dependiente se cargue más tarde)?¿Cuál es el orden de carga del controlador integrado de Linux?
Respuesta
Los controladores incorporados no serán cargados, por lo tanto incorporados. Se llaman sus funciones de inicialización y los controladores se activan cuando kernel se configura a sí mismo. Estas funciones init se llaman en init/main.c::do_initcalls()
. Todas las llamadas init se clasifican en niveles, que se definen en initcall_levels
y include/linux/init.h
Estos niveles son símbolos reales definidos en la secuencia de comandos del enlazador (arch/*/kernel/vmlinux.lds.*
). En el tiempo de compilación del kernel, el enlazador recoge todas las funciones marcadas module_init()
u otras *_initcall()
, clasifica en niveles, coloca todas las funciones en el mismo nivel juntas en el mismo lugar y crea como una matriz de punteros a función.
Lo que do_initcall_level() hace en el tiempo de ejecución es llamar a cada función apuntada por los punteros en la matriz. No existe una política de llamadas, excepto niveles, en do_initcall_level, pero el orden en la matriz se decide en el tiempo del enlace.
Entonces, ahora puede ver que la orden de iniciación del controlador está fijada en el momento del enlace, pero ¿qué puede hacer?
- poner su función init en el nivel más alto, o
- poner el controlador de dispositivo en la posición más alta en
Makefile
El primero de ellos está claro si ha leído lo anterior. es decir, use early_initcall() en su lugar si es apropiado.
El segundo necesita un poco más de explicación. La razón por la cual el orden en un asunto Makefile
es cómo funciona el sistema actual de compilación de kernel y cómo funcionan los enlazadores. Para abreviar, el sistema de compilación toma todos los archivos de objeto en obj-y
y los une. Es altamente dependiente del entorno pero hay una alta probabilidad de que el enlazador coloque el primer archivo de objeto en el obj-y
en una dirección inferior, por lo tanto, se llama antes.
Si solo desea llamar su controlador antes que otros controladores en el mismo directorio, esta es la forma más sencilla de hacerlo.
depmod
examina los símbolos exportados y requeridos por cada módulo y hace una clasificación topológica en ellos que modprobe
puede usar más adelante para cargar módulos en el orden correcto. Requerir los símbolos de los módulos de los que desea depender es suficiente para que haga lo correcto.
Recientemente recibí este problema el controlador de mi cargador está teniendo dependencia del controlador ADC así que antes de cargar el controlador de carga del controlador ADC, cargue y verifique que adc phandle esté definido en el archivo DTS y tenga que inicializarlo mediante el controlador ADC. se resolvió cambiando el orden del módulo en los controladores/Makefile
- 1. Nuevo en el desarrollo del kernel/controlador de Linux
- 2. Coldfusion, ¿cuál es la ventaja del diseño del controlador frontal sobre el controlador de página?
- 3. ¿Cuál es el trabajo del controlador en MVC?
- 4. Programación del controlador del dispositivo del kernel de Linux
- 5. ¿Cuál es la diferencia entre devm_kzalloc() y kzalloc() en la programación del controlador de Linux
- 6. ¿cuál es el orden de carga de los scripts cuando inicia vim?
- 7. LINUX: orden del módulo enlazado estáticamente cargando
- 8. marcos de registro para Linux integrado?
- 9. ¿Cuál es el controlador en Java Swing?
- 10. ¿Cuál es la orden de resolución del constructor?
- 11. orden de carga de archivos JAR del directorio lib
- 12. Carga lenta: ¿cuál es el mejor enfoque?
- 13. ¿Cómo sabe Linux Kernel dónde buscar el firmware del controlador?
- 14. NSFetchedResultsSolicitud de sección del controlador usando la orden de visualización
- 15. ¿Cuál es el equivalente de ldd de Linux en Windows?
- 16. rutas Control del orden de carga de los motores
- 17. Analizador de árbol de dispositivo Linux integrado en python?
- 18. Orden de carga de clases en JBoss
- 19. Uso de mono en Linux integrado para hardware
- 20. ¿Cuál es el propósito del código de operación UD2 en el kernel de Linux?
- 21. Desarrollo del controlador de Linux: diferencia entre el controlador PCI y PCIe?
- 22. ¿Cuál es el orden de ejecución en NUnit?
- 23. SQL: ¿Cuál es el orden por defecto de las consultas?
- 24. En Java, ¿cuál es el "orden de operaciones" booleano?
- 25. Rails 3: ¿Cuál es el orden predeterminado de "MyModel.all"?
- 26. Acceda al controlador de ventilador integrado para computadora portátil programáticamente?
- 27. ¿Qué es el controlador de eventos de carga de formularios en Java?
- 28. ¿Cuál es el equivalente de Linux de: MultiByteToWideChar & WideCharToMultiByte?
- 29. permiso de Linux, ¿cuál es la X?
- 30. Orden de CPU en Linux (con hiperamientaje)
¡Gracias a @Yasushi Shoji por su detallada explicación! –
¡Este es un ejemplo de una excelente respuesta! – VividD