8.3 Сборка корневой файловой системы

Предыдущая  Содержание  Следующая V*D*V

Теперь, когда мы ознакомились с процессом сборки ядра и приложений, следующим логическим шагом будет понять процесс создания корневой файловой системы. Как объяснялось в Главах 2 и 4, существуют три метода, которые можно использовать для этой цели:

 

Использование initrd/initramfs: initrd был подробно рассмотрен в Главах 2 и 4. В этом разделе мы обсудим initramfs. Для создания таких образов могут быть использованы скрипты, имеющиеся в конце этого раздела.

Монтаж корневой файловой системы по сети с использованием NFS: это имеет смысл на этапах разработки; все изменения могут делаться на базовой (хост) машине, на которой выполняется разработка, и корневая файловая система с базовой машины может быть смонтирована по сети. Подробности о монтировании корневой файловой системы с помощью NFS можно получить из документации, которая является частью дерева исходных кодов ядра и находится в каталоге Documentation/nfsroot.

Программирование корневой файловой системы во флеш-память: это делается на стадии производства. На базовой машине создаётся образ корневой файловой системы для запуска на целевой платформе (например, JFFS2 или CRAMFS), а затем он записывается во флеш-память. Различные инструменты, которые доступны для создания образов, описаны в Главе 4.

 

Универсальный сценарий initrd показывает Распечатка 8.3. Он используется так:

 

mkinitrd <rfs-folder> <ramdisk-size>

 

где

 

<rfs-folder> это абсолютный путь к родительскому каталогу, содержащему корневую файловую систему.

<ramdisk-size> является размером initrd.

 

Скрипт создаёт образ initrd /tmp/ramdisk.img, который может быть смонтирован на целевой платформе как файловая система ext2. Чтобы скопировать файлы из каталога с корневой системой <rfs-folder> в целевой образ /tmp/ramdisk.img, он использует петлевое устройство (loopback device) /dev/loop0.

Initramfs была введена в ядро версии 2.6, чтобы обеспечить раннее пространство пользователя. Идея заключалась в том, чтобы переместить много всего, выполняемого при инициализации, из ядра в пространство пользователя. Было решено, что такие части инициализации, как поиск корневого устройства, монтаж корневой файловой системы локально или по сети, и так далее, которые были частью последовательности загрузки ядра, могут быть легко выполнены в пространстве пользователя. Это упрощает ядро. Таким образом, для достижения этой цели была разработана initramfs.

Так же как вы можете смонтировать в качестве корневой файловой системы образ initrd, вы можете также аналогичным образом смонтировать в качестве корневой файловой системы образ initramfs. Initramfs основана на файловой системе RAMFS и initrd, базирующемся на электронном диске. Различия между RAMFS и виртуальным диском (ramdisk) показаны в Таблице 8.1.

 

Таблица 8.1 Сравнение RAMFS и RAMDISK

 

Виртуальный диск (RAMDISK)

RAMFS

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

RAMFS, с другой стороны, является файловой системой, реализованной непосредственно в оперативной памяти. Для каждого файла, созданного в RAMFS, ядро хранит данные файла и метаданные в кэшах ядра.

Перед использованием виртуального диска необходимо выделить место в оперативной памяти.

Нет необходимости предварительного выделения памяти, динамичный рост осуществляется по мере необходимости.

При запуске программ с электронного диска поддерживаются два экземпляра страниц программы: один на виртуальном диске, а другой в кэше страниц ядра.

При запуске программ из RAMFS всегда используется только одна копия, которая находится в кэше ядра. Дублирования нет.

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

RAMFS относительно быстрее, так как фактические данные и метаданные файлов находятся в кэше ядра, и нет накладных расходов, связанных с использованием файловой системы и драйвером блочного устройства.

 

Образ initramfs можно создать с помощью сценария mkinitramfs. Он используется так:

 

mkinitramfs <rfs-folder>

 

где <rfs-folder> это абсолютный путь к родительскому каталогу, содержащему корневую файловую систему. Для создания  образа initramfs необходимо создать архив cpio из <rfs-folder> с последующим архивированием с помощью gzip.

 

#!/bin/sh

 

#mkinitramfs

 

(cd $1 ; find . | cpio --quiet -o -H newc | gzip -9

                                 >/tmp/img.cpio.gz)

 

Предыдущая  Содержание  Следующая