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

#android #linux-kernel #linux-device-driver #firmware

#Android #linux-ядро #linux-device-driver #прошивка

Вопрос:

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

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

Ответ №1:

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

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

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

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

Ответ №2:

У меня была аналогичная проблема с моей прошивкой с именем : 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"
  

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


Ответ №3:

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

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

Комментарии:

1. Операционная система работает на устройстве Android, у которого нет udev. Процесс инициализации Android обрабатывает uevents.