Использование слоя аппаратных абстракций (hal_api.h, hal_common.h, hal_env.h, hal_privregs.h)

12 января 2026

ID libkos_hal_api

API определены в заголовочных файлах sysroot-*-kos/include/coresrv/hal/hal_*.h из состава KasperskyOS SDK. Заголовочный файл hal_api.h содержит директивы включения остальных заголовочных файлов hal_*.h.

Основные возможности API:

  • очищать кеш процессора;
  • получать случайные числа, сгенерированные аппаратно;
  • перезагружать аппаратную платформу;
  • выполнять диагностический вывод программ;
  • получать значения параметров аппаратной платформы;
  • получать число процессоров (вычислительных ядер) на аппаратной платформе;
  • получать и устанавливать значения привилегированных регистров периферийных устройств.

Сведения о функциях API приведены в таблицах ниже.

Очистка кеша процессора

Чтобы очистить кеш процессора, нужно вызвать функцию KnHalFlushCache(), объявленную в заголовочном файле hal_api.h. Функция очищает кеш процессора всех доступных уровней. При этом можно очистить кеш данных и кеш инструкций, соответствующие заданному региону виртуальной памяти. К примеру, драйверу требуется очищать кеш данных процессора, который соответствует памяти, используемой для DMA, поскольку в результате кеширования содержимое этой памяти с позиции драйвера может отличаться от действительного содержимого, видимого устройству.

Также для очистки кеша процессора можно использовать функцию KosCpuCacheFlush() из API cpucache.h. В отличие от функции KnHalFlushCache(), которая всегда выполняет системный вызов для очистки кеша процессора, функция KosCpuCacheFlush() делает так только в том случае, если нет возможности выполнить очистку без этого системного вызова.

Аппаратная генерация случайных чисел

Чтобы получить случайные числа, сгенерированные аппаратно, нужно вызвать функцию KnHalGetEntropy(), объявленную в заголовочном файле hal_api.h.

Перезагрузка аппаратной платформы

Чтобы перезагрузить аппаратную платформу, нужно вызвать функцию KnHalResetSystem(), объявленную в заголовочном файле hal_common.h.

Диагностический вывод программ

Чтобы поместить данные в диагностический вывод, нужно вызвать функцию KnHalDebugWrite(), объявленную в заголовочном файле hal_common.h. Эти данные будут выведены, например, через порт COM или USB (версии 3.0 или более поздней, с поддержкой DbC) в зависимости от конфигурации ядра.

Получение значений параметров аппаратной платформы

Чтобы получить значение параметра аппаратной платформы, нужно вызвать функцию KnHalGetEnv() или KnHalGetEnvMemRegion(), объявленные в заголовочном файле hal_env.h. Значения параметров аппаратной платформы содержат такие данные, как сведения о плате, архитектуре и частоте процессора, SMBIOS (System Management BIOS), FDT (Flattened Device Tree). Символьные константы с именами параметров определены в заголовочном файле sysroot-*-kos/include/hal/env_names.h из состава KasperskyOS SDK. Функцию KnHalGetEnvMemRegion() можно использовать только для получения сведений о SMBIOS и FDT (значения параметров с именами HAL_ENV_SMBIOS и HAL_ENV_GET_FDT_INFO соответственно).

Получение числа процессоров (вычислительных ядер) на аппаратной платформе

Чтобы получить число процессоров на аппаратной платформе, нужно вызвать функцию KnHalGetCpuCount(), объявленную в заголовочном файле hal_env.h.

Получение и установка значений привилегированных регистров периферийных устройств

Чтобы получить или задать значение привилегированного регистра периферийного устройства, нужно использовать функции, объявленные в заголовочном файле hal_privregs.h.

Чтобы получить значение регистра, нужно вызвать функцию KnHalGetPrivReg() или KnHalGetPrivRegRange().

Чтобы задать значение регистра, нужно вызвать функцию KnHalSetPrivReg() или KnHalSetPrivRegRange().

Сведения о функциях API

Функции hal_api.h

Функции hal_common.h

Функции hal_env.h

Функции hal_privregs.h

Вам помогла эта статья?
Что нам нужно улучшить?
Спасибо за ваш отзыв, вы помогаете нам становиться лучше!
Спасибо за ваш отзыв, вы помогаете нам становиться лучше!