Summary: | всегда включать поддержку USB клавиатур в initrd | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Product: | Sisyphus | Reporter: | Anton Farygin <rider> | ||||||||
Component: | make-initrd | Assignee: | Alexey Gladkov <legion> | ||||||||
Status: | CLOSED FIXED | QA Contact: | qa-sisyphus | ||||||||
Severity: | enhancement | ||||||||||
Priority: | P3 | CC: | aen, amike, asy, boyarsh, evg, glebfm, lav, ldv, led, legion, mike, placeholder, rider, stalker, vitty | ||||||||
Version: | unstable | ||||||||||
Hardware: | all | ||||||||||
OS: | Linux | ||||||||||
Attachments: |
|
Description
Anton Farygin
2012-07-11 13:55:50 MSK
Для этого есть: FEATURES += usb Вопрос в том, чтобы сделать это фичей по умолчанию, раз уж ps/2 стабильно вымирает. Лично я за. Хорошо Скорее разумно, хотя есть ещё vm всякие. Прошу проверить: http://git.altlinux.org/people/legion/packages/make-initrd.git?p=make-initrd.git;a=shortlog;h=refs/heads/keyboard просьба снимается. мозгов слишком мало у этой фичи. (В ответ на комментарий №5)
> Прошу проверить:
>
> http://git.altlinux.org/people/legion/packages/make-initrd.git?p=make-initrd.git;a=shortlog;h=refs/heads/keyboard
Переделал реализацию. Теперь автоугадав смотрить на led у устройства. Модули добавляются так что будут загружены при появлении shell на любой стадии.
Прошу проверить.
(In reply to comment #7) > Прошу проверить. Как минимум есть незначащая очепятка в тексте: -+ echo "Adding resue modules ..."; \ ++ echo "Adding rescue modules ..."; \ А все эти hid-logitech-dj -- они часом не для мультимедийных кнопочек, которые initrd не слишком специального вида обычно по барабану? Также и USB2/3 kbd пока не попадались, равно как и секретарши с совместимой скоростью набора... В остальном будто хорошо, постараюсь добраться до железа. (В ответ на комментарий №8) > (In reply to comment #7) > > Прошу проверить. > Как минимум есть незначащая очепятка в тексте: > -+ echo "Adding resue modules ..."; \ > ++ echo "Adding rescue modules ..."; \ Спасибо, исправлю. > А все эти hid-logitech-dj -- они часом не для мультимедийных кнопочек, которые > initrd не слишком специального вида обычно по барабану? Также и USB2/3 kbd > пока не попадались, равно как и секретарши с совместимой скоростью набора... Видимо, ты говоришь про набор модулей "по умолчанию". Он взят из dracut. Этот список как оценка сверху, когда не удалось ничего определить. На всех доступных мне компах всегда клавиатура определялась. На машинах, где не нужны такие модули вообще будет достаточно: DISABLE_FEATURES += keyboard. > В остальном будто хорошо, постараюсь добраться до железа. Так это самое главное. Видимо интереса к этой проблеме больше нет. Инперес есть, просто никак не доберусь до железа. Месяц прошёл. Закрываю. Created attachment 5665 [details]
Содержимое рабочего initrd с неработающей клавиатурой
Собрал текущий master (коммит c53eec3b1c3419735bf5e65ca196087b698f13fe). Initrd загружается, модули клавиатуры в нём вроде бы есть, но она почему-то всё равно не работает.
Переоткрою, т.к. добрался потестировать. Created attachment 5666 [details]
Описание машины
В аттаче описание машины от system-report.
Посидели тут с шреком с похожей проблемой. Я кажется нашёл рейс в загрузке таких модулей. На этой неделе надеюсь исправить. Не могли бы вы попробовать версию из master ? Собрал из коммита f5d4365dfdcad3d9e956c3d0a91624e76b4dbdeb. Проверял с ядрами 3.6.9/10-std-def-alt1. Машина после появления обычных строчек: =============================================================== drivers/rtc/hctosys.c: unable to open /dev/rtc0 chdir: /etc/syslog.d: No such file or directory =============================================================== останавливалась и не реагировала на клавиатуру (даже на SysRq). Ждал по две-три минуты. (В ответ на комментарий №18) > Собрал из коммита f5d4365dfdcad3d9e956c3d0a91624e76b4dbdeb. > > Проверял с ядрами 3.6.9/10-std-def-alt1. > > Машина после появления обычных строчек: > =============================================================== > drivers/rtc/hctosys.c: unable to open /dev/rtc0 > chdir: /etc/syslog.d: No such file or directory > =============================================================== Чудеса. Попробовал ещё на домашнем ноутбуке. После 5-15-ти минут ожидания вывалилось следующее: ================================================= initrd: loop: ERROR: Unable to detect the usb keyboard initrd: Stage 'loop' failed initrd: This shell remains here for debug ... (initramfs)_ ================================================= при этом USB-клавиатура, конечно, не работала. (В ответ на комментарий №20) > при этом USB-клавиатура, конечно, не работала. Я нашёл и исправил одну опечатку, но сути это не изменила. Проблема в том, что udev initrd не загружает usbhid вообще. Я в последних коммитах решил проверить предположение, что udevd просто не успевает получить и обработать эвенты от ядра ... я сделал правило и фильтр, что бы initrd ожидал появления эвентов от клавиатуры и не останавливал udev до их получения, но этого не произошло... я не вижу этих эвентов. Если же собрать образ с MODULES_PRELOAD += usbhid, то польза немедленно извлечётся. Собрал коммит 9798450c85d77c517d2336de1236f4486e0ccf0b. Сделал образ с MODULES_PRELOAD += usbhid. При загрузке через 3 минуты показалось сообщение Stage 'loop' failed и USB-клавиатура при этом не работала. Т.к. это был уже домашний ноутбук, у которого есть встроенная AT-клавиатура, то смог распечатать вывод lsmod. Сравнил его с выводом для полностью загруженной и рабочей системы (на 3.6.10-std-def-alt1). Сделал образ с MODULES_PRELOAD += hid-generic (в добавок к usbhid). Результаты: - По прежнему висит ровно 3 минуты и вываливается в (initramfs) с сообщением Stage 'loop' failed + При этом USB-клавиатура работает + Если нажать Ctrl-D/exit, то загрузка продолжается. (В ответ на комментарий №22) > Результаты: > - По прежнему висит ровно 3 минуты и вываливается в (initramfs) с сообщением Это общее время. оно регулируется rootdelay=N > Stage 'loop' failed > + При этом USB-клавиатура работает Осталось понять почему эти модули не грузятся через udev. У меня есть теория что в /lib/udev/initramfs-rules.d нехватает каких-то правил. > + Если нажать Ctrl-D/exit, то загрузка продолжается. Там сейчас сделано ожидание клавиатуры. На самом деле оно не нужно т.к. инициализация usb клавиатуры не должно тормозить загрузку образа. 0.7.9-alt1-21-g1d24170 Теперь должно работать как нужно. Дома работает. На следующей неделе проверю на работе. (In reply to comment #24) > 0.7.9-alt1-21-g1d24170 Ух. (В ответ на комментарий №26) > (In reply to comment #24) > > 0.7.9-alt1-21-g1d24170 > Ух. Мне не удалось пока определить какие hid нужны для конкретного usb устройства (если нужны), но я научился не копировать все hid модули. Наверное, ещё можно добавить оптимизацию: не добавлять hid если ни одна клавиатура не требует usbhid... но я не уверен. На работе тоже работает. 3.6.11-std-pae Спасибо за работу, Алексей. Добавлю немного. Необходимо всегда включать USB в initrd, т.к. при использовании LUKS запрос на ввод пароля происходит раньше загрузки модулей USB. В результате имею USB клавиатуру, невозможно ввести пароль. Похоже, не везде работает одинаково хорошо. Дома обновил make-initrd до 0.8.0-alt1, 3.7.4-std-def со свежесгенерированным initrd заработало без проблем. Обновление make-initrd до той же версии и запуск на одном из серверов (где как раз клавиатуру можно подключить только по USB) дают такое: =============================================================== root@vdsman /etc # make-initrd Config file: /etc/initrd.mk Generating module dependencies on host ... depmod: WARNING: could not open /lib/modules/2.6.32-ovz-el-alt79/modules.builtin: No such file or directory Guessed modules: ext4 pci_hotplug shpchp hpsa scsi_mod sd_mod crc-t10dif sd_mod Guessed features: add-modules cleanup compress fstab keyboard syslog Creating initrd image ... Adding device-mapper support ... Adding modules ... Adding modules (preload) ... Adding usb keyboard support ... add-module: No module "atkbd" found for kernel 2.6.32-ovz-el-alt79 make: *** [keyboard] Ошибка 1 make: *** [all] Ошибка 1 =============================================================== (В ответ на комментарий №30) > depmod: WARNING: could not open > /lib/modules/2.6.32-ovz-el-alt79/modules.builtin: No such file or directory Это больше похоже на проблемы с конкретным ядром. Да, подозреваю это https://bugzilla.altlinux.org/show_bug.cgi?id=27866 Хотя нет, вру. Текущий initrd для этого ядра этого сервера сгенерирован как раз make-initrd-0.7.9-alt1, вполне успешно. И откат до этой версии снова позволяет создать образ initrd (идентичный с текущим с точностью до обновившихся с тех пор пакетов). Я не уверен, что уместно только после обновления make-initrd ломать генерацию образов для некоторых ядер. Думаю, что также сломает некоторую часть транзакций apt-а. Т.е., я думаю, что на стыке 0.7.9 -> 0.8.0 есть регресс. Created attachment 5720 [details]
Отчёт system-report о машине vsdman
Прикладываю описание вышеупомянутой машины с ovz-ядром.
с 0.8.0-alt1 и включённой опции "FEATURE = keyboard", клавиатура доступна для ввода пароля от разделов LUKS. Спасибо. Исправлено Так. А вот вопрос, для make-initrd ли этот баг ? Может, это баг для kernel-* ? Bug 32227 (In reply to comment #37) > Так. А вот вопрос, для make-initrd ли этот баг ? Может, это баг для kernel-* ? > Bug 32227 Именно make-initrd кладёт необходимые модули ядра в образ, чтобы клавиатура работала. В ядре поддержка есть, но в виде модулей. Если эту проблему решать в ядре, то предётся вкомпилить эти модули в ядро. (In reply to comment #38) > > Так. А вот вопрос, для make-initrd ли этот баг ? Может, это баг для kernel-* ? > > Bug 32227 > > Именно make-initrd кладёт необходимые модули ядра в образ, чтобы клавиатура > работала. Да, что-то я, похоже, прогнал. Указание параметра init же не отменяет загрузку initrd. Так, тогда вопрос. А когда и где исправлено ? В p8 в пятницу наткнулся. (In reply to comment #39) > Да, что-то я, похоже, прогнал. Указание параметра init же не отменяет загрузку > initrd. Так, тогда вопрос. А когда и где исправлено ? В p8 в пятницу наткнулся. Так всё же, какое сейчас должно быть поведение по-умолчанию в p8? Если ничего не делать, то должно работать? Или надо "FEATURE = keyboard" добавлять? Кажется понятно. Модули не добавляются, если клавиатура не подключена. И что-то даже MODULES_ADD += usbkbd не особо помогает. Список модулей получается такой: Packed modules: ahci ata_generic ata_piix crc16 crc32c_generic crc32c-intel ext4 fscrypto hid hid-generic jbd2 libahci libata libcrc32c mbcache pata_acpi scsi_mod sd_mod usb-common usbcore usbkbd и клавиатура не работает. А с подключенной получается уже так: Packed modules: ahci ata_generic ata_piix crc16 crc32c_generic crc32c-intel ehci-hcd ehci-pci evdev ext4 fscrypto hid hid-generic input-leds jbd2 libahci libata libcrc32c mbcache pata_acpi scsi_mod sd_mod uhci-hcd usb-common usbcore usbhid usbkbd Для универсального варианта надл список подбирать для MODULES_ADD, получается. |