Утилиты и скрипты сборки
В состав KasperskyOS Community Edition входят следующие утилиты и скрипты сборки:
- nk-gen-c
Компилятор NK (
nk-gen-c
) генерирует набор транспортных методов и типов на основе EDL-, CDL- и IDL-описаний программ, компонентов и интерфейсов. Транспортные методы и типы нужны для формирования, отправки, приема и обработки IPC-сообщений. - nk-psl-gen-c
Компилятор
nk-psl-gen-c
генерирует исходный код модуля безопасности Kaspersky Security System на основе файла политики безопасности решения (security.psl
) и EDL-описаний программ, входящих в решение. - einit
Утилита
einit
позволяет автоматизировать создание кода инициализирующего программыEinit
. Это приложение первым запускается при загрузке KasperskyOS и запускает остальные программы, а также создает каналы (соединения) между ними. - makekss
Скрипт
makekss
создает модуль безопасности Kaspersky Security System для ядра KasperskyOS. - makeimg
Скрипт
makeimg
создает финальный загружаемый образ решения на базе KasperskyOS со всеми запускаемыми программами и модулем Kaspersky Security System.
nk-gen-c
Компилятор NK (nk-gen-c
) генерирует набор транспортных методов и типов на основе EDL-, CDL- и IDL-описаний классов процессов, компонентов и интерфейсов. Транспортные методы и типы нужны для формирования, отправки, приема и обработки IPC-сообщений.
Транспортные методы и типы генерируются с полностью квалифицированными именами. В именах в качестве префиксов используется полное имя класса процесса/компонента/интерфейса. (объявленное в соответствующем EDL-, CDL- или IDL-файле) с заменой точек на подчеркивания (_
).
Компилятор NK принимает EDL-, CDL- или IDL-файл и создает следующие файлы:
H
-файл, содержащий объявление и реализацию транспортных методов и типов.D
-файл, в котором перечислены зависимости созданногоC
-файла. Этот файл может быть использован для автоматизации сборки с помощью утилитыmake
.
Синтаксис использования компилятора NK:
nk-gen-c [-I PATH][-o PATH][--types][--interface][--client][--server][--extended-errors][--enforce-alignment-check][--help][--version] FILE
Параметры:
FILE
Путь к EDL-, CDL- или IDL-описанию класса процесса, компонента или интерфейса, для которого необходимо сгенерировать транспортные методы и типы.
-I PATH
Путь к директории, содержащей вспомогательные файлы, необходимые для генерации транспортных методов и типов. По умолчанию эти файлы располагаются в директории
/opt/KasperskyOS-Community-Edition-<version>/sysroot-arm-kos/include
.Также может использоваться для добавления других директорий для поиска файлов, необходимых для генерации.
Чтобы указать более одной директории, можно использовать несколько параметров
-I
.-o PATH
Путь к существующей директории, в которой будут созданы файлы, содержащие транспортные методы и типы.
-h, --help
Отображает текст справки.
--version
Отображает версию
nk-gen-c
--enforce-alignment-check
Включает обязательную проверку выравнивания обращений к памяти, даже если такая проверка отключена для целевой платформы. Если проверка включена, то компилятор NK добавляет дополнительные проверки выравнивания в код валидаторов IPC-сообщений.
По умолчанию параметры проверки выравнивания обращения к памяти задаются для каждой платформы в файле
system.platform
.--extended-errors
Включает расширенную обработку ошибок в коде клиентских и серверных методов.
Выборочная генерация
Чтобы уменьшить количество генерируемого компилятором NK кода, можно использовать флаги выборочной генерации. Например, для программ, реализующих интерфейсы, удобно использовать флаг --server
, а для программ, являющихся клиентами интерфейсов, удобно использовать флаг --client
.
Если ни один из флагов выборочной генерации не указан, компилятор NK создаст все возможные для указанного файла транспортные типы и методы.
Флаги выборочной генерации для описаний интерфейсов (IDL-файлов):
--types
Компилятор создаст только файлы, содержащие все константы и типы, включая переопределенные (
typedef
), из входного IDL-файла, а также типы из импортируемых IDL-файлов, которые используются в типах входного файла.При этом константы и переопределенные типы из импортируемых IDL-файлов не будут явно включены в генерируемые файлы. Если вам необходимо использовать типы из импортируемых файлов в коде, нужно отдельно сгенерировать H-файлы для каждого такого IDL-файла.
--interface
Компилятор создаст файлы, создаваемые с флагом
--types
, а также структуры сообщений запросов и ответов для всех методов этого интерфейса.--client
Компилятор создаст файлы, создаваемые с флагом --
interface
, а также клиентские прокси-объекты и функции их инициализации для всех методов этого интерфейса.--server
Компилятор создаст файлы, создаваемые с флагом --
interface
, а также типы и методы диспетчера этого интерфейса.
Флаги выборочной генерации для описаний компонентов (CDL-файлов) и классов процессов (EDL-файлов):
--types
Компилятор создаст файлы, создаваемые с флагом
--types
для всех интерфейсов, используемых в этом компоненте/классе процессов.При этом явно включены в генерируемые файлы будут только те типы, которые используются в аргументах интерфейсных методов.
--interface
Компилятор создаст файлы, создаваемые с флагом
--types
для этого компонента/класса процессов, а также файлы, создаваемые с флагом--interface
для всех интерфейсов, используемых в этом компоненте/классе процессов.--client
Компилятор создаст файлы, создаваемые с флагом --
interface
, а также клиентские прокси-объекты и функции их инициализации для всех интерфейсов, используемых в этом компоненте/классе процессов.--server
Компилятор создаст файлы, создаваемые с флагом --
interface
, а также типы и методы диспетчера этого компонента/класса процессов и типы и методы диспетчеров для всех интерфейсов, используемых в этом компоненте/классе процессов.
nk-psl-gen-c
Компилятор nk-psl-gen-c
генерирует исходный код модуля безопасности Kaspersky Security System на основе файла политики безопасности решения (security.psl) и EDL-описаний классов процессов, входящих в решение. Этот код используется скриптом makekss.
Компилятор nk-psl-gen-c
также позволяет генерировать и запускать код тестовых сценариев для политики безопасности решения, написанных на языке PAL.
Синтаксис использования компилятора nk-psl-gen-c
:
nk-psl-gen-c [-I PATH][-o PATH][--audit PATH][--tests ARG][--help][--version] FILE
Параметры:
FILE
Путь к PSL-описанию политики безопасности решения (
security.psl
)-I,--include-dir PATH
Путь к директории, содержащей вспомогательные файлы, необходимые для генерации транспортных методов и типов. По умолчанию эти файлы располагаются в директории
/opt/KasperskyOS-Community-Edition-<version>/sysroot-arm-kos/include
.Компилятору
nk-psl-gen-c
потребуется доступ ко всем EDL-описаниям классов процессов, перечисленных в конфигурации безопасности, а также к CDL- или IDL-описаниям их компонентов и интерфейсов. Для того, чтобы компиляторnk-psl-gen-c
мог найти эти описания, нужно передать пути к расположению этих описаний в параметре-I
.Чтобы указать более одной директории, можно использовать несколько параметров
-I
.-o,--output PATH
Путь к создаваемому файлу, содержащему код модуля безопасности.
-t, --tests ARG
Флаг контроля генерации кода и запуска тестовых сценариев для политики безопасности решения. Может принимать следующие значения:
skip
– код тестовых сценариев не генерируется. Это значение используется по умолчанию, если флаг--tests
не указан.generate
– код тестовых сценариев генерируется, но не компилируется и не запускается.run
– код тестовых сценариев генерируется, компилируется с помощью компилятораgcc
и запускается.
-a, --audit PATH
Путь к создаваемому файлу, содержащему код декодера аудита.
-h, --help
Отображает текст справки.
--version
Отображает версию
nk-psl-gen-c
.
einit
Утилита einit
позволяет автоматизировать создание кода инициализирующей программы Einit. Это приложение первым запускается при загрузке KasperskyOS и запускает остальные программы, а также создает каналы (соединения) между ними.
Утилита einit
принимает файл init-описания (по умолчанию init.yaml
) и создает .c файл, в котором содержится код инициализирующей программы Einit
. Программу Einit
затем необходимо собрать с помощью компилятора C, поставляемого в KasperskyOS Community Edition.
Синтаксис использования утилиты einit:
einit -I PATH -o PATH [--help] FILE
Параметры:
FILE
Путь к файлу описания классов процессов и соединений
init.yaml
.-I PATH
Путь к директории, содержащей вспомогательные файлы, необходимые для генерации инициализирующей программы. По умолчанию эти файлы располагаются в директории
/opt/KasperskyOS-Community-Edition-<version>/sysroot-arm-kos/include
.-o, --out-file PATH
Путь к создаваемому .c файлу с кодом инициализирующей программы.
-h, --help
Отображает текст справки.
makekss
Скрипт makekss
создает модуль безопасности Kaspersky Security System.
Скрипт вызывает компилятор nk-psl-gen-c для генерации исходного кода модуля безопасности и затем компилирует полученный код, вызывая компилятор C, поставляемый в KasperskyOS Community Edition.
Скрипт принимает файл с описанием политики безопасности решения (по умолчанию security.psl
) и создает файл модуля безопасности ksm.module
.
Синтаксис использования скрипта makekss:
makekss --target=ARCH --module=PATH --with-nk="PATH" --with-nktype="TYPE" --with-nkflags="FLAGS" [--output="PATH"][--help][--with-cc="PATH"][--with-cflags="FLAGS"] FILE
Параметры:
FILE
Путь к файлу конфигурации безопасности (
.psl
).--target=ARCH
Архитектура, для которой производится сборка.
--module=-lPATH
Путь к библиотеке
ksm_kss
. Этот ключ передается компилятору C для компоновки с этой библиотекой.--with-nk=PATH
Путь к компилятору
nk-psl-gen-c
, который будет использоваться для генерации исходного кода модуля безопасности. По умолчанию компилятор расположен в/opt/KasperskyOS-Community-Edition-<version>/toolchain/bin/nk-psl-gen-c
.--with-nktype="TYPE"
Указывает на тип компилятора NK, который будет использоваться. Для использования компилятора
nk-psl-gen-c
, необходимо указать типpsl
.--with-nkflags="FLAGS"
Параметры, с которыми вызывается компилятор
nk-psl-gen-c
.Компилятору
nk-psl-gen-c
потребуется доступ ко всем EDL-описаниям классов процессов, перечисленных в конфигурации безопасности, а также к CDL- или IDL-описаниям их компонентов и интерфейсов. Для того, чтобы компиляторnk-psl-gen-c
мог найти эти описания, нужно передать пути к расположению этих описаний в параметре--with-nkflags
, используя параметр-I
компилятораnk-psl-gen-c
.--output=PATH
Путь к создаваемому файлу модуля безопасности.
--with-cc=PATH
Путь к компилятору C, который будет использоваться для сборки модуля безопасности. По умолчанию используется компилятора, поставляемый в KasperskyOS Community Edition.
--with-cflags=FLAGS
Параметры, с которыми вызывается компилятор C.
-h, --help
Отображает текст справки.
makeimg
Скрипт makeimg
создает финальный загружаемый образ решения на базе KasperskyOS со всеми запускаемыми программами и модулем Kaspersky Security System.
Скрипт принимает список файлов, включая исполняемые файлы всех программ, которые нужно добавить в ROMFS загружаемого образа и создает следующие файлы:
- образ решения;
- образ решения без таблиц символов (
.stripped
); - образ решения с отладочными таблицами символов (
.dbg.syms
).
Синтаксис использования скрипта makeimg:
makeimg --target=ARCH --sys-root=PATH
--with-toolchain=PATH --ldscript=PATH --img-src=PATH
--img-dst=PATH
--with-init=PATH
[--with-extra-asflags=FLAGS][--with-extra-ldflags=FLAGS][--help] FILES
Параметры:
FILES
Список путей к файлам, включая исполняемые файлы всех программ, которые нужно добавить в romfs.
Модуль безопасности (
ksm.module
) нужно указывать явно, иначе он не будет включен в образ решения. ПрограммуEinit
указывать не нужно, так как она будет включена в образ решения автоматически.--target=ARCH
Архитектура, для которой производится сборка.
--sys-root=PATH
Путь к корневой директории sysroot. По умолчанию эта директория расположена в
/opt/KasperskyOS-Community-Edition-<version>/sysroot-arm-kos/
.--with-toolchain=PATH
Путь к набору вспомогательных утилит, необходимых для сборки решения. По умолчанию эти утилиты расположены в
/opt/KasperskyOS-Community-Edition-<version>/toolchain/
.--ldscript=PATH
Путь к скрипту компоновщика, необходимому для сборки решения. По умолчанию этот скрипт расположен в
/opt/KasperskyOS-Community-Edition-<version>/libexec/arm-kos/
.--img-src=PATH
Путь к заранее скомпилированному ядру KasperskyOS, не содержащему romfs. По умолчанию ядро расположено в
/opt/KasperskyOS-Community-Edition-<version>/libexec/arm-kos/
.--img-dst=PATH
Путь к создаваемому файлу образа.
--with-init=PATH
Путь к исполняемому файлу инициализирующей программы
Einit
.--with-extra-asflags=FLAGS
Дополнительные флаги для ассемблера AS.
--with-extra-ldflags=FLAGS
Дополнительные флаги для компоновщика LD.
-h, --help
Отображает текст справки.