initrd / initramfs является необязательным и не обязательным. bzImage - это чистый образ ядра, который может быть загружен непосредственно загрузчиком. Однако может потребоваться выполнение некоторых задач (загрузка модулей файловой системы, драйверов для доступа к диску, монтирование корневой файловой системы с некоторых сменных носителей без фиксированного имени / пути и т. Д.), Которые обычно требуют доступа к файловой системе и инструментам пользовательского пространства.
Вот для чего initramfs : Это архив CPIO, который присоединяется к образу ядра (образ ядра является контейнером для initramfs, а не наоборот) либо в самом образе ядра, либо загрузчиком во время загрузки.
Этот архив CPIO содержит начальные rootfs с модулями, необходимыми для настройки всех устройств для доступа к соответствующей корневой файловой системе, и некоторыми программами для идентификации этих устройств, загрузки модулей, выполнения некоторых других задач запуска, перемонтирования соответствующей корневой файловой системы в / и start / sbin / init
initrd аналогичен, с основным отличием в том, что это образ файловой системы, который может быть и обычно является сжатым. Ядро должно иметь встроенную поддержку используемой файловой системы и будет монтировать этот образ как начальный /.
Поскольку CPIO проще на несколько порядков, initramfs предпочтительнее, чем initrd, так как это избавляет от необходимости для любых встроенных модулей файловой системы, а также облегчает создание initramfs. Вместо того чтобы создавать образ ext2, монтировать loopdevice и заполнять его, он сводится к простому созданию архива, мало чем отличающемуся от использования tar.
Однако, если вы компилируете свое ядро со всеми необходимыми драйверами и модулями, встроенными в образ ядра, и ваше устройство корневой файловой системы имеет фиксированное имя в системе, вам не нужен initramfs, поскольку ядро может что-то делать самостоятельно, тогда .