Comment Linux charge-t-il les firmwares pour les modules de pilotes embeddeds

J'ai appris que le sous-système du microprogramme utilise udevd pour copyr un micrologiciel dans l'input de donnée créée par les sysfs.

Mais comment cela fonctionne-t-il dans le cas d'un module de pilote embedded où udevd n'a pas encore commencé?

J'utilise un kernel 3.14.

TIA!

Je lis les sources du kernel, en particulier drivers/base/firmware_class.c , et découvre que

 CONFIG_FW_LOADER_USER_HELPER 

activerait la variante de chargement du firmware udev (évidemment seulement utilisable pour les modules chargeables quand udev est en cours d'exécution). Mais comme mentionné sur LKML cela semble être une méthode obsolète.

En outre, le firmware requirejs par les modules embeddeds est chargé depuis initramfs par fw_get_filesystem_firmware() via un kernel_read() , pour être précis.

Il est possible de build des images de microprogramme dans le kernel lui-même en utilisant les options de configuration du kernel CONFIG_FIRMWARE_IN_KERNEL , CONFIG_EXTRA_FIRMWARE_DIR et CONFIG_EXTRA_FIRMWARE . Cela peut être utile pour les cas où vous ne pouvez pas ou ne voulez pas fournir le micrologiciel à partir de l'espace user lors de l'exécution (par exemple, lorsque le micrologiciel en question est requirejs pour accéder au périphérique d'amorçage et que vous ne souhaitez pas utiliser initrd ).

Voici une explication plus détaillée des options disponibles pour le chargement du firmware: https://wiki.tizen.org/wiki/Usage_and_Mechanism_of_kernel_function_%22request_firmware()%22#Load_firmware_from_kernel_image