Изящная передача ресурсов из initramfs в пространство пользователя - PullRequest
1 голос
/ 30 ноября 2010

Существуют аппаратные устройства, которым требуется поддержка пользовательского пространства, например, запуск демона и обработка частей взаимодействия, не подходящих (слишком сложных или связанных с политикой) для пространства ядра.

Запускать такие демоны легко, как только вы достигнете пространства пользователя -- вы можете запустить их в результате события hotplug и не переживать сильно.

Как только initramfs появляется на картинке, все внезапно разваливается: если демон запускается из initramfs, ему нужно либо сохранитьработает, когда выполнение переключено на обычные rootfs, что особенно сложно, учитывая, что initramfs освобождается во время switch_root или раздает ресурсы и сообщает другой копии себя, запущенной из rootfs.Оба решения кажутся не элегантными и хакерскими.

Есть ли очевидный способ управления такими устройствами и поддерживающими их демонами, которые я пропустил?

Ответы [ 2 ]

0 голосов
/ 30 ноября 2010

У вас есть конкретный случай? Как другие дистрибутивы справились с этим?

Глядя на то, как Fedora делает udev, он запускает его из initramfs, заставляет его делать свое дело, чтобы можно было смонтировать действительно root fs, затем снова выключает его перед переключением.

0 голосов
/ 30 ноября 2010

Вам нужен этот демон для монтирования вашего реального корневого устройства?Я думаю, что ответ да, в противном случае решение будет ждать вашего реального root.

Если ваше устройство настолько сложное, что ему нужен демон, чтобы просто работать, возможно, вы могли бы выполнить часть работы вядро, а обрабатывать политику через атрибут sysfs?Я не вижу пример аппаратного обеспечения, задействованного в монтировании реального корневого устройства, для работы которого необходим демон.Обнаружение устройства применяется, но вам не нужен демон, чтобы устройство действительно работало.Пример будет приветствоваться.

Кроме того, вам действительно нужно переключить root?Вы можете сохранить ваши initramfs и смонтировать все, что вам нужно, чтобы иметь полностью функциональную систему в / usr / Это то, что я делаю с некоторыми из моих встроенных систем.

Обновление: mdev - это встроенная альтернатива udev, котораяработает в двух режимах: при сканировании sysfs добавляет устройство, другой работает при событии hotplug.Поэтому я думаю, вам не нужно «хранить» событие hotplug, потому что вся информация по-прежнему доступна в sysfs.Таким образом, решение выглядит примерно так:

  • запустить udev из initramfs
  • смонтировать настоящий root и переключить root
  • scan sysfs (udev делает это при запуске?)
  • нормальная работа (т.е. ожидание события горячего подключения)
...