startup-*

Модули инициализации и запуска систем

Синтаксис:

startup-* [универсальные опции библиотеки libstartup] [опции конкретного модуля инициализации]

Платформы:

ЗОСРВ «Нейтрино»

Целевые архитектуры:

arm, armv7, e2k, mips, ppc, x86

Опции:

Все модули инициализации систем в ЗОСРВ «Нейтрино» слинкованы с одной из стандартных библиотек libstartup и поддерживают её набор универсальных опций. Также у любого из них могут существовать дополнительные эксклюзивные опции. В данной статье рассматриваются универсальные опции библиотек и опции модулей, входящих в состав дистрибутива:

Универсальные опции библиотеки libstartup
CPU-специфичные опции библиотеки libstartup
ARM-специфичные опции
PowerPC-специфичные опции
x86-специфичные опции
Опции конкретных startup-* модулей
x86/startup-bios
x86/startup-bios-nmi
x86/startup-apic
x86/startup-uefi
e2k/startup-elbrus


Note: Модули инициализации, входящие в состав различных BSP, в данном руководстве не рассматриваются.


Caution: Различные модули инициализации могут перекрывать универсальные опции, а также поддерживать дополнительные, специфичные для конкретных систем, опции. Приоритет действия следующий:
  1. Опции модулей инициализации для конкретных архитектур/систем.
  2. Опции библиотеки для конкретных архитектур.
  3. Универсальные опции библиотеки.

Универсальные опции библиотеки libstartup

-A
Перезагрузить систему при любом незапланированном завершении работы ядра. По умолчанию выводится информация об отказе, затем выполняется останов.
-C
Включить защищенный режим работы libstartup, при котором происходит зануление всей памяти, выделяемой с помощью alloc_ram().

Note: При передаче управления ядру данный механизм утрачивает актуальность, поскольку выделение памяти в startup прекращается.

-D канал[.опции_канала]
Указать канал вывода для отладочной информации. Подробнее см. далее.
-F [~]значение
Управление полем флаги в разделе cpuinfo системной страницы:
-f [частота_ЦП][,[частота_циклов][,частота_таймера]]
Задать частоту процессора. Все частоты можно задавать в герцах (с суффиксом H), килогерцах (с суффиксом K) и мегагерцах (с суффиксом M); в суффиксах регистр не учитывается. Если суффиксы не указаны, значение обрабатывается библиотекой, как указанное в мегагерцах, если оно меньше 1000, в противном случае – в герцах. Если они указаны, то аргументы частота_ЦП, частота_циклов и частота_таймера используются для установки следующих величин в коде запуска: Если в момент определения поля (полей) системной страницы какая-либо из переменных оказывается равной нулю, библиотека пытается рассчитать корректное значение на основе одной из других заданных частот. Выбор переменной, используемой для расчета, зависит от конкретного процессора и оборудования.
-I флаг
Включить восстановление ядра как часть восстановления IFS. Если опция задана, восстановление будет активировано. Значение флаг дополнительно запрещает (0) или разрешает (1`) проверку по контрольной сумме. Если проверка по контрольной сумме включена и не проходит, система будет перезагружена.

Note: Даже если проверка контрольной суммы IFS выключена, контрольное суммирование все равно используется для внутренней структуры данных восстановления IFS (примерно 32 байта), чтобы обеспечить хотя бы некоторую целостность данных.

-i размер_ifs2[,флаги][,физадр_ист][,физадр_назн]
Включить восстановление вторичного IFS. Аргументы:
размер_ifs2
Размер вторичного IFS (может быть больше реального размера).
флаги
  • Не заданы — загрузить вторичный IFS, но не пытаться восстановить при пробуждении.
  • R — загрузить вторичный IFS и восстановить.
  • K или RK — загрузить вторичный IFS и восстановить по контрольной сумме.
физадр_ист
  • Не задан — вторичный IFS расположен во флэш-памяти после первичной IFS.
  • Задан — вторичный IFS расположен по указанному физическому адресу.
физадр_назн
  • Не задан — вторичный IFS будет скопирован в область RAM по умолчанию.
  • Задан — вторичный IFS будет скопирован по указанному физическому адресу (адрес должен быть в «безопасном» месте, например, в конце RAM, подальше от места размещения первичного образа).

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

Note: Даже если проверка контрольной суммы IFS выключена, контрольное суммирование все равно используется для внутренней структуры данных восстановления IFS (примерно 16 байтов), чтобы обеспечить хотя бы некоторую целостность данных.

-j адрес
Используется при работе с отладчиками JTAG/аппаратными отладчиками. Зарезервировать 4 байта ОЗУ по физическому адресу, заданному аргументом адрес, и скопировать физический адрес системной страницы по адресу адрес в ОЗУ; в результате этот адрес становится доступным аппаратному отладчику.
-K канал[.опции канала]
Указать канал вывода для информации отладчика ядра. Подробнее см. далее.
-M адрес,размер[,тип]
Добавить диапазон памяти определенного типа с явно указанным физическим адресом и размером. Доступные типы памяти:
MEMTYPE_RAM == 1
Оперативная память.
MEMTYPE_NONE
MEMTYPE_IMAGEFSYS
MEMTYPE_BOOTRAM
MEMTYPE_RESERVED
MEMTYPE_IOMEM
MEMTYPE_FLASHFSYS
Не поддерживаются, оставлены в коде для совместимости с предыдущими реализациями libstartup.
-N имя_хоста
Указать имя узла. Значение по умолчанию – локальный хост (см. _CS_HOSTNAME)
-o цикл,накладные_расходы
Предустановить калибровочный денные (цикл – длительность пустого цикла на 100 итераций и накладные_расходы), которые будут храниться в системной странице. Чтобы ускорить запуск и уменьшить jitter, nanospin_calibrate() будет стремиться прочитать данные калибровки из системной страницы, а не вычислять их "на лету".
-P макс_число_ЦП
Указать максимальное количество процессоров, активируемых в многоядерной системе. Эту опцию удобно использовать для тестирования работы приложений в системе с меньшим количеством процессоров. Для этой опции требуется использовать procnto-smp вместо procnto. Значение не может быть отрицательным или быть больше 32. В противном случае опция игнорируется.
-R размер[,выравнивание]
Запретить использование системой блока физической памяти указанного размера; дополнительно можно задать выравнивание. Адрес начал этого блока будет совпадать с максимальным доступным физическим адресом, фактическое значение можно узнать через системную страницу. Эту опцию удобно использовать для тестирования в среде с ограниченным объемом памяти. Размер и выравнивание можно указывать в байтах, в килобайтах (с суффиксом K или k), мегабайтах (с суффиксом M или m), гигабайтах (с суффиксом G или g). Опция может быть задана лишь единожды, повторная передача переопределяет предыдущую.
-r адрес,размер[,флаг]
Запретить использование указанного размера памяти системой, начиная с физического адреса адрес. С помощью необязательного аргумента флаг можно выполнять очистку памяти:
-S [~]раздел
Включить (при значении ~раздел – выключить) вывод информации из указанного раздела syspage. Используется для ограничения объема выводимой информации из syspage.
-T
Не устанавливать время в startup (влияет на qtime->boot_time).
-v[v]...
Вывести расширенную информацию. Чем больше символов v, тем более подробная информация выводится.
-Z
Установить флаг QTIME_FLAG_TICKLESS.

CPU-специфичные опции библиотеки libstartup

Библиотека libstartup поддерживает ряд функциональных возможностей, актуальны лишь для определенных процессорных архитектур.

ARM-специфичные опции

-w значение
Задать политику кэширования: Реальное поведение зависит от процессора – не все процессоры поддерживают все три режима кэширования. Если процессор не поддерживает установленную опцию, используется политика кэширования по умолчанию. Поддерживаемые политики кэширования перечислены в конфигурационном файле процессора armv_chip_xxxx.c:
Поле: Определяет кодировку PTE для:
pte Политики кэширования по умолчанию
pte_wb Политики кэширования с отложенной записью
pte_wa Политики кэширования при записи
pte_wt Политики кэширования с прямой записью
В конфигурации должно быть указано по-крайней мере поле по умолчанию (pte). Любая неподдерживаемая политика должна иметь значение 0 в соответствующем поле, и если эта политика запрашивается через параметр -w, она игнорируется, и используется политика по умолчанию.

PowerPC-специфичные опции

-E
Сохранять и восстанавливать регистр внешнего доступа (EAR) в контексте при переключении потоков. EAR - опциональный регистр, доступный на некоторых чипах семейства PPC600. Если чип его поддерживает, то может его сохранять и восстанавливать, но инструкции, которые на него ссылаются, используются редко. Поэтому он остается вне контекста потока из соображений производительности до указания опции -E.
-x
Включить расширенную адресацию. Это позволяет получить доступ к физическим адресам выше 4 ГБ. Опция поддерживается для обратной совместимости; XAE включен по умолчанию, если чип ее поддерживает.

x86-специфичные опции

-0
(Актуально для startup-apic и startup-uefi) Использовать прерывание 0 для таймера 8254. В большинстве систем таймер 8254 в режиме APIC использует прерывание 2, опция -0 позволяет указать использовать прерывание 0 для исключительных случаев.
Опция -0 поддерживается, начиная с ЗОСРВ «Нейтрино» редакции 2021
-8
Включить альтернативный механизм перезагрузки для чипсетов ICH.
Опция -8 поддерживается, начиная с ЗОСРВ «Нейтрино» редакции 2021
-B
По умолчанию стартапы x86 используют таблицу ACPI (от англ. Advanced Control and Power Interface) для определения количества логических процессоров в системах с гиперпоточностью. Используйте эту опцию, чтобы избежать проверки ACPI в случае ошибки BIOS; если ACPI отсутствует или указана опция -B, стартап использует спецификацию Intel Multiprocessor для определения количества процессоров.
-e
Расширить область 1-к-1 с 256Мб до 384Мб. Данная опция необходима для систем, на которых используется больше 64Гб ОЗУ.
Опция -e поддерживается, начиная с ЗОСРВ «Нейтрино» редакции 2021
-q номер_профиля_прерываний
(Актуально для startup-apic и startup-uefi) Явно указать профиль прерываний, который будет использован при настройке полярности и режима переключения IOAPIC прерываний. По умолчанию используется профиль 6 (первые 16 прерываний по фронту). Профиль 5 позволяет явно указать настройку первых 16 прерываний по уровню. Профиль 7 указывает использовать информацию из MPTable для настройки полярности и режима переключения прерываний
Опция -q поддерживается, начиная с ЗОСРВ «Нейтрино» редакции 2021
-x
Разрешить расширенную адресацию и доступ к физическим адресам выше 4 ГБ (соответствует поведению по умолчанию). Переопределяет поведение опции -X.

Note: Эта опция действует только в том случае, если процессор поддерживает более 32 линий адреса. Для поддержки расширенной адресации на процессорах x86 необходим установленный бит X86_CPU_PAE на странице SYSPAGE_ENTRY( cpuinfo )->flags.

-X
Запретить расширенную адресацию. Переопределяет поведение опции -x.

Опции конкретных startup-* модулей

Опции модулей инициализации для конкретных архитектур/систем, с указанием актуальных систем.

x86/startup-bios

Модуль инициализации для x86-систем, использующих классический BIOS. В основном он применим к достаточно старым системам или полностью совместимым с ними.


Note: startup-bios-32 – версия данного модуля, использующая исключительно 32-битную адресацию. Если процессор не поддерживает расширенную адресацию, это может оказаться актуально.

Опции:

-b
Не резервировать младшие 4 КБ памяти для виртуального режима 8086. Эта опция позволяет освободить 4 КБ памяти для системы.
-c
Подгрузка в знакогенератор графического контроллера консольного шрифта с поддержкой кириллицы (IBM866).
-I прерывание
Установить для аппаратного прерывания наивысший приоритет в системе. Возможные значения – от 0 до 7 (по умолчанию 3).

Caution: Обратите внимание, что данная опция переопределяет одноименную опцию библиотеки libstartup.

-i irq1,irq2
Настройка прерываний для AMD Elan SC400.

Caution: Обратите внимание, что данная опция переопределяет одноименную опцию библиотеки libstartup.

-L
Включить поддержку прерываний локальных APIC (X86_INTR_APIC_* definitions in <x86/intr.h>).
-m
Устаревшая опция.
-s размер
Копировать указанный объем ПЗУ видеокарты в ОЗУ и установить ссылки в таблицах страниц x86 на копию в ОЗУ вместо ПЗУ. Размер можно указывать в байтах, в килобайтах (с суффиксом K), мегабайтах (с суффиксом M), гигабайтах (с суффиксом G). Если указана опция -s, то выполняется вызов x86_pcbios_shadow_rom( 0xc0000, размер ).

x86/startup-bios-nmi

Модуль инициализации для x86-систем, использующих классический BIOS с поддержкой Non-Maskable Interrupt. Это исключительно ретро-системы.


Note: startup-bios-nmi-32 – версия данного модуля, использующая исключительно 32-битную адресацию. Если процессор не поддерживает расширенную адресацию, это может оказаться актуально.

Опции:

-b
-c
-I прерывание
-i irq1,irq2
-L
-m
-s размер
Соответствуют одноименным опциям startup-bios.

x86/startup-apic

Модуль инициализации для современных x86-систем, совместимых с классическим BIOS и поддерживающих Intel Advanced Programmable Interrupt Controllers (APIC). В основном он применим в системах, способных работать как в Legacy (BIOS) режиме, так и в режиме UEFI (последний должен быть отключен).


Note: startup-apic-32 – версия данного модуля, использующая исключительно 32-битную адресацию. Если процессор не поддерживает расширенную адресацию, это может оказаться актуально.

Опции:

-a
Явное указание отключить использование SMI для систем на базе чипсетов AMD.
Опция -a поддерживается, начиная с ЗОСРВ «Нейтрино» редакции 2021
-b
-c
-m
Соответствуют одноименным опциям startup-bios.
-p шина:устройство:функция
Явно добавить адрес LPC или B2SB устройства к списку поиска. Адрес задается в формате: номер шины PCI:номер устройства:номер функции, например B0:D31:F2.
-s размер
Соответствует одноименной опции startup-bios.
-z[z]...
Явное указание используемого таймера. По умолчанию, стартовый модуль самостоятельно определяет поддерживаемый таймер и инициализирует его для дальнейшего использования в качестве системного таймера. Определение подходящего таймера происходит в следующем порядке LAPIC, HPET, 8254. Опция -z указывает использовать таймер 8254, -zz — использовать HPET.

x86/startup-uefi

Модуль инициализации для современных x86-систем, использующих UEFI. Он применим в системах, использующих в качестве основного режима UEFI (наличие поддержки Legacy (BIOS) режима не принципиально, но в данном случае он должен быть отключен).


Note: startup-uefi-32 – версия данного модуля, использующая исключительно 32-битную адресацию. Если процессор не поддерживает расширенную адресацию, это может оказаться актуально.

В ЗОСРВ «Нейтрино» редакции 2021 обеспечена поддержка установки в UEFI-системах

Опции:

-a
Соответствует одноименной опции startup-apic.
-b
-m
Соответствуют одноименным опциям startup-bios.
-p шина:устройство:функция
Соответствует одноименной опции startup-apic.
-s размер
Соответствует одноименной опции startup-bios.
-z[z]...
Соответствует одноименной опции startup-apic.

e2k/startup-elbrus

Модуль инициализации для систем с архитектурой e2k (Эльбрус).

Опции:

-d вариант
Переопределение используемого powerdown callout. По умолчанию способ выключения питания детектируется автоматически, в зависимости от типа CPU. Параметр вариант может принимать следующие значения:
spmc
ltc2954
Способ выключения питания.
Опция -d поддерживается, начиная с ЗОСРВ «Нейтрино» редакции 2021

Описание:

Модуль инициализации startup-bios обеспечивает проверку аппаратных ресурсов PC посредством BIOS.

Модуль инициализации startup-apic обеспечивает запуск устройств, которые поддерживают Intel Advanced Programmable Interrupt Controllers (APIC). Он поддерживает прерывания, инициируемые сообщениями (MSI) и расширенную версию MSI (MSI-X).


Caution: При запуске startup-apic необходимо использовать pci-bios-v2 вместо pci-bios, но он все равно должен называться pci-bios для корректной работы перечислителей. В файле построения pci-bios-v2 следует добавить так:

pci-bios=pci-bios-v2


Каналы отладки:

Канал отладки, указанный в опциях -D и -K, может быть следующим:

8250[.порт[^сдвиг][.боды[.частота[.делитель]]]]

Использовать микросхему последовательного канала, совместимую с 8250, со следующими параметрами:

порт
Указать базовый адрес порта ввода-вывода для 8250 в шестнадцатеричном формате. Значение по умолчанию: 3f8.
сдвиг
Установить сдвиг между регистрами ввода-вывода в байтах, в формате: 2 в степени сдвиг. Значение по умолчанию – 0.
боды
Указать скорость передачи в бодах для канала отладки. Значение по умолчанию – 57600.
частота
Указать входную тактовую частоту (в Гц) для микросхемы. Значение по умолчанию – 1843200.
делитель
Указать делитель для тактовой частоты микросхемы. Значение по умолчанию – 16.
console
Использовать консоль PC.

Опции можно пропускать (не указывая соответствующие им данные). Например, если требуется направить вывод отладки на микросхему 8250 со скоростью 9600 бод, то следует указать:

-D 8250..9600

Настройки -D и -K по умолчанию:

-D console

-K 8250.3f8^0.57600.1843200.16

Примеры:

Прямой вывод отладочной информации на консоль:

startup-bios -Nnode120 -vvvv -Dconsole

Прямой вывод отладочной информации на первый последовательный порт (с проверкой установки скорости в бодах, равной 115200, на принимающей стороне):

startup-bios -Nnode120 -vvvv -D8250..115200

Прямой вывод отладочной информации на последовательный порт 2f8:

startup-bios -Nnode120 -vvvv -D8250.2f8.115200

Дополнительные примеры см. в каталоге ${KPDA_TARGET}/x86/boot/build.

Классификация:

Базовые подсистемы ЗОСРВ «Нейтрино»




Предыдущий раздел: Сервисы