KasperskyOS Community Edition 1.0

Использование шаблона 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.