#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:
Ядро выполняет скрипт пользовательского пространства для загрузки прошивки. Проверьте, есть ли у вас скрипт в правильном месте.
- Проверьте, в каком расположении ядро ищет скрипт. / # cat /proc/sys/kernel /hotplug. Расположение по умолчанию — «/ sbin / hotplug».
- Проверьте, есть ли у вас скрипт, который ищет ядро, в этом расположении. На Android сценарий должен быть «/ system /busybox / sbin / mdev», поэтому вы можете установить для этого «/ proc / sys /kernel / hotplug», если это не так.
Комментарии:
1. Операционная система работает на устройстве Android, у которого нет udev. Процесс инициализации Android обрабатывает uevents.