
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 udev
variante 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 initramfs
meio 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_DIR
e CONFIG_EXTRA_FIRMWARE
do 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