Linux는 내장 드라이버 모듈용 펌웨어를 어떻게 로드합니까?

Linux는 내장 드라이버 모듈용 펌웨어를 어떻게 로드합니까?

나는 펌웨어 하위 시스템이 udevd를 사용하여 생성된 sysfs 'data' 항목에 펌웨어를 복사한다는 것을 배웠습니다.

하지만 udevd가 아직 시작되지 않은 내장 드라이버 모듈의 경우 이것이 어떻게 작동합니까?

저는 3.14 커널을 사용하고 있습니다.

티아!

답변1

나는 커널 소스, 특히 를 읽어보고 drivers/base/firmware_class.c다음을 발견했습니다.

CONFIG_FW_LOADER_USER_HELPER 

펌웨어 로딩 변형을 활성화합니다 udev(분명히 udev가 실행 중일 때 로드 가능한 모듈에만 사용할 수 있음). 하지만 위에서 언급했듯이LKML이것은 쓸모없는 방법인 것 같습니다.

또한 내장 모듈에 필요한 펌웨어는 를 통해 initramfs로드 됩니다 .fw_get_filesystem_firmware()kernel_read()

답변2

CONFIG_FIRMWARE_IN_KERNEL, CONFIG_EXTRA_FIRMWARE_DIR및 커널 구성 옵션을 사용하여 커널 자체에 펌웨어 이미지를 구축할 수 있습니다 CONFIG_EXTRA_FIRMWARE. 이는 런타임에 사용자 공간에서 펌웨어를 제공할 수 없거나 제공하고 싶지 않은 경우에 유용할 수 있습니다(예: 부팅 장치에 액세스하는 데 문제의 펌웨어가 필요하고 initrd를 사용하고 싶지 않은 경우). ).

다음은 펌웨어 로딩에 사용할 수 있는 옵션에 대한 자세한 설명입니다.https://wiki.tizen.org/wiki/Usage_and_Mechanism_of_kernel_function_%22request_firmware()%22#Load_firmware_from_kernel_image

관련 정보