KasperskyOS Community Edition 1.0

EDL

Каждая сущность в KasperskyOS должна быть описана на языке Entity Definition Language в отдельном файле <имя сущности>.edl.

Имя EDL-файла должно совпадать с именем сущности, которую он описывает.

EDL-файл содержит следующие разделы (порядок важен):

  1. Имя сущности. Обязательный раздел, начинающаяся с ключевого слова entity, за которым следует имя сущности.

    Имя сущности должно начинаться с заглавной буквы и не может содержать символ подчеркивания (_).

  2. Интерфейс безопасности, используемый сущностью. Раздел не является обязательным и должен быть добавлен, только если сущность использует интерфейс безопасности. Декларируется ключевым словом security, за которым следует полное имя интерфейса.
  3. Перечень реализаций интерфейсов, предоставляемых сущностью. Не является обязательным и описывается в секции interfaces. Каждая реализация интерфейса указывается отдельной строкой в следующем формате:

    interfaces {

    <имя реализации интерфейса>:<имя интерфейса>

    }

    Сущность может содержать несколько реализаций одного интерфейса. Все реализуемые интерфейсы необходимо описать на языке IDL в IDL-файлах.

    Имя реализации интерфейса не может содержать символ подчеркивания (_).

  4. Список экземпляров компонентов, входящих в сущность. Не является обязательным и описывается в секции components. Каждый экземпляр компонента указывается отдельной строкой в следующем формате:

    components {

    <имя экземпляра компонента>:<имя компонента>

    }

    Для каждого указанного компонента необходимо создать отдельный файл <имя компонента>.cdl, содержащий описание компонента на языке CDL. В сущность можно добавить несколько экземпляров одного и того же компонента, причем каждый может иметь отдельное состояние (см. ниже пример сущности UartDriver).

    Имя экземпляра компонента не может содержать символ подчеркивания (_).

Секции interfaces и components не являются обязательными и добавляются только для серверных сущностей. Реализации интерфейсов, объявленные в секции interfaces, а также реализации, входящие в компоненты из секции components могут использоваться сущностями-клиентами.

EDL поддерживает однострочные и многострочные комментарии в стиле C++:

/* Это комментарий

И это тоже */

// Ещё один комментарий

Примеры EDL-файлов

В простейшем случае сущность не использует интерфейс безопасности и не предоставляет функциональности другим сущностям, подобно сущности hello из примера hello. EDL-описание такой сущности содержит только ключевое слово entity и имя сущности.

Hello.edl

// Имя сущности: Hello

entity Hello

В следующем примере сущность EFoo содержит единственную реализацию интерфейса и не использует интерфейс безопасности.

Efoo.edl

// Имя сущности: Efoo

entity Efoo

// Сущность содержит именованную реализацию интерфейса IFool. Имя реализации: foo.

interfaces {

foo : IFoo

}

В следующем примере сущность UartDriver содержит два экземпляра компонента UartComp – по одному на каждое UART-устройство.

Сущность UartDriver не использует интерфейс безопасности.

UartDriver.edl

// Имя сущности: UartDriver

entity UartDriver

// uart0 и uart1 - имена экземпляров компонента UartComp,

// которые отвечают за два различных устройства

components {

uart0: UartComp

uart1: UartComp

}