Операционная система ЗОСРВ «Нейтрино» > Руководство разработчика > Программные интерфейсы общего назначения > Системные библиотеки > Системные библиотеки > Системная библиотека > S > struct syspage_entry



struct syspage_entry

Системная страница

Прототип:

#include <sys/syspage.h>
struct syspage_entry {
uint16_t size; /* Размер структуры */
uint16_t total_size; /* Размер системной страницы */
uint16_t type;
uint16_t num_cpu;
syspage_entry_info system_private;
syspage_entry_info asinfo;
syspage_entry_info meminfo;
syspage_entry_info hwinfo;
syspage_entry_info cpuinfo;
syspage_entry_info cacheattr;
syspage_entry_info qtime;
syspage_entry_info callout;
syspage_entry_info callin;
syspage_entry_info typed_strings;
syspage_entry_info strings;
syspage_entry_info intrinfo;
syspage_entry_info smp;
syspage_entry_info pminfo;
syspage_entry_info mdriver;
union {
struct x86_syspage_entry x86;
struct ppc_syspage_entry ppc;
struct mips_syspage_entry mips;
struct arm_syspage_entry arm;
struct e2k_syspage_entry e2k;
struct sparc_syspage_entry sparc;
struct aarch64_syspage_entry aarch64;
} un;
};

Описание:

Структура содержит информацию о системной странице и включает следующие поля:

size
Размер экземпляра системной страницы. Библиотека автоматически задает это поле.
total_size
Сумма размеров экземпляра системной страницы и подструктур, на которые он ссылается (фактически — размер всей базы данных системной страницы). Библиотека автоматически задает и увеличивает это поле для других библиотечных вызовов по мере необходимости.
type
В этом поле указывается семейство процессоров, которое определяет, какой элемент объединения un следует использовать. Поле может иметь одно из следующих значений:
SYSPAGE_X86
SYSPAGE_PPC
SYSPAGE_MIPS
SYSPAGE_SPARE
SYSPAGE_ARM
SYSPAGE_SPARC
32-х разрядные архитектуры.
SYSPAGE_X86_64
SYSPAGE_E2K
SYSPAGE_AARCH64
64-х разрядные архитектуры.
SYSPAGE_64BIT = 0x100
Специальный флаг, характеризующий принадлежность процессорной архитектуры к классу 64-х разрядных.


Библиотека задает его автоматически.
num_cpu
В поле указывается количество процессоров (процессорных ядер) в системе. По умолчанию библиотека задает его равным 1, а функция init_smp() изменяет его при обнаружении других процессоров.
system_private
Область system_private содержит информацию, которая необходима операционной системе на этапе загрузки, и заполняется функцией init_system_private() библиотеки запуска. Поле определяется структурой struct system_private_entry и включает следующие основные поля:
user_cpupageptr
Адрес в пользовательском пространстве (только чтение) для указателя cpupage
user_syspageptr
Адрес в пользовательском пространстве (только чтение) для указателя syspage
kern_cpupageptr
Адрес в пространстве ядра (чтение/запись) для указателя cpupage
kern_syspageptr
Адрес в пространстве ядра (чтение/запись) для указателя syspage
pagesize
Размер страницы памяти, которую выделяет ОС (как правило, 16 в физическом режиме и 4096 — в виртуальном).
asinfo
Поле характеризуется массивом структур, каждая из которых описывает атрибуты конкретной области адресного пространства системы. Подробнее см. в описании struct asinfo_entry.

Деревья адресных пространств

Раздел asinfo содержит деревья адресных пространств, которые определяют местоположение различных компонентов системы (ОЗУ, ПЗУ, флеш-памяти и др.). Как правило, иерархия адресных пространств имеет следующий вид:

/memory/класс_памяти/.... /io/класс_памяти/.... /memory/io/класс_памяти/....

Компоненты memory и io определяют тип адресного пространства — памяти или ввода/вывода (последняя форма применяется в системах, где отсутствуют инструкции in*() / out() и все устройства отображены в память). Поле класс_памяти содержит значения ram, rom, flash и др. На более низких уровнях вводится дополнительная классификация, с помощью которой менеджер процессов реализует поддержку типизированной памяти.
meminfo
Устаревшее поле, необходимо ориентироваться на asinfo.
hwinfo
Раздел hwinfo характеризуется сведениями об аппаратной платформе (тип шины, устройства, линии запроса прерываний и др.). Эта область заполняется функцией init_system_private() системной библиотеки libstartup и является одним из самых сложных компонентов системной страницы. Раздел hwinfo представляет собой не одну структуру или массив определенного типа, а последовательность структур, которые отмечены символьными тегами и в совокупности описывают компоненты аппаратной платформы встраиваемой системы. Все типы и константы определены в заголовочном файле <hw/sysinfo.h>. Подробнее см. в разделе HW-теги и сведения об аппаратной платформе и описании типа struct hwinfo_entry.
cpuinfo
Область cpuinfo содержит информацию о каждой микросхеме процессора (тип, скорость, функции, производительность и размер кеша ЦП). Количество элементов в структуре struct cpuinfo_entry равно значению num_cpu структуры struct syspage_entry (например, в двухпроцессорной системе существуют две записи struct cpuinfo_entry).

Эта таблица автоматически заполняется библиотечной функцией init_cpuinfo().

Подробнее см. в разделе Информация о процессорах и описании типа struct cpuinfo_entry.
cacheattr
Области cacheattr содержит информацию о конфигурации внутрисхемной и внесхемной кеш-памяти, а также callout control(), который используется для управления кеш-памятью. Запись cacheattr формируется функциями init_cpuinfo() и init_cacheattr().

Следует иметь в виду, что функция init_cpuinfo() работает с кеш-памятью самого процессора, а функция init_cacheattr() — с кеш-памятью платы.

Суммарное количество байт, описываемых записью cacheattr, равно line_size × num_lines.

Подробнее см. в разделе Информация о процессорах и описании типа struct cacheattr_entry.
qtime
Область qtime содержит отсчетное время системы и другую информацию, связанную с хронометражем. Соответствующие структуры данных заполняются библиотечной функцией init_qtime().

Если время в системных часах смещается, следует задавать корректную частоту часов в коде запуска. Можно использовать в параметр -f модуля startup-*, который переопределяет эту настройку в коде.

Подробнее см. в описании типа struct qtime_entry.
callout
В области callout определяются различные callout-ы, которые "подключаются" к ядру и принимают управление при возникновении определенного события. Эти callout-ы выполняются примерно в той же среде, что и обработчики прерываний — с ограниченным стеком и без возможности вызывать функции ядра. Для стандартных аппаратных платформ (таких как отладочные платы MIPS и PowerPC, x86-совместимые платы) нет необходимости разрабатывать модуль startup-* — штатные модули обладают всеми требуемыми функциями.

Подробнее см. Сведения о callout-ах, Написание собственных callout-ов ядра и описание типа struct callout_entry.
callin
Для внутреннего применения.
typed_strings
Область typed_strings состоит из нескольких записей, каждая из которых содержит число и строку. Число занимает 4 байта, а строка завершается нулевым символом в соответствии со стандартом C. Число равно одной из констант, которые указаны в системном заголовочном файле <confname.h> (дополнительную информацию см. в описании C-функции confstr()).

Как правило, пул типизированных строковых литералов заполняется библиотечными функциями init_*(), а не разработчиком. Тем не менее, для добавления типизированной строки можно пользоваться библиотечной функцией add_typed_string().
strings
Этот элемент является пулом литералов, которые используются в нетипизированных строках. Пользователи обычно получают доступ к этим строкам, указывая индекс в поле strings (например, поле name структуры cpuinfo).

Как правило, пул типизированных строковых литералов заполняется библиотечными функциями init_*(), а не разработчиком. Тем не менее, для добавления типизированной строки можно использовать библиотечную функцию add_string().
intrinfo
Область intrinfo используется для хранения информации о системе обработки прерываний, а также содержит callout-ы, которые управляют аппаратным контроллером прерываний.

Подробнее см. Информация о векторах прерываний и описание типа struct intrinfo_entry.
smp
Область smp не зависит от процессора и характеризуется типом struct smp_entry.
pminfo
Область pminfo используется для взаимодействия между менеджером питания и callout-ом запуска / управления питанием. Ее элементы задаются менеджером питания и их можно модифицировать в его структуре struct pminfo_entry.
mdriver
Область mdriver используется для взаимодействия с минидрайвером.

Подробнее см. Быстрая активация устройств и описание типа struct mdriver_entry.
un
В объединении un хранится информация системной страницы, которая относится к конкретной процессорной архитектуре. Цель этого объединения — обеспечивать доступ к информации о различных семействах процессоров в зависимости от поля type системной страницы.
Поле Процессор Значение поля type Ассоциированный тип данных
x86 Семейство x86 SYSPAGE_X86 struct x86_syspage_entry
ppc Семейство PowerPC SYSPAGE_PPC struct ppc_syspage_entry
mips Семейство MIPS SYSPAGE_MIPS struct mips_syspage_entry
arm Семейство ARMv6/7 SYSPAGE_ARM struct arm_syspage_entry
sparc Семейство Sparc SYSPAGE_SPARC struct sparc_syspage_entry
e2k Семейство Эльбрус SYSPAGE_E2K struct e2k_syspage_entry
aarch64 Семейство AArch64 SYSPAGE_AARCH64 struct aarch64_syspage_entry

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

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

Тематические ссылки:

_syspage_ptr, struct aarch64_syspage_entry, struct asinfo_entry, struct arm_syspage_entry, struct cacheattr_entry, struct callout_entry, struct cpuinfo_entry, struct e2k_syspage_entry, struct hwi_prefix, struct hwinfo_entry, struct intrinfo_entry, struct mdriver_entry, struct mips_syspage_entry, struct pminfo_entry, struct ppc_syspage_entry, struct qtime_entry, struct smp_entry, struct sparc_syspage_entry, struct system_private_entry, struct x86_syspage_entry, SYSPAGE_ENTRY(), SYSPAGE_CPU_ENTRY()

Руководство по разработке модуля startup




Предыдущий раздел: Описание API системной библиотеки