Модули инициализации и запуска систем
startup-* [универсальные опции библиотеки libstartup] [опции конкретного модуля инициализации]
ЗОСРВ «Нейтрино»
arm, armv7, e2k, mips, ppc, x86
Все модули инициализации систем в ЗОСРВ «Нейтрино» слинкованы с одной из стандартных библиотек libstartup и поддерживают её набор универсальных опций. Также у любого из них могут существовать дополнительные эксклюзивные опции. В данной статье рассматриваются универсальные опции библиотек и опции модулей, входящих в состав дистрибутива:
 | Модули инициализации, входящие в состав различных BSP, в данном руководстве не рассматриваются. |
 | Различные модули инициализации могут перекрывать универсальные опции, а также поддерживать дополнительные, специфичные для конкретных систем, опции. Приоритет действия следующий: - Опции модулей инициализации для конкретных архитектур/систем.
- Опции библиотеки для конкретных архитектур.
- Универсальные опции библиотеки.
|
- -A
- Перезагрузить систему при любом незапланированном завершении работы ядра. По умолчанию выводится информация об отказе, затем выполняется останов.
- -C
- Включить защищенный режим работы libstartup, при котором происходит зануление всей памяти, выделяемой с помощью alloc_ram().
 | При передаче управления ядру данный механизм утрачивает актуальность, поскольку выделение памяти в startup прекращается. |
- -D канал[.опции_канала]
- Указать канал вывода для отладочной информации. Подробнее см. далее.
- -F [~]значение
- Управление полем флаги в разделе cpuinfo системной страницы:
- значение – ИЛИ поле флаги с аргументом значение
- ~значение – И поле флаги с аргументом ~значение
- -f [частота_ЦП][,[частота_циклов][,частота_таймера]]
- Задать частоту процессора. Все частоты можно задавать в герцах (с суффиксом
H
), килогерцах (с суффиксом K
) и мегагерцах (с суффиксом M
); в суффиксах регистр не учитывается. Если суффиксы не указаны, значение обрабатывается библиотекой, как указанное в мегагерцах, если оно меньше 1000, в противном случае – в герцах. Если они указаны, то аргументы частота_ЦП, частота_циклов и частота_таймера используются для установки следующих величин в коде запуска: - частота_ЦП – тактовая частота процессора. Кроме того, этот аргумент используется для установки значения в поле скорости в разделе cpuinfo системной страницы.
- частота_циклов – частота возвращения значений путем приращения ClockCycles(). Кроме того, этот аргумент используется для установки значения в поле cycles_per_sec в разделе qtime системной страницы.
- частота таймера – частота срабатывания микросхемы таймера. Кроме того, этот аргумент используется для установки значений timer_rate и timer_scale в разделе qtime системной страницы.
Если в момент определения поля (полей) системной страницы какая-либо из переменных оказывается равной нулю, библиотека пытается рассчитать корректное значение на основе одной из других заданных частот. Выбор переменной, используемой для расчета, зависит от конкретного процессора и оборудования. - -I флаг
- Включить восстановление ядра как часть восстановления IFS. Если опция задана, восстановление будет активировано. Значение флаг дополнительно запрещает (
0) или разрешает (
1`) проверку по контрольной сумме. Если проверка по контрольной сумме включена и не проходит, система будет перезагружена.
 | Даже если проверка контрольной суммы IFS выключена, контрольное суммирование все равно используется для внутренней структуры данных восстановления IFS (примерно 32 байта), чтобы обеспечить хотя бы некоторую целостность данных. |
- -i размер_ifs2[,флаги][,физадр_ист][,физадр_назн]
- Включить восстановление вторичного IFS. Аргументы:
- размер_ifs2
- Размер вторичного IFS (может быть больше реального размера).
- флаги
-
- Не заданы — загрузить вторичный IFS, но не пытаться восстановить при пробуждении.
- R — загрузить вторичный IFS и восстановить.
- K или RK — загрузить вторичный IFS и восстановить по контрольной сумме.
- физадр_ист
-
- Не задан — вторичный IFS расположен во флэш-памяти после первичной IFS.
- Задан — вторичный IFS расположен по указанному физическому адресу.
- физадр_назн
-
- Не задан — вторичный IFS будет скопирован в область RAM по умолчанию.
- Задан — вторичный IFS будет скопирован по указанному физическому адресу (адрес должен быть в «безопасном» месте, например, в конце RAM, подальше от места размещения первичного образа).
Если контрольное суммирование включено и не проходит, весь вторичный IFS перезагружается.
 | Даже если проверка контрольной суммы 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 адрес,размер[,флаг]
- Запретить использование указанного размера памяти системой, начиная с физического адреса адрес. С помощью необязательного аргумента флаг можно выполнять очистку памяти:
- Значение отсутствует – память заполняется "0".
- 0 – память заполняется "0".
- 1 – память не очищается.
- -S [~]раздел
- Включить (при значении ~раздел – выключить) вывод информации из указанного раздела syspage. Используется для ограничения объема выводимой информации из syspage.
- -T
- Не устанавливать время в startup (влияет на qtime->boot_time).
- -v[v]...
- Вывести расширенную информацию. Чем больше символов v, тем более подробная информация выводится.
- -Z
- Установить флаг
QTIME_FLAG_TICKLESS
.
Библиотека libstartup поддерживает ряд функциональных возможностей, актуальны лишь для определенных процессорных архитектур.
- -w значение
- Задать политику кэширования:
- -wb включает кэширование с отложенной записью и при чтении (не при записи)
- -wa включает кэширование с отложенной записью и при записи
- -wt включает кэширование с прямой записью
Реальное поведение зависит от процессора – не все процессоры поддерживают все три режима кэширования. Если процессор не поддерживает установленную опцию, используется политика кэширования по умолчанию. Поддерживаемые политики кэширования перечислены в конфигурационном файле процессора armv_chip_xxxx.c:
Поле: | Определяет кодировку PTE для: |
---|
pte | Политики кэширования по умолчанию |
pte_wb | Политики кэширования с отложенной записью |
pte_wa | Политики кэширования при записи |
pte_wt | Политики кэширования с прямой записью |
В конфигурации должно быть указано по-крайней мере поле по умолчанию (pte). Любая неподдерживаемая политика должна иметь значение 0 в соответствующем поле, и если эта политика запрашивается через параметр -w, она игнорируется, и используется политика по умолчанию.
- -E
- Сохранять и восстанавливать регистр внешнего доступа (
EAR
) в контексте при переключении потоков. EAR - опциональный регистр, доступный на некоторых чипах семейства PPC600. Если чип его поддерживает, то может его сохранять и восстанавливать, но инструкции, которые на него ссылаются, используются редко. Поэтому он остается вне контекста потока из соображений производительности до указания опции -E. - -x
- Включить расширенную адресацию. Это позволяет получить доступ к физическим адресам выше 4 ГБ. Опция поддерживается для обратной совместимости; XAE включен по умолчанию, если чип ее поддерживает.
- -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.
 | Эта опция действует только в том случае, если процессор поддерживает более 32 линий адреса. Для поддержки расширенной адресации на процессорах x86 необходим установленный бит X86_CPU_PAE на странице SYSPAGE_ENTRY( cpuinfo )->flags. |
- -X
- Запретить расширенную адресацию. Переопределяет поведение опции -x.
Опции модулей инициализации для конкретных архитектур/систем, с указанием актуальных систем.
Модуль инициализации для x86-систем, использующих классический BIOS. В основном он применим к достаточно старым системам или полностью совместимым с ними.
 | startup-bios-32 – версия данного модуля, использующая исключительно 32-битную адресацию. Если процессор не поддерживает расширенную адресацию, это может оказаться актуально. |
Опции:
- -b
- Не резервировать младшие 4 КБ памяти для виртуального режима 8086. Эта опция позволяет освободить 4 КБ памяти для системы.
- -c
- Подгрузка в знакогенератор графического контроллера консольного шрифта с поддержкой кириллицы (IBM866).
- -I прерывание
- Установить для аппаратного прерывания наивысший приоритет в системе. Возможные значения – от
0
до 7
(по умолчанию 3
).
 | Обратите внимание, что данная опция переопределяет одноименную опцию библиотеки libstartup. |
- -i irq1,irq2
- Настройка прерываний для AMD Elan SC400.
 | Обратите внимание, что данная опция переопределяет одноименную опцию библиотеки libstartup. |
- -L
- Включить поддержку прерываний локальных APIC (
X86_INTR_APIC_*
definitions in <x86/intr.h>
). - -m
- Устаревшая опция.
- -s размер
- Копировать указанный объем ПЗУ видеокарты в ОЗУ и установить ссылки в таблицах страниц x86 на копию в ОЗУ вместо ПЗУ. Размер можно указывать в байтах, в килобайтах (с суффиксом
K
), мегабайтах (с суффиксом M
), гигабайтах (с суффиксом G
). Если указана опция -s, то выполняется вызов x86_pcbios_shadow_rom( 0xc0000, размер ).
Модуль инициализации для x86-систем, использующих классический BIOS с поддержкой Non-Maskable Interrupt. Это исключительно ретро-системы.
 | startup-bios-nmi-32 – версия данного модуля, использующая исключительно 32-битную адресацию. Если процессор не поддерживает расширенную адресацию, это может оказаться актуально. |
Опции:
- -b
- -c
- -I прерывание
- -i irq1,irq2
- -L
- -m
- -s размер
- Соответствуют одноименным опциям startup-bios.
Модуль инициализации для современных x86-систем, совместимых с классическим BIOS и поддерживающих Intel Advanced Programmable Interrupt Controllers (APIC). В основном он применим в системах, способных работать как в Legacy (BIOS) режиме, так и в режиме UEFI (последний должен быть отключен).
 | 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-систем, использующих UEFI. Он применим в системах, использующих в качестве основного режима UEFI (наличие поддержки Legacy (BIOS) режима не принципиально, но в данном случае он должен быть отключен).
 | startup-uefi-32 – версия данного модуля, использующая исключительно 32-битную адресацию. Если процессор не поддерживает расширенную адресацию, это может оказаться актуально. |
- В
ЗОСРВ
«Нейтрино»
редакции 2021
обеспечена поддержка установки в UEFI-системах
Опции:
- -a
- Соответствует одноименной опции startup-apic.
- -b
- -m
- Соответствуют одноименным опциям startup-bios.
- -p шина:устройство:функция
- Соответствует одноименной опции startup-apic.
- -s размер
- Соответствует одноименной опции startup-bios.
- -z[z]...
- Соответствует одноименной опции startup-apic.
Модуль инициализации для систем с архитектурой 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).
 | При запуске 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
.
Базовые подсистемы ЗОСРВ «Нейтрино»
Предыдущий раздел: Сервисы