¿Cómo carga Linux el firmware para los módulos de controladores integrados

¿Cómo carga Linux el firmware para los módulos de controladores integrados

Aprendí que el subsistema de firmware usa udevd para copiar un firmware a la entrada de 'datos' sysfs creada.

Pero, ¿cómo funciona esto en el caso de un módulo de controlador integrado donde udevd aún no se ha iniciado?

Estoy usando un kernel 3.14.

TÍA!

Respuesta1

Leí las fuentes del kernel, especialmente drivers/base/firmware_class.c, y descubrí que

CONFIG_FW_LOADER_USER_HELPER 

activaría la udevvariante de carga de firmware (obviamente solo se puede utilizar para módulos cargables cuando udev se está ejecutando). Pero como se mencionó enLKMLEste parece ser un método obsoleto.

Además, el firmware requerido por los módulos integrados se carga mediante initramfsa fw_get_filesystem_firmware()través de kernel_read(), para ser precisos.

Respuesta2

Es posible crear imágenes de firmware en el propio kernel utilizando las opciones de configuración del kernel CONFIG_FIRMWARE_IN_KERNEL, CONFIG_EXTRA_FIRMWARE_DIRy . CONFIG_EXTRA_FIRMWAREEsto puede resultar útil en casos en los que no puede o no desea proporcionar el firmware desde el espacio de usuario en tiempo de ejecución (por ejemplo, cuando el firmware en cuestión es necesario para acceder al dispositivo de arranque y no desea utilizar un initrd). ).

Aquí hay una explicación más detallada de las opciones disponibles para la carga de firmware:https://wiki.tizen.org/wiki/Usage_and_Mechanism_of_kernel_function_%22request_firmware()%22#Load_firmware_from_kernel_image

información relacionada