Использование слоя аппаратных абстракций (hal_api.h, hal_common.h, hal_env.h, hal_privregs.h)
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
Функция | Сведения о функции |
|---|---|
| Назначение Перезагружает аппаратную платформу. Параметры Нет. Возвращаемые значения Если функция не реализована, возвращает |
| Назначение Помещает данные в диагностический вывод, который записывается, например, в порт COM или USB (версии 3.0 или более поздней, с поддержкой DbC). Параметры
Возвращаемые значения В случае успеха возвращает |
Функции hal_env.h
Функция | Сведения о функции |
|---|---|
| Назначение Позволяет получить значение параметра аппаратной платформы. Параметры
Возвращаемые значения В случае успеха возвращает Если размер буфера, заданного через параметр |
| Назначение Позволяет считать значение параметра аппаратной платформы вида Параметры
Возвращаемые значения В случае успеха возвращает |
| Назначение Позволяет получить число процессоров (вычислительных ядер) на аппаратной платформе. Параметры
Возвращаемые значения В случае успеха возвращает |
Функции hal_privregs.h
Функция | Сведения о функции |
|---|---|
| Назначение Позволяет получить значение привилегированного регистра периферийного устройства. Параметры
Возвращаемые значения В случае успеха возвращает |
| Назначение Задает значение привилегированного регистра периферийного устройства. Параметры
Возвращаемые значения В случае успеха возвращает |
| Назначение Позволяет получить значение привилегированного регистра периферийного устройства. Параметры
Возвращаемые значения В случае успеха возвращает Если строка, заданная через параметр Если произошла ошибка IPC, возвращает Если имя диапазона регистров некорректно, или смещение регистра вне допустимого диапазона, возвращает Если поток исполнения, в котором вызвана функция, привязан к прерыванию, возвращает |
| Назначение Задает значение привилегированного регистра периферийного устройства. Параметры
Возвращаемые значения В случае успеха возвращает Если строка, заданная через параметр Если произошла ошибка IPC, возвращает Если имя диапазона регистров некорректно, или смещение регистра вне допустимого диапазона, возвращает Если поток исполнения, в котором вызвана функция, привязан к прерыванию, возвращает |