Почему бы нам не включить драйверы файловой системы в само ядро ​​вместо использования Initrd / Initramfs

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

2
09.03.2019, 16:04
2 ответа

Это немного проблема курицы и яйца ... Вы можете (и обычно должны) позволить большинству ваших драйверов быть модулями, это сохраняет ваше ядро ​​компактным и экономит память (до тех пор, пока вам не понадобится модуль). Однако вам и нужны некоторые драйверы, встроенные в ваше ядро ​​- специально для любого устройства, с которого вы загружаетесь (например, дисковода компакт-дисков, жесткого диска, ...), используемой файловой системы (например, .iso9660, ext4, ...) и любые дополнительные драйверы, необходимые для поддержки этого (например, поддержка USB, поддержка SCSI, ...). Если вы не , ваше ядро ​​не сможет получить доступ к носителю и файловой системе, где находятся модули для дополнительных драйверов, и, следовательно, не сможет загрузить их в ядро.

Если вы создаете индивидуальное ядро ​​для своей собственной системы - где вы заранее знаете, какое у вас оборудование (тип жесткого диска, тип DVD-привода и т. Д.) - это не проблема. Вам просто нужны драйверы для того, что у вас действительно есть или может вам понадобиться. И вам нужно только включить в ядро ​​драйверы, необходимые во время загрузки.

Однако, если вы создаете установочный диск для дистрибутива, вы должны включить драйверы для всего возможного оборудования, с которым могут столкнуться пользователи! Включение их всех в ядро ​​сделало бы ядро ​​безнадежно раздутым и потребовало бы слишком много оперативной памяти на слабых системах. Сделать все драйверы модулями не получится, потому что модули могут понадобиться для их загрузки. Решение - initrd !

initrd - это образ RAM-диска, который загружается в память при запуске. Все драйверы, которые могут понадобиться, лежат на нем в виде модулей.Пока ядро ​​включает драйверы для чтения DVD, чтения файловой системы на DVD и чтения RAM-диска; он сможет получить доступ и загрузить по запросу модули драйверов из initrd. Это решает проблему для тех, кто делает дистрибутивы, чтобы сделать ядро ​​одновременно маленьким и включать драйверы для любого оборудования, на котором оно может работать.

Большинство пользователей, вероятно, продолжат использовать initrd-boot после того, как они установили Linux на свои жесткие диски ... На самом деле это не обязательно, поскольку они могут создать собственное ядро ​​- возможно, с дополнительными модулями ядра - настроенное для оборудования, которое они на самом деле получил. Двухэтапный процесс первой загрузки initrd требует немного дополнительного времени во время загрузки.

2
27.01.2020, 21:59

Во-первых, дело не только в драйверах файловой системы. Это также драйверы для любого устройства хранения, на котором находится файловая система. И, возможно, даже больше, если вы используете LVM, шифрование и т. Д.

Тем не менее, определенно возможно встроить их в ядро. Я знаю, что в Slackware по крайней мере есть выбор ядра под названием «огромный», который делает именно это и не требует initramfs для типичного оборудования ПК.

Обратной стороной является то, что такое ядро ​​должно включать в себя все, что может понадобиться: все возможные файловые системы, которые могут использоваться как root, драйверы устройств для всего, что может содержать эту файловую систему, и т. Д. Таким образом, вы получаете раздутое ядро, которое содержит много неиспользуемого кода и расходует память.

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

Ответ на правки:

  1. Наверное, это зависит от того, кого вы спрашиваете и в каком контексте. Для меня это все, что работает в пространстве ядра, включая все драйверы. Разработчик ядра может иметь другое представление с большим количеством имен для разных частей.

  2. Фактически, подавляющая часть кода ядра - это загружаемые модули и драйверы. Некоторые из них довольно большие. В моей системе только btrfs имеет сжатие на 500 КБ. NFS почти такой же большой. ext4 составляет 300 КБ. Существует огромное количество поддерживаемых запоминающих устройств, и вам может понадобиться любое из них для получения корневой файловой системы. Просто просмотрите / lib / modules / * / kernel / drivers / в системе Linux, и вы увидите.

2
27.01.2020, 21:59

Теги

Похожие вопросы