Модуль ядра не может найти файл прошивки на устройстве Android; где это должно быть?

У меня проблемы с размещением прошивки на устройстве Android, я получаю:

<3>[ 3590.997375] usb 3-1.4: ath9k_htc: Firmware - htc_7010.fw not found

Если на стандартной машине Linux с Ubuntu я помещаю htc_7010.fw в /lib/firmware, я не получаю эту ошибку.

Однако, если я помещаю эту прошивку в /lib/firmware на Android, я все равно получаю сообщение об ошибке. Я перепробовал все следующие каталоги и все еще получаю сообщение об ошибке:

/lib/firmware
/etc/firmware
/system/lib/modules
/system/lib/firmware
/system/etc

Нет такой удачи... что определяет, где должна быть прошивка, и как я могу определить, какие каталоги она сканирует для прошивки?

3 ответа

На Android (ICS в любом случае) у него есть собственный демон / служба (или как вы хотите это называть) для управления событиями горячей замены, включая запросы прошивки. В <android>/system/core/init/devices.c, есть два #defines, которые указывают места, где будет проверяться прошивка:

#define FIRMWARE_DIR1   "/etc/firmware"
#define FIRMWARE_DIR2   "/vendor/firmware"

На моей первоначальной сборке файловой системы ICS, /etc/firmware не существует (и каталог etc кажется символической ссылкой, созданной во время загрузки / инициализации). Каталог, в котором я должен был установить прошивку на моем смонтированном NFS rootfs, был <mount point>/system/etc/firmware

После этого запросы request_firmware() из моего модуля успешно завершены.

У меня была похожая проблема с моей прошивкой с именем: down3.bin
(Ранее я должен был вставить свой модуль "io_ti.ko" с # insmod конечно)

Когда я подключил свое устройство (конвертер USB-RS232, адаптер порта Digi International EdgeportTI1) к своему планшету Android (Samsung Galaxy Tab 2), он не смог найти свою прошивку в "каталогах, адаптированных для Linux и Android". Итак, как и вы, я попытался поставить "down3.bin" в:

/lib/firmware
/etc/firmware
/system/lib/modules
/system/lib/firmware
/system/etc

с: # dmesg У меня все еще была ошибка:

<6>[00000.00000] io_ti 1-1:1.0 : Edgeport TI 1 port adapter converter detected
<6>[00000.00000] Failed to load image "edgeport/down3.bin" err-2
<6>[00000.00000] io_ti:probe of 1-1:1.0 failed with error -5
err -2 = [ENOENT] = No such file or directory.

На самом деле, как вы упомянули:

В <android>/system/core/init/devices.c, есть два #define s, которые указывают места, где будет проверяться прошивка:

#define FIRMWARE_DIR1   "/etc/firmware"
#define FIRMWARE_DIR2   "/vendor/firmware"

- Таким образом, вы должны поместить свою прошивку в один из этих каталогов. Надеюсь, у меня все получилось.


Ядро выполняет сценарий пользовательского пространства для загрузки прошивки. Проверьте, есть ли у вас сценарий в нужном месте.

  1. Проверьте, в каком месте ядро ​​ищет скрипт. / # cat / proc / sys / kernel / hotplug. Расположение по умолчанию "/ sbin / hotplug".
  2. Проверьте, есть ли у вас скрипт, который ищет ядро, в этом месте. На андроиде скрипт должен быть "/ system / busybox / sbin / mdev", поэтому вы можете установить "/ proc / sys / kernel / hotplug" на это, если это не так.
Другие вопросы по тегам