модуль ядра не может найти файл прошивки на устройстве 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

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


person gnychis    schedule 16.05.2011    source источник


Ответы (3)


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

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

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

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

person Russ Schultz    schedule 09.08.2012

У меня была аналогичная проблема с моей прошивкой с именем: 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, которые указывают места, где будет проверяться прошивка:

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

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


person fbourge    schedule 04.04.2013

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

  1. Проверьте, в каком месте ядро ​​​​ищет сценарий. / # cat /proc/sys/kernel/hotplug. Расположение по умолчанию — «/sbin/hotplug».
  2. Проверьте, есть ли у вас скрипт, который ищет ядро, в этом месте. На Android сценарий должен быть «/system/busybox/sbin/mdev», поэтому вы можете установить его для «/proc/sys/kernel/hotplug», если это не так.
person nchokoev    schedule 27.06.2011
comment
ОП работает на устройстве Android, на котором нет udev. Процесс инициализации Android обрабатывает события uevents. - person kcstrom; 01.03.2013