
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 udev
variante 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 initramfs
a 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_DIR
y . CONFIG_EXTRA_FIRMWARE
Esto 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