
Ich habe erfahren, dass das Firmware-Subsystem udevd verwendet, um eine Firmware in den erstellten Sysfs-Dateneintrag zu kopieren.
Aber wie funktioniert dies im Falle eines integrierten Treibermoduls, bei dem udevd noch nicht gestartet wurde?
Ich verwende einen 3.14-Kernel.
Danke!
Antwort1
Ich habe mir die Kernelquellen durchgelesen, insbesondere drivers/base/firmware_class.c
, und entdeckte, dass
CONFIG_FW_LOADER_USER_HELPER
udev
würde die Firmware-Ladevariante aktivieren (natürlich nur für ladbare Module verwendbar, wenn udev läuft). Aber wie bereits erwähnt aufLKMLDies scheint eine veraltete Methode zu sein.
Darüber hinaus wird die von den integrierten Modulen benötigte Firmware von initramfs
by fw_get_filesystem_firmware()
über einen geladen kernel_read()
, um genau zu sein.
Antwort2
Es ist möglich, Firmware-Images in den Kernel selbst zu integrieren, indem Sie die Konfigurationsoptionen CONFIG_FIRMWARE_IN_KERNEL
, CONFIG_EXTRA_FIRMWARE_DIR
, und CONFIG_EXTRA_FIRMWARE
kernel verwenden. Dies kann in Fällen nützlich sein, in denen Sie die Firmware zur Laufzeit nicht aus dem Benutzerbereich bereitstellen können oder möchten (beispielsweise, wenn die betreffende Firmware für den Zugriff auf das Startgerät erforderlich ist und Sie kein initrd verwenden möchten).
Hier ist eine detailliertere Erklärung der verfügbaren Optionen zum Laden der Firmware:https://wiki.tizen.org/wiki/Usage_and_Mechanism_of_kernel_function_%22request_firmware()%22#Load_firmware_from_kernel_image