Операционная система ЗОСРВ «Нейтрино» > Описание базовых компонентов целевой системы > Модули начальной загрузки > startup-*



startup-*

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

Синтаксис:

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

Платформы:

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

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

arm, armv7, e2k, mips, ppc, x86

Опции:

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

Универсальные опции библиотеки libstartup
CPU-специфичные опции библиотеки libstartup
ARM-специфичные опции
PowerPC-специфичные опции
x86-специфичные опции
E2K-специфичные опции
Опции конкретных 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
Перезагрузить систему при любом незапланированном завершении работы ядра. По умолчанию выводится информация об отказе, затем выполняется останов. Начиная с редакции 2024 задание опции A для startup-bios, startup-apic и startup-uefi также приведёт к перезагрузке системы при критических ошибках во время загрузки в модуле startup.
-C
Включить защищенный режим работы libstartup, при котором происходит зануление всей памяти, выделяемой с помощью alloc_ram().

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

-D канал[.опции_канала]
Указать канал вывода для отладочной информации. Подробнее см. далее.
-F [~]значение
Управление полем флаги в разделе cpuinfo системной страницы: Для получения дополнительной информации об аргументе флаги см. страницы struct syspage_entry и Построение встраиваемых систем.
-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. Для получения дополнительной информации см. страницы print_syspage(), struct syspage_entry и Построение встраиваемых систем.
-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.

Для получения дополнительной информации см. страницы struct syspage_entry и Построение встраиваемых систем.
-X
Запретить расширенную адресацию. Переопределяет поведение опции -x.

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

-t
Использовать локальный таймер ядра в качестве системного таймера. Для платформ с контроллером прерываний EPIC используется маскируемый таймер CEPIC нулевого ядра процессора. Для платформ с контроллером прерываний APIC используется маскируемый таймер LAPIC нулевого ядра процессора. Если опция отсутсвует, то используется переферийный таймер, расположенный в IOH.
Опция -t поддерживается, начиная с ЗОСРВ «Нейтрино» редакции 2024

Опции конкретных 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
Устаревшая опция.
-k размер
Выделение буфера для дублирования отладочного вывода в этот буфер. Аргумент можно указывать в байтах, в килобайтах (с суффиксом K или k), мегабайтах (с суффиксом M или m) и гигабайтах (с суффиксом G или g). По умолчанию дублирование отладочного вывода отключено, при задании некорректного размера размер буфера устанавливается в 64K.
Опция -k поддерживается, начиная с ЗОСРВ «Нейтрино» редакции 2024
-s размер
Копировать указанный объем ПЗУ видеокарты в ОЗУ и установить ссылки в таблицах страниц x86 на копию в ОЗУ вместо ПЗУ. Размер можно указывать в байтах, в килобайтах (с суффиксом K), мегабайтах (с суффиксом M), гигабайтах (с суффиксом G). Если указана опция -s, то выполняется вызов x86_pcbios_shadow_rom( 0xc0000, размер ). Для получения дополнительной информации, см. страницы API библиотек libipl и libstartup, struct syspage_entry и Построение встраиваемых систем.

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
-k размер
-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
-k размер
-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
-k размер
Соответствует одноименной опции startup-bios.

Описание:

Модуль инициализации 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.

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

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




Предыдущий раздел: Модули начальной загрузки