mkifs
Построение
файловой
системы
образа ОС (QNX)
Синтаксис:
mkifs
[-a суффикс] [-l строка_ввода] [-n[n]] [-r
корневой_каталог]
[-s раздел] [-v]
[файл_построения_образа [файл_образа]]
Поддерживаемые
платформы:
QNX
Neutrino, Linux, Microsoft Windows
Опции:
-a суффикс
Добавить суффикс к
файлам идентификаторов, созданным с помощью [+keeplinked].
-l строка_ввода
("эль") До
начала интерпретации файла построения образа обработать строку_ввода.
Строки ввода, передаваемые утилите mkifs,
необходимо заключать в кавычки, чтобы предотвратить их
обработку командным интерпретатором (поскольку строки ввода
mkifs часто
содержат пробелы). Несколько опций -l
обрабатываются в заданном порядке. Значение по умолчанию
отсутствует.
-n[n]
Принудительно
установить время изменения для всех inline-файлов равным 0.
Если указать -nn, то
утилита mkifs
устанавливает время изменения всех файлов
равным 0.
При
добавлении файлов к образу IFS утилитой mkifs
используется информация о метке времени файла на
хост-компьютере. При создании inline-файла (отсутствующего
на хост-компьютере) утилитой mkifs
создается собственная информация о метке времени. По
умолчанию это время создания образа.
В
результате для двух идентичных сборок вычисляются два разных
значения контрольной суммы (поскольку время создания и время
изменения файла различаются). При использовании опции -n
значение контрольной суммы будет одинаковым для всех
идентичных сборок.
Опция -nn
позволяет решить проблему с переходом на летнее время,
свойственную NTFS. Эта опция принудительно устанавливает
время изменения для всех файлов
в образе IFS равным 0. Это обеспечивает вычисление
одинаковой контрольной суммы для всех последующих сборок
одного образа IFS.
-r корневой_каталог
Выполнить поиск
путей по умолчанию в каталоге корневой_каталог до их
поиска в местоположении по умолчанию. Обычно утилита mkifs
выполняет поиск путей по умолчанию в последовательности,
установленной переменной MKIFS_PATH,
описание которой приведено далее в этом разделе. Если
установлена опция - r, то
утилита mkifs
сначала выполняет поиск путей, в начале которых в качестве
префикса вместо ${QNX_TARGET}
указана переменная корневой_каталог, как в
следующих случаях:
-
корневой_каталог/${PROCESSOR}/sbin
-
все
другие пути по умолчанию, также с префиксом корневой_каталог
-
${QNX_TARGET}/${PROCESSOR}/sbin
-
все
другие стандартные пути по умолчанию с префиксом ${QNX_TARGET}
Структура путей
по каталогам в корневом_каталоге должна
в точности совпадать со структурой путей по умолчанию в ${QNX_TARGET}, но
сам корневой_каталог может
находиться по любому выбранному пути. Например, при
необходимости добавления следующего файла:
/dev/ppcbe/sbin/pci-ppc405
опцию следует
указать следующим образом:
-r /dev
Обратите внимание,
что ${PROCESSOR} не добавляется в
корневой_каталог.
Примечание.
Если установлен параметр MKIFS_PATH, то утилита mkifs
игнорирует опцию - r.
-s секция
Не удалять
указанную секцию из исполняемых файлов ELF при создании
образа IFS. Чтобы задать дополнительные секции, эту опцию
можно указать несколько раз.
Утилита
mkifs по
умолчанию не удаляет секции QNX_Phab
(ресурсы Photon), QNX_usage
(сообщение об использовании) и QNX_info
(свойства сборки).
-v
Вывести
расширенную информацию. Каждая дополнительная опция -v
обеспечивает вывод более подробной информации. Значение по
умолчанию – расширенная информация не выводится.
Описание:
Утилита
mkifs
используется для создания файловой системы образа ОС на
основе спецификаций файла построения образа.
Примечание.
Не следует путать эту команду с утилитой mkefs,
которая создает встраиваемую файловую систему, или
с утилитой mketfs, которая создает
встраиваемую транзакционную файловую систему (ETFS).
В
командной строке можно задать следующие файлы:
файл_построения_образа
Входной файл
построения образа, на основе которого утилита mkifs должна
создать образ. Используйте - , чтобы
указать стандартный поток ввода (по умолчанию).
файл_образа
Файл для
сохранения образа, построенного утилитой mkifs.
Используйте -, чтобы
указать стандартный поток вывода (по умолчанию). Следует
отметить, что файл_образа можно
указать только в том случае, если указан файл_построения_образа.
Файлы
построения образа
В файле
построения образа применяется та же грамматика, что для
команды mkefs, но
поддерживаются другие атрибуты.
В файле
построения образа приведен список файлов разных типов.
Утилита mkifs
помещает эти файлы в создаваемый образ. Кроме файлов,
которые требуется включить в файл образа, можно задать
различные атрибуты, используемые для установки параметров
файлов или образа в целом.
Примечание.
Использовать обратную косую черту (\) для
разбиения длинных строк на более короткие фрагменты
невозможно.
В файле
построения образа для определения начала комментария
используется символ решетки (#): все
символы после него и до конца строки игнорируются. Между
командой в файле построения образа и символом решетки
необходимо вставить пробел.
Все
строки имеют следующую форму:
[атрибуты]
спецификация_файла
причем атрибуты
(заключенные в квадратные скобки) и спецификацию файла
указывать необязательно.
Атрибут можно
использовать:
-
в
той же строке, что и имя файла: атрибут модифицирует
только этот файл;
-
на
отдельной строке: атрибут модифицирует все последующие
файлы.
Атрибуты должны
быть заключены в квадратные скобки. Для комбинирования
атрибутов (например, чтобы одновременно задать идентификатор
пользователя и
идентификатор группы) необходимо заключить маркеры обоих
атрибутов в одни и те же квадратные скобки. Пример.
# правильно
[uid=5 gid=5] имя
файла
# неправильно
[uid=5] [gid=5]
имя файла
Существуют
атрибуты двух типов:
булевы
атрибуты
Это атрибуты,
которым предшествует знак плюс ("+") или минус ("-").
атрибуты
значения
Это атрибуты,
которые заканчиваются знаком равенства ("="), а за ним
следует значение. Вставлять пробелы до и после знака
равенства не следует.
Вопросительный
знак (?) перед
атрибутом делает параметр условным. Атрибут устанавливается
только в том случае, если он еще не установлен. Например,
синтаксис ?+bigendian
устанавливает атрибут +bigendian только
в том случае, если атрибут +bigendian или -bigendian еще не
задан.
Аргумент
спецификация_файла принимает одну из следующих форм:
путь
Путь на хосте
совпадает с путем в образе.
путь_в_целевой_системе=путь_на_хосте
Указанный файл или
содержимое указанного каталога извлекается из файловой системы
хоста и помещается в образ.
путь_в_целевой_системе={содержимое}
Встроенное
определение. Содержимое файла приводится списком в самом
файле построения образ в фигурных скобках ({ }). Этот
файл на хосте не существует. Содержимое inline-файла не
может находиться в той же строке, что и открывающая или
закрывающая фигурная скобка.
Примечание.
Утилита
mkifs
выполняет синтаксический анализ содержимого inline-файла
только на предмет поиска закрывающей фигурной скобки.
Например, утилита mkifs не интерпретирует
знак решетки (#) в inline-файле как знак
начала комментария. Синтаксис inline-файла определяется его
назначением в целевой системе.
Закрывающие
фигурные
скобки
(})
и символы обратной косой черты (\) в
inline-файле необходимо экранировать обратной косой чертой.
Перед
любым классом файлов может быть указано несколько атрибутов
или ни одного атрибута. Эти атрибуты позволяют задать
характеристики файла (например, идентификатор
пользователя-владельца файла в целевой системе, тип файла и
т.д.).
Примечание.
По умолчанию утилита mkifs удаляет отладочную
информацию из исполняемых файлов, добавляемых в образ. Это
позволяет уменьшить размер образа. Для сохранения этой
информации укажите атрибут +raw.
Если
имя файла содержит пробелы или специальные символы, его
можно заключить в двойные кавычки ("").
Атрибуты
Команда
mkifs
поддерживает следующие атрибуты.
-
+|-autolink
-
+|-bigendian
-
cd=путь
-
chain=адрес
-
code=спецификация_uip
-
+|-compress
-
data=спецификация_uip
-
dperms=права_доступа_к_каталогу
-
filter=спецификация_фильтра
-
+|-followlink
-
gid=спецификация_идентификатора
-
image=спецификация_адресного_пространства
-
+|-keeplinked
-
linker= [
спецификация_идентификатора_компоновщика ]
спецификация_компоновщика
-
module=имя_модуля
-
+|-optional
-
+|-page_align
-
perms=права_доступа
-
physical=спецификация_загрузки
-
prefix=спецификация_префикса
-
ram=спецификация_адресного_пространства
-
+|-raw
-
+|-script
-
search=имя_файла:имя_файла:…
-
type=тип_файла
-
uid=спецификация_идентификатора
-
virtual=[имя_ЦП,]имя_загрузочного_файла [аргументы_фильтра]
Вертикальная
черта указывает на необходимость наличия либо первого, либо
второго элемента, но не обоих элементов одновременно
(например, запись "+|- bigendian"
означает "+bigendian или -bigendian, а не
+-bigendian").
Атрибут autolink
(булев)
+|-autolink
Если атрибут autolink
установлен (он установлен по умолчанию), то в случае
обнаружения утилитой mkifs
разделяемого объекта при обработке выполняется поиск в
образе имени SONAME
(заданного опцией -h
компоновщика). Обычно это имя разделяемого объекта,
включающее номер версии (например, libc.so.1).
Команда mkifs
помещает этот файл в файловую систему образа с именем,
содержащим номер версии, и вставляет имя без номера версии в
символьную ссылку на файл. Например, если указать:
libc.so
в файле построения
образа, то libc.so.1 становится именем
файла, а libc.so – символьной
ссылкой на него. Если указать
libc.so.1
в файле
построения образа, то результат будет тот же самый. В
результате в файловую систему образа добавляется имя с
номером версии и имя без него, вне зависимости от того,
какое имя было указано в файле построения образа.
Если
имя, которое требуется использовать в качестве символьной
ссылки, уже указано в другом месте в файле построения
образа, то символьная ссылка не создается. Пример:
libc.so.1
libc.so.2
[type=link]
libc.so=libc.so.2
В этом случае имя
libc.so указывает на
"правильную" версию библиотеки.
Эту функцию можно
отключить, указав атрибут -autolink.
Атрибут bigendian
(булев)
+|-bigendian
Установить
порядок байтов для файловой системы образа: либо обратный
порядок байтов (с использованием синтаксиса +bigendian), либо
прямой порядок байтов (с использованием синтаксиса -bigendian).
Обычно при создании загрузочного образа эту опцию
устанавливать необязательно, поскольку загрузочный файл
обеспечивает необходимый порядок байтов. Если создаваемая
файловая система не должна быть самозагружаемой или если в
загрузочном файле отсутствует информация о требуемом порядке
байтов, то при создании файловой системы образа утилита mkifs
использует порядок байтов системы хоста.
Атрибут cd
cd=путь
До попытки
открытия файла установить в качестве текущего рабочего
каталога каталог, расположенный по указанному пути. По
умолчанию определен каталог, из которого была вызвана
утилита mkifs.
Атрибут chain
chain=адрес
Определить адрес,
по которому операционная система найдет следующую файловую
систему образа. Адрес по умолчанию отсутствует.
Атрибут code
code=спецификация_uip
Определить
необходимость выполнения сегмента кода исполняемого файла
непосредственно из файловой системы образа (uip или u) или
будет осуществляться его копирования при вызове (copy или c).
Значение по умолчанию предусматривает выполнение сегмента
кода "на месте" (uip). Для
получения дополнительной информации см. раздел "Примечания
по "выполнению на месте" и копированию" далее.
Атрибут compress
(булев)
+|-compress[=алгоритм]
Определить
необходимость сжатия образа. Значение по умолчанию – ложь.
Если определить
необходимость сжатия, также можно дополнительно задать
алгоритм, указав его номер:
-
1 –
ZLIB
-
2 –
LZO
-
3 –
UCL8 (по умолчанию)
Атрибут data
data=спецификация_uip
Определить
необходимость выполнения сегмента данных исполняемого файла
непосредственно из файловой системы образа (uip или u) или
будет осуществляться его копирования при вызове (copy или c).
Значение по умолчанию предусматривает выполнение сегмента
данных "на месте" (uip). Для
получения дополнительной информации см. раздел "Примечания
по "выполнению на месте" и копированию" далее.
Атрибут dperms
dperms=права_доступа_к_каталогу
Установить права
доступа к каталогу. Для получения дополнительной информации
см. атрибут perms.
Атрибут filter
filter=спецификация_фильтра
Прогнать файл
через заданную программу-фильтр, используя данные файла как
стандартный поток ввода для программы, а данные стандартного
потока вывода программы – как данные, размещаемые в файловой
системе образа. По умолчанию фильтр не используется.
Для
демонстрации применения фильтра рассмотрим сохранение
сжатого файла в файловой системе образа, если файл
существует в распакованном виде в файловой системе хоста:
[filter="compress"]
data.Z
=
data
В результате
запускается команда compress из
командного интерпретатора, который в качестве стандартного
потока ввода передает содержимое data. При
выполнении команда compress
создает в своем стандартном потоке вывода сжатую версию
данных из стандартного потока ввода. Затем данные
стандартного потока вывода помещаются в файловую систему
образа в виде файла data.Z.
В
качестве значения спецификация_фильтра можно
указать значение none. Это
целесообразно при необходимости переопределения глобальной
спецификации фильтра.
Атрибут followlink
(булев)
[+|-followlink]путь_в_целевой_системе=путь_на_хосте
Если указать
атрибут +followlink или
опустить его, утилита mkifs
переходит по всем ссылкам и в качестве пути_в
целевой_системе использует
копию пути_на_хосте.
Если
указать атрибут -followlink,
утилита mkifs
создает ссылку путь_в_целевой_системе,
которая указывает на то же местоположение, на которое
указывает путь_на_хосте.
Пользователь сам должен убедиться, что файл, на который
указывает ссылка, находится в образе.
Атрибут gid
gid=спецификация_идентификатора
Установить
идентификатор группы для файла. В качестве значения этого
атрибута можно указать число или звездочку (*). Если указать в
качестве значения звездочку, то идентификатор группы берется
из файла хост-системы. Для inline-файла идентификатор группы –
это группа, в которую входит пользователь, запустивший утилиту
mkifs. Значение по
умолчанию для этого атрибута – *.
Атрибут image
image=спецификация_адресного_пространства
Установить
базовый адрес и предельные значения размера для файловой
системы образа. Формат атрибута: (необязательно) начальный
адрес, за которым следует несколько параметров, описывающих
размер адресного пространства или ни одного параметра. В
адресах и значениях размера можно использовать не зависящий
от регистра суффикс k, m или g.
Начальный
адрес
–
это базовый адрес образа. Он важен только при построении
загружаемого образа. Его значение по умолчанию зависит от
выбранного загрузочного файла. Например, если в системе x86
используется файл bios.boot, то
начальный адрес образа приходится на 4 МБ.
-конечный_адрес
Тире, за которым
следует число, соответствует конечному адресу, то есть
последнему допустимому адресу для образа. Если полученный
образ выходит за пределы области, указанной этим адресом,
выводится сообщение об ошибке. По умолчанию предельное
значение отсутствует.
,максимальный_размер
Запятая, за
которой следует число, соответствует максимальному
допустимому размеру образа. Если размер полученного образа
превышает это число, выводится сообщение об ошибке. По
умолчанию предельное значение отсутствует. Максимальный
размер образа зависит от конфигурации. Например, в системе
x86 с BIOS он может быть ограничен.
=полный_размер
Знак равенства,
за которым следует число, соответствует полному размеру, до
которого дополняется полученный образ. По умолчанию размер
образа не дополняется.
%выравнивание
Знак процента,
за которым следует число, соответствует значению
выравнивания, используемому для образа. Размер полученного
образа дополняется до величины, кратной этому значению.
Значение по умолчанию – 4.
Примечание.
Для создания образа в ROM/FLASH необходимо указать значения
для обоих атрибутов файла image и ram.
В противном случае менеджер процессов считает, что образ
находится в ОЗУ. Для получения дополнительной информации см.
раздел "Примечания по "выполнению на месте" и копированию"
далее.
Атрибут keeplinked
(булев)
+|-keeplinked
Если значение
атрибута истинное и для размещения исполняемого файла в
файловой системе образа утилита mkifs должна
запустить компоновщик, то имя выходного файла компоновщика
формируется из базового имени пути на хосте с добавлением .sym.
Например, если имя хоста – ../foo/bar, то
имя выходного файла будет bar.sym. Если
значение атрибута ложное, то для выходного файла
используется временно созданное имя, которое удаляется по
завершении выполнения утилиты mkifs.
Значение по умолчанию – ложь.
Атрибут linker
linker=[спецификация_идентификатора_компоновщика]спецификация_компоновщика
При создании
загружаемого образа утилите mkifs иногда
требуется запускать компоновщик для организации перемещаемых
объектов внутри образа. Эта опция позволяет указать
макрорасширения, аналогичные printf для
определения способа создания командной строки компоновщика
утилитой mkifs (для
получения дополнительной информации см. раздел
"Характеристика компоновщика" далее).
Обычно
эту опцию указывать необязательно, поскольку утилита mkifs или
загрузочный файл содержат значения по умолчанию. Для файлов
ELF разных типов можно использовать различные компоновщики.
Значение
атрибута
состоит
из необязательной спецификации идентификатора компоновщика и
спецификации компоновщика. Указываемая спецификация
идентификатора компоновщика должна состоять из следующих
компонентов:
-
Открывающая
скобка
(.
-
Список
разделенных
запятыми допустимых машинных номеров (типов целевых
систем) ELF (константы EM_* из включаемого файла) для
спецификации компоновщика. Список номеров завершается
точкой с запятой.
-
Список
разделенных
запятыми допустимых типов файлов ELF (константы ET_* из
файла ). Этот список завершается точкой с запятой.
-
Список
разделенных
запятыми типов сегментов программ ELF (константы PT_*,
также из файла ).
-
Закрывающая
скобка
).
Если указана
спецификация идентификатора, то спецификация компоновщика
используется только в том случае, если машинный номер во
входном файле ELF совпадает с одним из указанных номеров и тип
входного файла ELF совпадает с одним из указанных чисел и по
меньшей мере один тип сегмента программы во входном файле
совпадает с одним из указанных чисел:
-
Если
пуст
список машинных номеров, допустимым является любой тип
номера во входном файле.
-
Если
пуст
список номеров сегментов программ, допустимыми являются
любые типы сегментов программы во входном файле.
-
Если
пуст
список номеров типов файлов ELF, предполагается, что
следует использовать ET_REL.
Атрибут module
module=имя_модуля
Этот атрибут
используется для добавления к procnto
дополнительных модулей.
Например,
для
использования
диспетчера адаптивной декомпозиции необходимо повторно
построить образ ОС с использованием опции [module=aps],
добавив ее к оператору PATH= в
файле построения образа:
[module=aps]
PATH=/proc/boot
./procnto
-vv
Теперь можно
создавать разделы и запускать приложения для диспетчера
адаптивной декомпозиции внутри определенного раздела.
Для
получения информации о создании разделов см. раздел
"Creating partitions" ("Создание разделов") в главе "Setting
Up and Using the Adaptive Partitioning Scheduler"
("Настройка и использование диспетчера адаптивной
декомпозиции") в «Руководства
системного программиста (администратора)» КПДА.10964-01 32, в
разделе по адаптивной
декомпозиции.
Для
получения дополнительной информации о запуске приложений
внутри определенного раздела см. раздел "Launch processes in
partitions" ("Запуск процессов в разделах") в главе "Setting
Up and Using the Adaptive Partitioning Scheduler"
("Настройка и использование диспетчера адаптивной
декомпозиции") в «Руководства
системного программиста (администратора)» КПДА.10964-01 32 в
разделе по адаптивной
декомпозиции.
Примечание.
Этот атрибут был добавлен в ОС QNX Neutrino Core OS 6.3.2.
Атрибут optional
(булев)
+|-optional
Если значение
атрибута истинное и при этом не удается найти файл в
хост-системе, то вывести предупреждающее сообщение и
продолжить создание файловой системы образа. Если значение
атрибута ложное и при этом не удается найти файл в
хост-системе, то вывести сообщение об ошибке и завершить
работу утилиты mkifs.
Значение по умолчанию – истина. Присвоить значение "истина"
этому атрибуту для исполняемых файлов начальной загрузки
невозможно (для получения дополнительной информации см.
атрибут virtual).
Атрибут page_align
(булев)
+|-page_align
Если атрибут
принимает значение "истина", выровнять файл по границе
странице. Утилита mkifs всегда
выравнивает исполняемые файлы и разделяемые объекты по
границам страницы, поэтому этот атрибут влияет только на
файлы данных и файлы, для которых указан атрибут +raw.
Атрибут perms
perms=права_доступа
Установить права
доступа к файлу. Аргумент права_доступа может
принимать одно из следующих значений:
-
число
(в
точности как для команды chmod);
-
звездочка
(*),
использовать права доступа файла хост-системы (или 0666
для inline-файлов);
-
строка
символьного
режима для удаления, добавления или установки прав; эта
строка является подмножеством chmod и
состоит из следующих компонентов:
-
сочетание
символов
u, g, o и a;
-
символ -, = или +;
-
сочетание
символов
r, w, x, s, g и t.
Можно
указать несколько строк символьного режима с разделением
запятой (,).
Значение по
умолчанию – *.
Примечание.
При запуске на хосте под управлением Windows утилита mkifs
не может получить из файла права на выполнение (x),
setuid ("set user ID") или setgid ("set group ID").
Используйте атрибут perms, чтобы явно задать
эти права. Возможно, также потребуется использовать атрибуты
uid
и gid для корректной установки
принадлежности. В целях определения необходимости установки
для утилиты прав setuid или setgid см. описание этой утилиты
в руководстве по утилитам.
Атрибут physical
physical=[имя_ЦП,]имя_загрузочного_файла
[аргументы_фильтра]
Этот атрибут
указывает на то, что создается самозагружаемая файловая
система. Его можно указать только один раз в файле
построения образа. Образ будет запущен в режиме физической
памяти.
Примечание.
Атрибут physical пока не реализован.
Используйте атрибут virtual.
Для
получения дополнительной информации см. атрибут virtual.
Атрибут prefix
prefix=спецификация_префикса
Установить
префикс для имен целевых файлов. При построении загружаемого
образа значение по умолчанию – proc/boot. В
противном случае по умолчанию задается пустая строка.
Атрибут ram
ram=специкация_адресного_пространства
Установить
базовый адрес и предельные значения размера памяти для
считывания и записи, используемой исполняемыми файлами в
файловой системе образа. Формат атрибута: (необязательно)
начальный адрес, за которым следует несколько параметров,
описывающих размер адресного пространства или ни одного
параметра. В адресах и значениях размера можно использовать
не зависящий от регистра суффикс k, m или g.
Примечание.
Для создания образа в ROM/FLASH необходимо указать
значения для обоих атрибутов файла image и ram.
В противном случае менеджер процессов считает, что образ
находится в ОЗУ. Для получения дополнительной информации
см. раздел "Примечания по "выполнению на месте" и
копированию" далее.
Этот
атрибут необходимо задать, если предполагается хранить
фактический образ в устройстве, предназначенном только для
чтения (например, в ПЗУ или флэш-памяти). Для определения
местоположения используется атрибут image.
Начальный
адрес
указывает
на базовый адрес ОЗУ и важен только при построении
загружаемого образа. Его значение по умолчанию зависит от
выбранного загрузочного файла.
-конечный_адрес
Тире, за которым
следует число, соответствует конечному адресу, то есть
последнему допустимому адресу для ОЗУ. Если потребление ОЗУ
выходит за пределы этого адреса, выводится сообщение об
ошибке. По умолчанию предельное значение отсутствует.
,максимальный_размер
Запятая, за
которой следует число, соответствует максимальному допустимому
размеру ОЗУ. Если полученный образ потребляет объем ОЗУ,
превышающий это число, выводится сообщение об ошибке. По
умолчанию предельное значение отсутствует. Максимальный размер
ОЗУ зависит от конфигурации.
=полный_размер
Знак равенства,
за которым следует число, соответствует полному размеру, до
которого дополняется потребление ОЗУ. По умолчанию не
дополняется.
%выравнивание
Знак процента,
за которым следует число, соответствует значению
выравнивания, используемому для ОЗУ. Размер ОЗУ дополняется
до величины, кратной этому значению. Значение по умолчанию –
4.
Для
получения информации о взаимодействии всех этих параметров
см. раздел "Примечания по "выполнению на месте" и
копированию" далее.
Атрибут raw
(булев)
+|-raw
Если атрибуту raw
принимает ложное значение (установлено по умолчанию), то
утилита mkifs
удаляет отладочную информацию из исполняемых файлов.
Если
для файла указан атрибут +raw, то
этот файл обрабатывается как файл данных, даже если в
противном случае он был бы обработан как исполняемый файл и
перемещен.
Примечание.
Не следует указывать атрибут +raw для
разделяемых объектов: в этом случае совместный доступ к этим
объектам не предоставляется.
Рассмотрим
фрагмент
файла
построения образа, в котором демонстрируется процедура
использования и область применения атрибута raw:
…
[+raw] # Не
удалять информацию об использовании, отладочную информацию
othello # или
ресурсы Photon из двоичных файлов
[-raw] esh #
Относится только к esh
pwm # По-прежнему
действует флаг +raw
pfm
[-raw] # Отключить
+raw, поскольку при использовании +raw совместный доступ
libphrender.so # к
разделяемым объектам невозможен
libph.so
[+raw] my_ph_app #
Использовать Ресурсы Photon только
#
для этого файла. Флаг -raw
#
по-прежнему действует для других файлов.
libc.so #
По-прежнему действует флаг -raw
…
Примечание.
Если для построения образа используются средства Windows, то
при начальной загрузке образа для файлов с атрибутом +raw
устанавливается запрет на выполнение. Это происходит по
причине того, что в файловой системе win32 отсутствует
возможность установки бита выполнения для файла. Для
обеспечения возможности выполнения этих файлов укажите при
использовании в файле построения образа атрибута +raw
атрибут perms=+x.
Атрибут script
(булев)
+|-script
Если значение
атрибута истинное, то после самоинициализации менеджера
процессов открывается файл, который обрабатывается как файл
сценария. Синтаксический анализ каждой строки выполняется
как анализ командной строки, которую необходимо выполнить.
Если атрибут +script
установлен для нескольких файлов, то впоследствии в файловой
системе образа они объединяется в один файл. В качестве
имени этого файла используется первое имя файла сценария в
файле построения образа. Имена файлов для последующих файлов
сценариев игнорируются, но они должны быть уникальными. Для
получения дополнительной информации о синтаксисе командной
строки см. в разделе "Файлы сценариев" далее.
Атрибут search
search=имя_файла:имя_файла:…
Этот атрибут
определяет для утилиты mkifs
необходимость поиска файла в указанных папках хост-системы.
Часть имени файла хоста с именем каталога поиска не
добавляется к имени, хранящемуся в файловой системе образа.
По умолчанию используется содержимое переменной среды MKIFS_PATH.
Примечание.
Такие разделители как двоеточие, и косая черта в пути
соответствуют стандартным соглашениям об именовании Unix,
однако для поиска в системе Windows необходимо использовать
стандартные правила именования Windows (например,
разделитель в виде точки с запятой и обратная косая черта в
пути).
Атрибут type
type=тип_файла
Установить тип
файлов, создаваемых в файловой системе образа. Допустимые типы
файлов:
-
link –
символьная ссылка;
-
fifo –
указанный конвейер;
-
file –
стандартный, обычный файл (по умолчанию);
-
dir –
каталог.
Примечание.
Значение [type=dir] означает, что утилита mkifs
должна создать каталог в целевой системе. При копировании
содержимого каталога указывать тип необязательно. Например,
для копирования каталога /usr/nto/x86/bin
в каталог /usr/bin необходимо указать:
/usr/bin=/usr/nto/x86/bin
Атрибут uid
uid=спецификация_идентификатора
Установить
идентификатор пользователя для файла. В качестве значения
этого атрибута можно указать число или звездочку (*). Если
указать в качестве значения звездочку, то идентификатор
пользователя берется из файла хост-системы. Для inline-файла
идентификатор пользователя – это пользователь, запустивший
утилиту mkifs.
Значение по умолчанию для этого атрибута – *.
Атрибут virtual
virtual=[имя_ЦП,]имя_загрузочного_файла
[аргументы_фильтра]
Этот атрибут
указывает на то, что создается система виртуальной
адресации.
Если
значение содержит запятую (,) или
косую черту (/),
предполагается, что строка перед ним принимается за тип ЦП
целевой системы. Если тип ЦП не задан, утилита mkifs
использует тип ЦП системы хоста. Этой строке присваивается
переменная среды PROCESSOR
(которая определяет путь поиска MKIFS_PATH для
файлов хостов).
Символы
после запятой или косой черты (или знака равенства для
атрибута, если отсутствует запятая или косая черта) вплоть
до первого пустого символа считаются именем загрузочного
файла. К данному имени добавляется суффикс .boot, и для
этого файла выполняется поиск по MKIFS_PATH.
Загрузочные файлы по умолчанию находятся в каталоге ${QNX_TARGET}/${PROCESSOR}/boot/sys.
Загрузочные файлы зависят от процессора, однако далее
приведен список основных таких файлов:
binary.boot
Создать простой
двоичный образ (без команды перехода, добавляемой raw.boot). Если
при создании двоичного образа его требуется загрузить при
помощи U-Boot (или другой программы загрузки), необходимо
выполнить mkifs
-vvvv buildfile imagefile, чтобы
определить фактический начальный адрес, а затем при запуске
образа передать этот начальный адрес начальному загрузчику.
Если изменить код программы начальной инициализации
(startup), начальный адрес может измениться, поэтому
необходимо определять его каждый раз. В случае
необработанного двоичного образа (raw.boot),
начальный
загрузчик
может просто осуществить переход по тому же адресу, в
который был загружен образ.
bios.boot
Создать образ,
подходящий для компьютеров с BIOS. Информация, собранная из
BIOS, передается программе начальной инициализации startup.
bios16m.boot
Не проверять
память за пределами 16 МБ. Использовать этот загрузочный
файл в случае более ранних версий BIOS, в которых возникают
проблемы с такой памятью.
bios_nokbd.boot
Игнорировать
контроллер клавиатуры. Этот загрузочный файл используется,
если BIOS не поддерживает и не эмулирует должным образом
устаревшие функции контроллеров клавиатуры по адресу 0x64.
elf.boot
Создать образ,
который выглядит как исполняемый файл ELF.
nobios.boot
Создать образ,
подходящий для компьютеров без BIOS.
openbios.boot
Создать образ для
OpenBIOS от корпорации IBM.
prepboot.boot
Создать образ,
загружаемый с диска компьютера PREP.
raw.boot
Создать двоичный
образ с использованием последовательности команд в начале
для перехода к точке смещения виртуальный_адрес_секции_запуска
в пределах заголовка программы начальной инициализации
startup. Благодаря этому при загрузке необработанного образа
в память с помощью начального загрузчика можно просто
передать управление непосредственно на начало образа вместо
определения фактического значения виртуальный_адрес_секции_запуска
при каждом изменении кода программы начальной инициализации
startup.
srec.boot
Создать образ в
формате S-record.
Для
получения дополнительной информации о содержимом этого файла
см. раздел "Загрузочный файл" далее.
Все
символы в значении атрибута после пробела используются в
качестве аргументов любой команды фильтрации образа,
указанной в загрузочном файле, как в следующем примере:
[virtual="x86,srec
-b"]
boot
= {
Примечание.
Если значение атрибута virtual
содержит пробел, заключите строку в кавычки. В противном
случае утилита mkifs попытается
интерпретировать это значение как дополнительный атрибут
файла построения образа, помещенный в те же квадратные
скобки.
Содержимое
файла
хоста,
к которому относится этот атрибут, подвергается
синтаксическому анализу в целях поиска исполняемых файлов
начальной загрузки, которые используются для построения
системы. Каждая строка соответствует одному исполняемому
файлу начальной загрузки:
-
Первым
исполняемым
файлом должна быть программа начальной инициализации
(startup) QNX Neutrino (startup-*),
подходящая для целевой системы. Для получения
дополнительной информации см. startup-*.
-
Последним
должен
быть указан файл procnto.
Если переменные среды PATH и
LD_LIBRARY_PATH
указаны до procnto,
то их значения по умолчанию задаются в образе ОС.
Файлы
сценариев
Как
было упомянуто ранее, атрибут [+script]
означает для утилиты mkifs, что
указанный файл является файлом
сценария, т.е.
последовательностью команд, которые необходимо выполнить,
когда запустится менеджер процессов.
Примечание.
Для запуска команды на момент выполнения сценария должен
быть доступен соответствующий исполняемый файл. Исполняемый
файл можно добавить в образ или получить его из файловой
системы, запущенной до того момента, когда потребовался
исполняемый файл. Второй подход позволяет получить образ
меньшего размера.
По
большей части файлы сценариев выглядят как обычные сценарии
командного интерпретатора за несколькими исключениями:
-
в
них есть специальные модификаторы, которые можно
разместить до
фактических исполняемых команд;
-
некоторые
команды
считаются встроенными;
-
mkifs
выполняет предварительный синтаксический анализ файла
сценария до помещения его в образ.
Файл сценария
состоит из одной или нескольких строк, к каждой из которых
применяется следующий синтаксис:
[модификаторы]
[командная_строка [&]]
Модификаторы
– это список элементов, разделенных пробелами и заключенных
в квадратные скобки, которые изменяют способ запуска
указанной командной_строки в QNX Neutrino. Если
после модификаторов указана командная строка, то они влияют
только на эту командную строку. Если командная строка не
указана, то модификаторы применяются ко всем последующим
командным строкам.
Примечание.
Если указать после командной строки знак амперсанда (&),
то программа запускается в фоновом режиме, при этом Neutrino
не ожидает завершения программы до перехода к следующей
строке сценария.
Далее
описаны модификаторы. Если модификаторы описаны как
“булевы”, то для их установки или отмены используется знак
плюс (+) или
минус (-). Для
остальных модификаторов используются параметры.
Модификатор argv0
Установить
элемент argv[0] в
записи аргумента команды. По умолчанию он совпадает с именем
команды. Как правило, эта опция используется для
моделирования вызова команды с использованием другого имени.
Классическим примером является команда compress,
которую можно вызвать как uncompress:
[argv0=uncompress]
compress filename.Z
Модификатор cpu
Определяет
ЦП,
на
котором следует запускать следующий процесс (или, если
атрибут указан в строке без команды, определяет ЦП по
умолчанию для всех последующих процессов). Этот модификатор
удобно использовать для определения исключительной
мультипроцессорности (Bound Multiprocessing, BMP). ЦП
следует указывать как номер процессора, начинающийся с нуля.
[cpu=0]
my_program
Значение * обеспечивает
запуск процессов на всех процессорах:
[cpu=*]
my_program
Если во время
загрузки процессор с данным номером не обнаружен, то
выводится предупреждающее сообщение и команда запускается
без ограничения, определяемого процессорной маской.
Примечание.
В силу ограничений в записях загрузочного образа этот
синтаксис позволяет указать только один ЦП, а не более общую
процессорную маску. Для порождения процесса в пределах
полностью заданной процессорной маски используется утилита on.
Модификатор external
(булев)
В
нормальном режиме утилита mkifs
распознает определенные команды как внутренние
команды. Это команды,
которые не загружаются из файловой системы хоста, но
непосредственно интерпретируются утилитой mkifs. К ним
относятся следующие команды:
display_msg сообщение
Вывод сообщения,
следующего непосредственно после команды display_msg. Эту
команду целесообразно использовать при выполнении
диагностики запуска системы. Часто применяется в качестве
контрольной точки.
procmgr_symlink
Аналогична команде
ln -P, за тем
исключением, что можно не указывать ln.
reopen [имя_файла]
Перенаправление
стандартных потоков ввода, вывода и ошибок в указанный файл.
Временная приостановка интерпретации файла сценария до
успешного выполнения stat() по
указанному путевому имени. Имя файла по умолчанию: /dev/console.
waitfor путевое_имя [время_ожидания]
Временная
приостановка файла сценария до успешного выполнения stat() по
указанному путевому имени. Часто используется для
синхронизации, чтобы разрешить менеджеру ресурсов выполнить
инициализацию, а затем
перейти к дальнейшей интерпретации файла сценария.
Дополнительный
параметр время_ожидания задает максимальное время
ожидания в секундах до появления файла. Это значение может
иметь один знак после запятой, задающий десятые доли
секунды. Значение по умолчанию – 5,0 секунд.
Модификатор
+external дает
утилите mkifs
инструкцию искать указанную команду в файловой системе
хоста, не используя внутреннее значение команды. Значение по
умолчанию: -external.
Примечание.
Польза от использования модификатора +external
сомнительна. Модификатор external
будет лишним для команд, которые не являются внутренними.
Модификатор pri
Позволяет
задать
приоритет
команды и дополнительно алгоритм диспетчеризации.
Модификатор pri
допускает числовой приоритет, за которым может следовать
одна из следующих букв:
f
Алгоритм
диспетчеризации FIFO.
r
Алгоритм
циклической диспетчеризации (round-robin).
o
Другой алгоритм
диспетчеризации (в настоящий момент определен как
циклический).
Описание
различных
уровней
приоритета и алгоритмов диспетчеризации приведено в
руководстве по системной архитектуре.
Например,
для
запуска
драйвера консоли devc-con с
приоритетом 20 с диспетчеризацией FIFO укажите:
[pri=20f]
devc-con
-n9
&
Значение по
умолчанию для этого модификатора совпадает со значением по
умолчанию для procnto.
Модификатор session
(булев)
Значение
+session
определяет процесс как лидер сеанса (в соответствии с
POSIX), а стандартный поток ввода stdin
процесса – управляющим терминалом (т.е. направляет Ctrl-C всей
группе процессов). Значение -session
определяет процесс не как лидер сеанса. Значение по
умолчанию – -session.
Обычно
этот параметр используется для командного интерпретатора:
[+session]
esh
Загрузочный
файл
При
построении загружаемой файловой системы необходимо указать
загрузочный файл с использованием атрибута physical или virtual.
Следует помнить, что спецификация загрузочного файла должна
располагаться в начале файла построения образа. Если первым
символом загрузочного файла является открывающая квадратная
скобка ([), то
приводится список атрибутов конфигурации с тем же
синтаксисом, что и для файла построения образа. Список
атрибутов завершается закрывающей квадратной скобкой (]).
Допустимые атрибуты и их форматы:
attr=атрибут_образа
Указать атрибут
для добавления к образу. Эти атрибуты обрабатываются после
опции командной строки -l
("эль") и файла построения образа, но для атрибута_образа обычно
используется префикс ?, чтобы
предотвратить переопределение свойст, явно заданных опцией -l или
файлом построения образа.
default_image=спецификация_адресного_пространства
Установить
значение по умолчанию для атрибута файла image (см. выше).
default_ram=спецификация_адресного_пространства
Установить
значение по умолчанию для атрибута файла ram (см. выше).
filter=спецификация_фильтра_образа
Запустить спецификацию_фильтра_образа
после создания образа. Следующие коды форматирования
расширены:
-
%i –
имя полученного файла образа.
-
%I
(прописная буква "i") – имя входного файла (см. далее).
-
%s –
смещение заголовка секции запуска в файле образа в
шестнадцатеричном формате с начальными 0x.
-
%a –
любой аргумент из атрибута physical
или virtual.
См. пример использования спецификации_фильтра_образа в разделе
"Фильтр образов" далее.
len=длина_загрузочной_записи
Параметр длина_загрузочной_записи
определяет объем пространства, которое необходимо оставить
перед файлом образа (перед фактической файловой системой
образа) для сохранения сведений системного заголовка или
кода префикса начальной загрузки. Это минимальный
резервируемый объем пространства. Если код префикса
начальной записи, следующий за атрибутами загрузочного
файла, превышает заданное здесь значение, вместо него
используется размер кода префикса начальной загрузки.
Значение по умолчанию – 0.
notloaded=длина
В некоторых
системах (например, IBM OpenBIOS) сведения системного
заголовка не загружаются в память и не добавляют смещение
памяти, где хранится информация (базовый адрес образа
устанавливается атрибутом image в
файле построения образа). Этот атрибут определяет объем
информации, незагружаемой в память. Значение по умолчанию –
0.
paddr_bias=число
В некоторых ЦП
(например, MIPS) аппаратное обеспечение резервирует диапазон
виртуальных адресов, однозначно соответствующих физическим
адресам. Этот атрибут информирует утилиту mkifs о
способе преобразования виртуального адреса в соответствующий
физический адрес в памяти по формуле:
phys_addr = виртуальный_адрес
+ число
Значение по
умолчанию – 0.
pagesize=размер
Установить
размер страницы в файловой системе образа. Утилита mkifs
выравнивает разные структуры до величины, кратной этому
значению. Значение по умолчанию – 4 KB.
vboot=адрес
Иногда, при
построении виртуальной системы, инициализация устройства
подкачки страниц памяти осуществляется программой начальной
инициализации startup (например, в архитектуре x86), а не в
ядре procnto (как
например, в архитектуре MIPS). В первом случае эта опция
сообщает утилите mkifs, какой
базовый виртуальный адрес следует использовать для
исполняемых файлов во время начальной загрузки. Эта опция не
влияет на построение физической системы. Адрес по умолчанию
отсутствует.
Достигнув
символа
закрывающей
квадратной скобки (]) после
списка атрибутов загрузочного файла, утилита mkifs
выполняет поиск строки boot. Если
такая строка найдена, то утилита mkifs
считает, что все данные, непосредственно следующие после нее
и до конца файла, являются кодом префикса начальной
загрузки. Эти данные помещаются в начало файла образа. Если
был задан атрибут len и его
величина превышает размер кода префикса начальной загрузки,
размер файла образа дополняется до указанного размера.
Фильтр образов
В файле
построения загрузочного образа можно задать фильтр образов и
дополнительно указать для него макрорасширения. Сведения об
этих макрорасширениях приведены выше в описании атрибута filter.
В
настоящее время доступны следующие фильтры образов:
mkifsf_elf
Упаковать весь
образ в секцию ELF.
mkifsf_openbios
Исправить
заголовок в начале образа для OpenBIOS от корпорации IBM.
mkifsf_srec
Преобразовать
образ в формат S-Record. Для этого фильтра можно использовать
следующие опции:
-
-b –
создать только 4-байтовые адресные записи.
-
-c –
опустить символ возврата каретки в конце строк.
-
-l –
опустить символ перехода на новую строку в конце строк.
Обычно
предполагается, что фильтры берут файл, заданный переменной
%i, и
изменяют его "на месте". Если это невозможно (например, в
результате применения программы-фильтра изменяется размер
файла), укажите значение %I, чтобы
утилита mkifs
сохранила исходный файл с временным именем файла (это имя
задается переменной %I) и
ожидала измененный файл с именем, заданным переменной %i. Это
происходит только в том случае, если указано макрорасширение
%I.
Спецификация
компоновщика
Спецификация
компоновщика
позволяет
управлять формированием командной строки компоновщика, когда
утилите mkifs
необходимо преобразовать перемещаемый объект в исполняемый
файл, запускаемый по определенному адресу. Во многом она
используется аналогично строке формата printf(), при
этом символы копируются из формата в командную строку, пока
не будет найден символ процента (%).
Поддерживаются следующие коды форматирования после символа
процента:
%h
Адрес, по которому
следует поместить заголовок исполняемой программы в
шестнадцатеричном формате.
%t
Адрес, по
которому следует поместить текстовый сегмент в
шестнадцатеричном формате. Это %h плюс
объем пространства для структур заголовка исполняемых
файлов.
%d
Адрес, по
которому следует поместить сегмент данных в
шестнадцатеричном формате. Это значение может быть равно
нулю. В этом случае данные размещаются непосредственно за
текстовым сегментом.
%o
Имя полученного
исполняемого файла в виде строки.
%i
Имя входного
перемещаемого файла в виде строки.
%(
Открыть условную
секцию. После открывающей скобки (
указываются следующие символы: один символ, указывающий на
переменную, которая определяет условие для секции, затем
один из обычных условных операторов языка C, потом константа
и, наконец, запятая.
Значение
переменной
сравнивается
с константой и, если в результат сравнения истинный, то в
создаваемую командную строку добавляется текст, следующий за
запятой. Если результат сравнения ложный, то содержимое
строки после запятой опускается.
Условный
оператор
завершается
символом процента, за которым следует закрывающая скобка %).
Условные выражения можно вкладывать друг в друга.
Переменные, которые допускается использовать в условной
секции:
-
Переменная
|
Значение
|
e
|
0 ==
прямой порядок байтов
1 == обратный порядок байтов
|
d
|
Адрес
сегмента
данных
|
f
|
0 ==
файл запуска
1 == файл начальной загрузки
2 == обычный файл
|
h
|
Адрес
заголовка
исполняемого файла
|
m
|
Номер
машины
из заголовка ELF
|
v
|
0 ==
файл с физической связью
1 == файл с виртуальной связью
|
V
|
0 ==
физическая система
1 == виртуальная система
|
%)
Завершить условную
секцию.
Рассмотрим
спецификацию команды компоновщика по умолчанию для mkifs:
static char
default_linker[] = {
"qcc"
"
-bootstrap -nostdlib -Wl,--no-keep-memory -Vgcc_nto"
"%(m==3,x86%)%(m==6,x86%)"
"%(m==8,mips%)"
"%(m==20,ppc%)"
"%(m==40,arm%)"
"%(m==42,sh%)"
"%(m!=3,%(m!=6,%(e==0,
-EL%)%(e==1, -EB%)%)%)"
"%(h!=0,
-Wl,-Ttext -Wl,0x%t%)%(d!=0, -Wl,-Tdata -Wl,0x%d%)"
"
-o%o %i"
"%[M
-L%^i -Wl,-uinit_%n -lmod_%n%]"
};
Значение указанных
параметров приведено в разделе gcc.
Выходной формат
образа
Образ, созданный
утилитой mkifs, имеет следующую
структуру:
-
Префикс
начальной
загрузки создается на основе загрузочного файла,
указанного с использованием атрибута virtual=
или physical=.
-
Префикс
начальной
загрузки, заголовок секции запуска, секция запуска
(программа начальной инициализации startup) и
завершитель секции запуска присутствуют только в
загружаемом образе.
-
Контрольная
сумма
секции запуска хранится в завершителе секции запуска.
-
Контрольная
сумма
для образа хранится в завершителе образа.
Хотя для
создания образа не требуется детально понимать его формат,
желательно получить общее представление о нем.
Префикс
начальной загрузки
В
первой секции (которая называется префиксом
начальной загрузки)
размещается загрузочный файл, указанный в атрибуте virtual= или physical=. Для
многих систем префикс начальной загрузки в образе не
звключается. Если он присутствует, то обычно используется
для решения одной из следующих проблем:
-
Код
начальной загрузки (IPL), передающий управление в образ,
не переводит процессор в состояние, необходимое для
нормальной работы программы начальной инициализации
(startup). Данная секция содержит код, который
исправляет эту ситуацию. Если используется собственный
код начальной загрузки (IPL), обеспечивающий перевод
процессора в соответствующее состояние,
необходимость в секции начальной загрузки отпадает.
Хорошим
примером,
подтверждающим необходимость добавления сюда кода,
является начальная загрузка на стандартном ПК x86. При
загрузке ПК, этот код передает управление в 16-битовом
реальном режиме. Программа начальной инициализации
(startup) предполагает, что процессор работает в
32-битовом защищенном режиме. Поэтому образ с загрузкой
из BIOS ПК содержит код, переключающий процессор в
32-битный защищенный режим. Этот код также выполняет
серию вызовов BIOS для сбора информации из BIOS,
поскольку программа запуска в защищенном режиме сама не
может выполнять вызовы BIOS.
-
Образ
упаковывается
или инкапсулируется внутри другой структуры данных,
используемой начальным загрузчиком. Для обеспечения
правильного выравнивания исполняемых программ по
границам страницы утилите mkifs
необходимо знать размер упаковщика в начале образа. В
этом случае утилита mkifs
создает заполненную нулями область в префиксе начальной
загрузки, который изменяется внешней программой
(фильтром образов) на этапе постобработки образа.
В
качестве примера можно привести начальную загрузку по
сети, в ходе которой необходимо упаковать образ в некий
объект, который целиком загружается в память на целевом
устройстве (например, в структуры объектных файлов ELF).
В этом случае внешняя программа создает копию образа,
добавляя информацию в его начало и, возможно, в конец.
Если префикс упаковщика имеет небольшой фиксированный
размер, то может потребоваться добавить префикс
начальной загрузки, заполненный нулями, который сможет
перезаписать внешняя программа. В результате отпадает
необходимость создания копии большого образа для
упаковщика.
Заголовок
секции запуска
Эта
секция содержит информацию об образе, используемую начальным
загрузчиком или программой запуска (IPL).
Часть
этой секции записывается утилитой mkifs.
Другой части присваивается нулевое значение. Информация в
нее записывается кодом начальной загрузки (IPL) для передачи
данных (определяемых во время выполнения IPL) программе
начальной инициализации startup. Эти данные представляют
собой набор структур (для получения дополнительной
информации см. главу "Customizing IPL Programs" ("Настройка
начальных загрузчиков") в документе Building
Embedded Systems
("Создание встраиваемых систем")).
Если
образ не является самозагружаемым, эта секция опускается.
Запуск
(программа начальной инициализации startup)
В этом
разделе содержится код и данные для программы начальной
инициализации startup. Этот код должен быть выполнен из ОЗУ.
Если образ содержится в ПЗУ/флэш-памяти, то стандартный код
начальной загрузки (стандартный IPL) использует информацию
из заголовка секции запуска, чтобы скопировать программу
начальной инициализации startup в ОЗУ и передать ей
управление.
Если
образ не является самозагружаемым, эта секция опускается.
Завершитель
секции запуска
Контрольная
сумма
для
программы начальной инициализации startup. Если образ не
является самозагружаемым, эта секция опускается.
Заголовок
образа
Информация
о
следующей
за ним файловой системе.
Каталог образа
Набор
записей каталога для каждого файла в файловой системе
образа.
Файлы
Файлы в
файловой системе образа. Исполняемые файлы, запускаемые "на
месте", выравниваются по границам страницы. Выполняется
попытка заполнить все пропуски, возникшие в результате
такого выравнивания, небольшими файлами данных, для которых
отсутствует необходимость выравнивания.
Завершитель
образа
Контрольная
сумма
для
образа.
Примечания
по
"выполнению
на месте" (XIP) и копированию
К
исполняемым файлам в образе можно применить атрибуты code=copy|uip и data=copy|uip.
Примечание.
В настоящее время к разделяемым объектам применяются
атрибуты code=uip и data=copy.
Для обеспечения результата применения атрибута code=copy
вручную скопируйте разделяемый объект в папку /dev/shmem
и соответствующим образом задайте переменную LD_LIBRARY_PATH.
Для экономии места в ПЗУ/флэш- памяти выполните сжатие
разделяемых объектов в файловой системе образа и распакуйте
его в каталог /dev/shmem.
При
запуске исполняемого файла эти атрибуты определяют
необходимость выполнения кода или данных для этой
исполняемой программы "на месте" или их копирования в ОЗУ.
Файловая система образа может существовать либо в ОЗУ, либо
в ПЗУ/флэш-памяти с линейной адресацией. Образы в ОЗУ обычно
загружаются с устройства, на котором не поддерживается
линейная адресация. К ним относятся начальная загрузка с
диска, начальная загрузка по сети и начальная загрузка с
устройств ПЗУ/флэш-памяти с коммутацией блоков памяти. К ним
также относятся все сжатые образы.
Например,
сжатый
образ
может находиться во флэш-памяти с линейной адресацией, но
его невозможно использовать, пока он не будет распакован в
ОЗУ. Для любого образа в ОЗУ существуют следующие
комбинации:
Код
|
Данные
|
Комментарии
|
uip
|
uip
|
Однократное
выполнение
(по умолчанию)
|
uip
|
copy
|
Многократное
выполнение
|
copy
|
uip
|
Однократное
выполнение,
неэффективное использование ресурсов
|
copy
|
copy
|
Многократное
выполнение,
неэффективное использование ресурсов
|
Значение по
умолчанию предполагает, что требуется выполнить "на месте" и
код, и данные. Такой способ подходит для исполняемых файлов,
содержащих большое количество статических данных, которые
необходимо выполнить только один раз (например, для
менеджера ресурсов или драйвера, запускаемых при начальной
загрузке системы). При выполнении данных "на месте"
изменяется единственная копия данных программы, поэтому
запустить программу повторно невозможно.
Примечание.
В этом случае sticky-бит файла не устанавливается. Это
указывает менеджеру процессов QNX Neutrino на исполняемые
файлы, менеджер процессов предотвращает повторный запуск
программы и устраняет возможность запуска программы с
поврежденными статическими данными.
Поэтому
для многократного запуска исполняемого файла необходимо
задать атрибут data=copy.
Два
случая, помеченные как "неэффективное использование
ресурсов", не описаны в комбинациях, но они не предоставляют
дополнительные возможности и неэффективно используют память,
копируя в нее код без необходимости. Поскольку код доступен
только для чтения и изменить его невозможно, то его в любом
случае можно выполнить "на месте".
При
создании образа в ПЗУ/флэш-памяти существуют следующие
комбинации:
Код
|
Данные
|
Комментарии
|
uip
|
uip
|
Однократное
выполнение
|
uip
|
copy
|
Многократное
выполнение
(по умолчанию)
|
copy
|
uip
|
Однократное
выполнение
|
copy
|
copy
|
Многократное
выполнение
(медленный доступ к ПЗУ/флэш-памяти)
|
Примечание.
Для создания образа в ROM/FLASH необходимо указать значения
для обоих атрибутов файла image и ram.
В противном случае менеджер процессов считает, что образ
находится в ОЗУ. Для образа в ПЗУ/флэш-памяти предполагается
атрибут data=copy.
Случаи,
когда код копируется, могут показаться неэффективным
использованием ресурсов (как в примере с образом в ОЗУ), но
это может оказаться целесообразным для систем с медленным
доступом к ПЗУ/флэш-памяти (например, при наличии 8-битового
интерфейса или при необходимости дополнительных состояний
ожидания для доступа к этим устройствам). В этом случае
может потребоваться скопировать код в ОЗУ для более быстрого
его выполнения.
Примеры:
Рассмотрим
простой
файл
построения образа, в котором указан драйвер консоли и
командный интерпретатор:
[virtual=x86,bios]
.bootstrap = {
startup-bios
PATH=/proc/boot
procnto
}
[+script] .script
= {
devc-con
-n9 &
reopen
/dev/con1
[+session]
esh &
}
libc.so
[data=copy]
devc-con
esh
[type=link]
/usr/lib/ldqnx.so.2=/proc/boot/libc.so
Примечание.
Ожидается, что компоновщик среды выполнения, находится в
файле ldqnx.so.2, но в настоящее время
компоновщик среды выполнения находится в файле libc.so,
поэтому необходимо создать символьную ссылку на него для
менеджера процессов.
Теперь
можно построить образ с помощью описанных выше команд
следующим образом (предположим, что файл построения образа
называется simple.bld и что
образ будет называться simple.ifs):
mkifs
simple.bld simple.ifs
Ниже приведен
пример файла построения образа с поддержкой диска EIDE:
[virtual=x86,bios
+compress] .bootstrap = {
startup-bios
PATH=/proc/boot
procnto
}
[+script] .script
= {
devc-con
-e &
devb-eide
&
reopen
/dev/con1
[+session]
PATH=/proc/boot esh &
}
libc.so
libcam.so
cam-disk.so
io-blk.so
fs-qnx4.so
[data=copy]
devc-con
esh
ls
devb-eide
[type=link]
/usr/lib/ldqnx.so.2=/proc/boot/libc.so.3
В следующий
пример добавлен inline-файл /etc/hosts для
разрешения адресов, которые используются во время начальной
загрузки такими программами, как fs-nfs3. В нем
также демонстрируются способы передачи переменных среды
разным командам:
Примечание.
В реальном файле построения образа не допускается разбиение
длинных строк на более короткие с помощью символа обратной
косой черты (\), однако в данном примере
этот прием используется для упрощения восприятия.
[image=0x1f0000]
[virtual=ppcbe,raw]
.bootstrap
=
{
startup-mtx604-smp
-v -Nmtx604-5 -D0x800003f8^0.9600
PATH=/proc/boot:/bin:/usr/bin:/sbin:/usr/sbin
\
LD_LIBRARY_PATH=/proc/boot:/lib:/usr/lib:/lib/dll
\
procnto-600-smp -v
}
[+script]
startup-script = {
#
Для экономии памяти все процессы используют libc из
загрузочного
#
образа! Для повышения скорости (меньше разыменований
символических ссылок)
#
указываем на libc.so.3 вместо libc.so.
procmgr_symlink
../../proc/boot/libc.so.3 /usr/lib/ldqnx.so.2
pci-raven
&
waitfor
/dev/pci
io-pkt-v4
-dtulip irq=2,media=9,vid=0x1011,did=0x9 -ptcpip &
if_up
-p en0
ifconfig
en0 mtx604-5 up
if_up
en0
fs-nfs3
-ru ra:/my_system /my_system &
waitfor
/my_system/target/qnx6/ppcbe/usr/sbin/slogger 360
#
установка переменных среды
TZ=est05edt04
procmgr_symlink
/my_system/target/qnx6/ppcbe/bin /bin
procmgr_symlink
/my_system/target/qnx6/ppcbe/lib /lib
procmgr_symlink
/my_system/target/qnx6/ppcbe/sbin /sbin
procmgr_symlink
/my_system/target/qnx6/ppcbe/usr/bin /usr/bin
procmgr_symlink
/my_system/target/qnx6/ppcbe/usr/sbin /usr/sbin
procmgr_symlink
/my_system/target/qnx6/ppcbe/usr/lib /usr/lib
procmgr_symlink
/my_system/target/qnx6/etc /etc
slogger
&
waitfor
/dev/slog
devc-ser8250
-e -c1846200 -b 9600 0x800003f8,104 0x800002f8,103 &
waitfor
/dev/ser1
pipe
&
waitfor
/dev/pipe
devc-pty
&
waitfor
/dev/ptyp0
mqueue
&
inetd
&
tinit
}
[type=link] /tmp =
/dev/shmem
[type=link]
/dev/con1 = /dev/ser1
# Создание файлов
данных в указанном каталоге
/etc/hosts = {
127.0.0.1
localhost
192.168.1.1 ra
192.168.1.111
mtx604-5
}
# Добавить текущую
библиотеку libc.so. Она создается как реальный файл
# с использованием
соответствующего внутреннего SONAME, а libc.so устанавливается
как
# символьная
ссылка на нее. Символьная ссылка указывает на последнюю версию
libc.so.*,
# поэтому если
требуется использовать более раннюю версию libc (например,
libc.so.2),
# ее следует
добавить перед libc.so.
libc.so.2
libc.so
devn-tulip.so
libsocket.so
[data=uip]
pci-raven
io-pkt-v4
[data=copy]
if_up
ifconfig
fs-nfs3
Дополнительные
примеры см. в каталоге ${QNX_TARGET}/${PROCESSOR}/build.
Переменные
среды:
PROCESSOR
Определяет
целевую архитектуру процессора. Если значение переменной не
установлено, то в качестве значения по умолчанию
используется ЦП, установленный в текущей системе (например,
x86).
MKIFS_PATH
Разделенный
двоеточиями список каталогов, в которых выполняется поиск
файлов хостов, которые необходимо добавить в образ. Значение
по умолчанию состоит из следующих элементов:
-
Текущий
рабочий
каталог, если имя файла содержит символ косой черты (/),
но не начинается с него.
-
${QNX_TARGET}/${PROCESSOR}/sbin
-
${QNX_TARGET}/${PROCESSOR}/usr/sbin
-
${QNX_TARGET}/${PROCESSOR}/boot/sys
-
${QNX_TARGET}/${PROCESSOR}/bin
-
${QNX_TARGET}/${PROCESSOR}/usr/bin
-
${QNX_TARGET}/${PROCESSOR}/lib
-
${QNX_TARGET}/${PROCESSOR}/lib/dll
-
${QNX_TARGET}/${PROCESSOR}/usr/lib
-
${QNX_TARGET}/${PROCESSOR}/usr/photon/bin
Статус
завершения:
0
Завершено успешно.
1
Возникла ошибка.