Почему slowusb и скандал?

Я запускаю linux-3.4.9, скомпилированный с genkernel, и загрузка с USB-накопителя. Меня немного раздражал процесс медленной загрузки, в частности, во время выполнения сценариев genkernel на этапе modprobe & mdev.

Поэтому, загрузив модули, кажется, что они ждут фиксированного количества времени для инициализации устройств. Есть ли для этого глубокая причина? Почему бы просто не подождать, пока появится конкретное корневое устройство? Или мое понимание ситуации совершенно неверно?

Первое, что нужно учитывать здесь, это то, что, поскольку вы можете загрузиться с USB, это означает, что BIOS вашего компьютера поддерживает загрузку с USB-устройства. Это, в свою очередь, означает, что BIOS имеет встроенную прошивку, включающую стек протоколов USB, и может управлять целевым устройством, таким как USB-накопитель через универсальную последовательную шину. После установления протокола USB-связи между USB-хостом (ПК, который необходимо загрузить) и USB-гаджета (USB-накопитель) механизм управления и данных, предоставляемый USB, можно абстрагировать, а верхние уровни загрузочного кода BIOS могут обрабатывайте USB-накопитель так же, как и внутренний жесткий диск. То есть, первый сектор «дисковода» должен быть прочитан, чтобы получить его главную загрузочную запись (MBR).

Однако некоторые проблемы, подобные вашим, начинаются из-за некоторых изменений, внесенных в способ инициализации USB. Прежде всего, каждый usb имел время спада в 100 мс в качестве части инициализации. Однако новые USB-устройства используют механизм замедленной работы для планирования следующей инициализации шаг 100 мс в будущем. Для ядер, которые имеют встроенный USB-интерфейс, это позволяет загрузочному потоку выполнять другую работу, а не блокировать ожидания этих задержек. Однако ядра, которые не имеют этой функции, занимают больше времени для загрузки из-за изменения будущей задержки.