Bug 27534 - всегда включать поддержку USB клавиатур в initrd
Summary: всегда включать поддержку USB клавиатур в initrd
Status: CLOSED FIXED
Alias: None
Product: Sisyphus
Classification: Development
Component: make-initrd (show other bugs)
Version: unstable
Hardware: all Linux
: P3 enhancement
Assignee: Alexey Gladkov
QA Contact: qa-sisyphus
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2012-07-11 13:55 MSK by Anton Farygin
Modified: 2019-05-05 15:30 MSK (History)
15 users (show)

See Also:


Attachments
Содержимое рабочего initrd с неработающей клавиатурой (22.54 KB, text/plain)
2012-12-05 11:31 MSK, Evgenii Terechkov
no flags Details
Описание машины (115.23 KB, application/x-bzip)
2012-12-05 11:35 MSK, Evgenii Terechkov
no flags Details
Отчёт system-report о машине vsdman (80.91 KB, application/x-bzip2)
2013-01-27 01:12 MSK, Evgenii Terechkov
no flags Details

Note You need to log in before you can comment on or make changes to this bug.
Description Anton Farygin 2012-07-11 13:55:50 MSK
На современном серверном оборудовании бюджетного сегмента PS/2 отсутствует как класс и клавиатуру можно подключить только по USB.

Предлагаю включать поддержку USB и USB-клавиатур в initrd, дабы можно было в случае критических сбоев повводить команды в initrd.
Comment 1 Alexey Gladkov 2012-07-11 14:27:41 MSK
Для этого есть: FEATURES += usb
Comment 2 Evgenii Terechkov 2012-07-11 18:39:39 MSK
Вопрос в том, чтобы сделать это фичей по умолчанию, раз уж ps/2 стабильно вымирает. Лично я за.
Comment 3 Alexey Gladkov 2012-07-11 23:46:04 MSK
Хорошо
Comment 4 Michael Shigorin 2012-07-20 16:56:49 MSK
Скорее разумно, хотя есть ещё vm всякие.
Comment 6 Alexey Gladkov 2012-08-06 16:30:23 MSK
просьба снимается. мозгов слишком мало у этой фичи.
Comment 7 Alexey Gladkov 2012-08-07 14:33:12 MSK
(В ответ на комментарий №5)
> Прошу проверить:
> 
> http://git.altlinux.org/people/legion/packages/make-initrd.git?p=make-initrd.git;a=shortlog;h=refs/heads/keyboard

Переделал реализацию. Теперь автоугадав смотрить на led у устройства. Модули добавляются так что будут загружены при появлении shell на любой стадии.
Прошу проверить.
Comment 8 Michael Shigorin 2012-08-08 23:01:44 MSK
(In reply to comment #7)
> Прошу проверить.
Как минимум есть незначащая очепятка в тексте:
-+               echo "Adding resue modules ..."; \
++               echo "Adding rescue modules ..."; \

А все эти hid-logitech-dj -- они часом не для мультимедийных кнопочек, которые initrd не слишком специального вида обычно по барабану?  Также и USB2/3 kbd пока не попадались, равно как и секретарши с совместимой скоростью набора...

В остальном будто хорошо, постараюсь добраться до железа.
Comment 9 Alexey Gladkov 2012-08-09 00:01:05 MSK
(В ответ на комментарий №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.

> В остальном будто хорошо, постараюсь добраться до железа.

Так это самое главное.
Comment 10 Alexey Gladkov 2012-08-15 16:10:33 MSK
Видимо интереса к этой проблеме больше нет.
Comment 11 Anton Farygin 2012-08-15 17:12:24 MSK
Инперес есть, просто никак не доберусь до железа.
Comment 12 Alexey Gladkov 2012-09-09 15:09:38 MSK
Месяц прошёл. Закрываю.
Comment 13 Evgenii Terechkov 2012-12-05 11:31:42 MSK
Created attachment 5665 [details]
Содержимое рабочего initrd с неработающей клавиатурой

Собрал текущий master (коммит c53eec3b1c3419735bf5e65ca196087b698f13fe). Initrd загружается, модули клавиатуры в нём вроде бы есть, но она почему-то всё равно не работает.
Comment 14 Evgenii Terechkov 2012-12-05 11:33:48 MSK
Переоткрою, т.к. добрался потестировать.
Comment 15 Evgenii Terechkov 2012-12-05 11:35:01 MSK
Created attachment 5666 [details]
Описание машины

В аттаче описание машины от system-report.
Comment 16 Alexey Gladkov 2012-12-10 18:04:45 MSK
Посидели тут с шреком с похожей проблемой. Я кажется нашёл рейс в загрузке таких модулей. На этой неделе надеюсь исправить.
Comment 17 Alexey Gladkov 2012-12-11 18:13:40 MSK
Не могли бы вы попробовать версию из master ?
Comment 18 Evgenii Terechkov 2012-12-12 13:39:43 MSK
Собрал из коммита 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). Ждал по две-три минуты.
Comment 19 Alexey Gladkov 2012-12-12 15:39:44 MSK
(В ответ на комментарий №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
> ===============================================================

Чудеса.
Comment 20 Evgenii Terechkov 2012-12-12 16:55:48 MSK
Попробовал ещё на домашнем ноутбуке. После 5-15-ти минут ожидания вывалилось следующее:
=================================================
initrd: loop: ERROR: Unable to detect the usb keyboard
initrd: Stage 'loop' failed
initrd: This shell remains here for debug ...
(initramfs)_
=================================================
при этом USB-клавиатура, конечно, не работала.
Comment 21 Alexey Gladkov 2012-12-12 17:31:46 MSK
(В ответ на комментарий №20)
> при этом USB-клавиатура, конечно, не работала.

Я нашёл и исправил одну опечатку, но сути это не изменила. Проблема в том, что udev initrd не загружает usbhid вообще. Я в последних коммитах решил проверить предположение, что udevd просто не успевает получить и обработать эвенты от ядра ... я сделал правило и фильтр, что бы initrd ожидал появления эвентов от клавиатуры и не останавливал udev до их получения, но этого не произошло... я не вижу этих эвентов.

Если же собрать образ с MODULES_PRELOAD += usbhid, то польза немедленно извлечётся.
Comment 22 Evgenii Terechkov 2012-12-14 19:13:34 MSK
Собрал коммит 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, то загрузка продолжается.
Comment 23 Alexey Gladkov 2012-12-14 19:24:45 MSK
(В ответ на комментарий №22)
> Результаты:
> - По прежнему висит ровно 3 минуты и вываливается в (initramfs) с сообщением

Это общее время. оно регулируется rootdelay=N

> Stage 'loop' failed
> + При этом USB-клавиатура работает

Осталось понять почему эти модули не грузятся через udev. У меня есть теория что в /lib/udev/initramfs-rules.d нехватает каких-то правил.

> + Если нажать Ctrl-D/exit, то загрузка продолжается.

Там сейчас сделано ожидание клавиатуры. На самом деле оно не нужно т.к. инициализация usb клавиатуры не должно тормозить загрузку образа.
Comment 24 Alexey Gladkov 2012-12-22 14:04:51 MSK
0.7.9-alt1-21-g1d24170

Теперь должно работать как нужно.
Comment 25 Evgenii Terechkov 2012-12-23 12:56:15 MSK
Дома работает. На следующей неделе проверю на работе.
Comment 26 Michael Shigorin 2012-12-23 20:04:17 MSK
(In reply to comment #24)
> 0.7.9-alt1-21-g1d24170
Ух.
Comment 27 Alexey Gladkov 2012-12-23 22:27:04 MSK
(В ответ на комментарий №26)
> (In reply to comment #24)
> > 0.7.9-alt1-21-g1d24170
> Ух.

Мне не удалось пока определить какие hid нужны для конкретного usb устройства (если нужны), но я научился не копировать все hid модули.

Наверное, ещё можно добавить оптимизацию: не добавлять hid если ни одна клавиатура не требует usbhid... но я не уверен.
Comment 28 Evgenii Terechkov 2012-12-24 06:01:23 MSK
На работе тоже работает. 3.6.11-std-pae

Спасибо за работу, Алексей.
Comment 29 Mike 2013-01-21 13:10:16 MSK
Добавлю немного.
Необходимо всегда включать USB в initrd, т.к. при использовании LUKS запрос на ввод пароля происходит раньше загрузки модулей USB.

В результате имею USB клавиатуру, невозможно ввести пароль.
Comment 30 Evgenii Terechkov 2013-01-26 22:20:02 MSK
Похоже, не везде работает одинаково хорошо.

Дома обновил 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
===============================================================
Comment 31 Alexey Gladkov 2013-01-27 00:36:41 MSK
(В ответ на комментарий №30)
> depmod: WARNING: could not open
> /lib/modules/2.6.32-ovz-el-alt79/modules.builtin: No such file or directory

Это больше похоже на проблемы с конкретным ядром.
Comment 32 Evgenii Terechkov 2013-01-27 00:49:25 MSK
Да, подозреваю это https://bugzilla.altlinux.org/show_bug.cgi?id=27866
Comment 33 Evgenii Terechkov 2013-01-27 00:59:06 MSK
Хотя нет, вру. Текущий initrd для этого ядра этого сервера сгенерирован как раз make-initrd-0.7.9-alt1, вполне успешно. И откат до этой версии снова позволяет создать образ initrd (идентичный с текущим с точностью до обновившихся с тех пор пакетов).

Я не уверен, что уместно только после обновления make-initrd ломать генерацию образов для некоторых ядер. Думаю, что также сломает некоторую часть транзакций apt-а. Т.е., я думаю, что на стыке 0.7.9 -> 0.8.0 есть регресс.
Comment 34 Evgenii Terechkov 2013-01-27 01:12:58 MSK
Created attachment 5720 [details]
Отчёт system-report о машине vsdman

Прикладываю описание вышеупомянутой машины с ovz-ядром.
Comment 35 Mike 2013-01-30 11:34:55 MSK
с 0.8.0-alt1 и включённой опции "FEATURE = keyboard", клавиатура доступна для ввода пароля от разделов LUKS. Спасибо.
Comment 36 Alexey Gladkov 2016-06-27 14:13:19 MSK
Исправлено
Comment 37 Sergey Y. Afonin 2016-06-28 11:39:30 MSK
Так. А вот вопрос, для make-initrd ли этот баг ? Может, это баг для kernel-* ?
Bug 32227
Comment 38 Alexey Gladkov 2016-06-28 12:05:33 MSK
(In reply to comment #37)
> Так. А вот вопрос, для make-initrd ли этот баг ? Может, это баг для kernel-* ?
> Bug 32227

Именно make-initrd кладёт необходимые модули ядра в образ, чтобы клавиатура работала. В ядре поддержка есть, но в виде модулей. Если эту проблему решать в ядре, то предётся вкомпилить эти модули в ядро.
Comment 39 Sergey Y. Afonin 2016-06-28 14:32:12 MSK
(In reply to comment #38)

> > Так. А вот вопрос, для make-initrd ли этот баг ? Может, это баг для kernel-* ?
> > Bug 32227
> 
> Именно make-initrd кладёт необходимые модули ядра в образ, чтобы клавиатура
> работала.

Да, что-то я, похоже, прогнал. Указание параметра init же не отменяет загрузку initrd. Так, тогда вопрос. А когда и где исправлено ? В p8 в пятницу наткнулся.
Comment 40 Sergey Y. Afonin 2019-05-05 14:18:41 MSK
(In reply to comment #39)

> Да, что-то я, похоже, прогнал. Указание параметра init же не отменяет загрузку
> initrd. Так, тогда вопрос. А когда и где исправлено ? В p8 в пятницу наткнулся.

Так всё же, какое сейчас должно быть поведение по-умолчанию в p8? Если ничего не делать, то должно работать? Или надо "FEATURE = keyboard" добавлять?
Comment 41 Sergey Y. Afonin 2019-05-05 15:30:12 MSK
Кажется понятно. Модули не добавляются, если клавиатура не подключена. И что-то даже 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, получается.