KasperskyOS Community Edition 1.0

Подготовка загрузочного образа решения

Для автоматизации процесса подготовки загрузочного образа решения нужно настроить систему сборки. За основу можно взять системы сборки, реализованные в примерах.

Этот раздел описывает различные способы настройки системы сборки для подготовки загрузочного образа решения.

В этом разделе

Использование шаблона Makefile из состава KasperskyOS Community Edition

Использование CMake из состава KasperskyOS Community Edition

Использование собственной системы сборки

В начало

Использование шаблона Makefile из состава KasperskyOS Community Edition

Для упрощения процесса подготовки загрузочного образа решения с использованием системы сборки make вы можете использовать шаблон build.mk из состава KasperskyOS Community Edition. Файл шаблона располагается по следующему пути:

/opt/KasperskyOS-Community-Edition-<version>/common/build.mk

Чтобы подготовить систему сборки make с использованием шаблона build.mk, в скрипте сборки Makefile:

  1. Задайте значение переменной targets. В значении переменной перечислите через пробел все программы, входящие в решение. Указывать программы Einit, kl.core.Core необязательно, так как они обрабатываются отдельно.
  2. Для каждой программы, указанной в переменной targets, задайте значения следующим переменным:
    • <имя-программы>-objects – список объектных файлов программы. Необходимо перечислить все объектные файлы.

      Имена объектных файлов получаются из имен исходных файлов сущности по следующим правилам:

      • *.c → *.o
      • *.idl → *.idl.o
      • *.cdl → *.cdl.o
      • *.edl → *.edl.o
    • <имя-программы>-ldflags – список флагов, передаваемых компоновщику. Если сущность использует виртуальную файловую систему, необходимо передать флаги, указанные в переменной LIBVFS_REMOTE.
    • <имя-программы>-base – адрес загрузки программы в шестнадцатеричной системе. Если переменная не указана, адрес присваивается автоматически. Используйте эту переменную для отладки программы.

    Этот же адрес передается отладчику с помощью следующей команды, которая может быть добавлена в .gdbinit-файл:

    add-symbol-file <имя-программы> <адрес-загрузки-программы>

  3. Если раздел ROMFS должен содержать дополнительные файлы, задайте значение переменной ROMFS-FILES. В значении переменной перечислите файлы через пробел. Если вы используете виртуальную файловую систему, необходимо передать файл, указанный в переменной VFS_ENTITY.
  4. Добавьте инструкцию импорта шаблона build.mk с помощью следующей команды:

    include /opt/KasperskyOS-Community-Edition-<version>/common/build.mk

В файле шаблона build.mk реализованы следующие цели сборки:

  • sim (цель по умолчанию) – запуск загрузочного образа решения с помощью эмулятора QEMU.

    При запуске эмулятор QEMU может осуществлять захват мыши, о чем будет написано в заголовке окна эмулятора.

  • kos-image – сборка загрузочного образа решения для запуска на целевой аппаратной платформе.
  • gdbsim – запуск загрузочного образа решения с возможностью отладки. После старта эмуляции QEMU ожидает старта отладчика. Для этого в другой командной строке необходимо вызвать цель gdb.

    Убедитесь, что порт протокола TCP/IP 1234 открыт, например с помощью команды netstat -anput.

    Порт 1234 прослушивается программой gdbserver, которая используется для удаленной отладки приложений и входит в состав эмулятора QEMU.

    При использовании отладчика gdb необходимо использовать аппаратные точки останова (hbreak). Эмулятор QEMU, который используется в примерах, запускается с ключом -enable-kvm, из-за чего использование обычных точек останова (break) невозможно.

  • gdb – запуск отладчика. После запуска отладчика для программ, которые требуется отлаживать, выполните следующие команды:

    add-symbol-file <имя-программы> <адрес-загрузки-программы>

    target remote localhost:1234

Пример

В этом примере используется система сборки make. Помимо действий, выполняемых в шаблоне build.mk, в скрипте сборки необходимо указать программу Hello и список объектных файлов этой программы. Адрес загрузки указывается для целей отладки решения.

Makefile

# Список программ для сборки.

targets = hello

# Список объектных файлов программы Hello

hello-objects = hello.o hello.edl.o

# Адрес загрузки сущности Hello (в hex)

hello-base = 800000

# Включить шаблон с общими правилами сборки.

include ../common/build.mk

Чтобы запустить систему сборки make, выполните команду make hello.

Чтобы запустить пример hello, находясь в директории /opt/KasperskyOS-Community-Edition-<version>/examples/hello, выполните команду make.

В начало

Использование CMake из состава KasperskyOS Community Edition

Система автоматизации сборки CMake поддерживает кросс-компиляцию приложений. Для выполнения кросс-компиляции с помощью CMake требуется указать путь к файлу расширения системы сборки (toolchain.cmake).

Чтобы выполнить кросс-компиляцию приложения для KasperskyOS, задайте значение переменной: DCMAKE_TOOLCHAIN_FILE=/opt/KasperskyOS-Community-Edition-<version>/toolchain/share/toolchain.cmake

В состав KasperskyOS Community Edition входит библиотека platform, содержащая набор готовых скриптов для системы CMake.

Чтобы подготовить приложение к отладке:

  1. В файле CMakeLists.txt задайте значение параметра LINK_FLAGS для приложения, которое вы хотите отлаживать, следующим образом:

    set_target_properties (<имя-приложения> PROPERTIES LINK_FLAGS "-Ttext <адрес-секции-text>")

    Скрипт автоматически создает .gdbinit-файлы. В .gdbinit-файлах находится набор команд для отладчика GDB. Этот набор команд определяет, по какому адресу отладчик GDB загружает сущности для отладки.

  2. Выполните сборку приложения.
В начало

Использование собственной системы сборки

Вы можете использовать другие системы сборки или реализовать собственную систему сборки для подготовки загрузочного образа решения.

Для того чтобы подготовить загрузочный образ решения, система сборки должна включать следующие действия:

  1. Генерацию кода транспортных методов и типов, используемых для формирования, отправки, приема и обработки IPC-сообщений между сущностями, входящими в решение.

    Для этого воспользуйтесь компилятором NK. В аргументах команды передайте путь к файлам EDL-, CDL- и IDL-описаний сущностей, компонентов и интерфейсов.

  2. Сборку всех сущностей, входящих в решение.

    Для этого воспользуйтесь кросс-компиляторами, входящими в состав KasperskyOS Community Edition.

  3. Сборку инициализирующей сущности Einit.

    Для генерации кода сущности Einit воспользуйтесь утилитой einit. В аргументах команды передайте путь к файлу файл init-описания (по умолчанию init.yaml).

    Сущность Einit затем необходимо собрать с помощью компилятора C, поставляемого в рамках KasperskyOS Community Edition.

  4. Сборку модуля ядра с подсистемой Kaspersky Security System.

    Для этого воспользуйтесь скриптом makekss. В аргументах команды передайте путь к файлу конфигурации безопасности (по умолчанию security.psl).

  5. Создание образа решения.

    Для этого воспользуйтесь скриптом makeimg. В аргументах команды передайте исполняемые ELF-файлы сущностей, модуль ядра с Kaspersky Security System, образ ядра KasperskyOS и любые дополнительные файлы.

В начало