Como o Linux carrega firmware para módulos de driver integrados

Como o Linux carrega firmware para módulos de driver integrados

Aprendi que o subsistema de firmware usa o udevd para copiar um firmware para a entrada de 'dados' do sysfs criada.

Mas como isso funciona no caso de um módulo de driver integrado onde o udevd ainda não foi iniciado?

Estou usando um kernel 3.14.

TIA!

Responder1

Eu li as fontes do kernel, especialmente drivers/base/firmware_class.c, e descobri que

CONFIG_FW_LOADER_USER_HELPER 

ativaria a udevvariante de carregamento do firmware (obviamente utilizável apenas para módulos carregáveis ​​quando o udev estiver em execução). Mas como mencionado emLKMLeste parece ser um método obsoleto.

Além disso, o firmware exigido pelos módulos integrados é carregado por initramfsmeio fw_get_filesystem_firmware()de um kernel_read(), para ser mais preciso.

Responder2

É possível construir imagens de firmware no próprio kernel usando as opções de configuração CONFIG_FIRMWARE_IN_KERNEL, CONFIG_EXTRA_FIRMWARE_DIRe CONFIG_EXTRA_FIRMWAREdo kernel. Isso pode ser útil nos casos em que você não pode ou não deseja fornecer o firmware do espaço do usuário em tempo de execução (por exemplo, quando o firmware em questão é necessário para acessar o dispositivo de inicialização e você não deseja usar um initrd ).

Aqui está uma explicação mais detalhada das opções disponíveis para carregamento de firmware:https://wiki.tizen.org/wiki/Usage_and_Mechanism_of_kernel_function_%22request_firmware()%22#Load_firmware_from_kernel_image

informação relacionada