LINUX.ORG.RU

mdev -s + firmware

 ,


0

1

Имеется железка на TI AM3354, под нее имеется две rootfs - одна от производителя, вторая самодельная (buildroot/busybox), ядро в обоих случаях одно и то же (3.12). И имеется фирмварь от TI - am335x-pm-firmware.bin. В обоих rootfs эта фирмварь положена в /lib/firmware. В той rootfs, что от производителя, и где используется udev фирмварь грузится нормально:

[    0.250926] PM: Loading am335x-pm-firmware.bin
...
Starting udev
...
[    3.506997] PM: CM3 Firmware Version = 0x186
А вот в той, что использует busybox + mdev фирмварь не грузится:
[    0.251073] PM: Loading am335x-pm-firmware.bin
...
Starting mdev...
...
[   60.326045] PM: request_firmware failed
mdev -s запускается, и я был уверен, что он подгрузит запрошенную ядром firmware, однако из изучения исходников mdev сложилось впечатление, что он вообще этого не делает. Это действительно так или у меня где-то косяк?


ARM

inb4: есть 2 фирмвари, какую сам прошьёшь, какую мамке накатишь?

anonymous
()

Это действительно так или у меня где-то косяк?

А с чего ты вообще взял что mdev грузит firmware?

Вообще firmware либо:

  • вкомпилируют с нужным модулем прямо в ядро либо пакуют в initramfs/initrd а уже их пихают в ядро
  • кладут рядом и отдельно от ядра а грузят init-ом/initramfs-ом/initrd в общем любым велосипедом

Но главный смысл загрузка firmware проблема ядра. Еще точнее во время загрузки соответствующего модуля ядро грузит нужный ему firmware. И сам сей акт загрузки может быть произведен либо на этапе загрузки ядра если firmware вкомпилирован в ядро. Либо на этапе загрузки initramfs/initrd. Либо еще позже уже из /lib/firmware когда он станет доступен.

init_6 ★★★★★
()
Ответ на: комментарий от init_6

А с чего ты вообще взял что mdev грузит firmware?

Из https://www.kernel.org/doc/Documentation/firmware_class/README и из http://git.busybox.net/busybox/tree/docs/mdev.txt

Если вкратце - в случае, если ядро не может найти firmware самостоятельно, оно запрашивает помощь у юзерспейса. В случае, если mdev к этому моменту уже установлен как hotplug - все работает, а вот если request_firmware_nowait была вызвана в ходе загрузки ядра, когда mdev еще не было - ничего не происходит. Я сначала думал, что mdev -s, запускающаяся из /etc/init.d/SXX, будет подгружать запрошенные ранее firmware - но вот похоже, что нет.

А вот udev с этой задачей справляется, но неохота мне его использовать в моем случае.

lazymf
() автор топика
Ответ на: комментарий от lazymf

А вот udev с этой задачей справляется, но неохота мне его использовать в моем случае.

Вкомпиль в ядро и не морочь голову.

init_6 ★★★★★
()
Ответ на: комментарий от init_6

Вкомпиль в ядро и не морочь голову.

Это план «Б» :) Было интересно разобраться почему udev может, а mdev нет - судя по всему дело в том, что при инициализации udev выполняется

udevadm trigger --action=add
- а mdev ничего такого не умеет. Видимо, придется действительно помещать фирмварь в ядро.

lazymf
() автор топика
Ответ на: комментарий от lazymf

Это план «Б» :) Было интересно разобраться почему udev может, а mdev нет

Самый простой способ - найди initrd/initramfs с mdev в котором реализована функция загрузки фирмвари. А там сразу будет понятно что ты делаешь не так.

init_6 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.