EDL
Каждая сущность в KasperskyOS должна быть описана на языке Entity Definition Language в отдельном файле <имя сущности>.edl
.
Имя EDL-файла должно совпадать с именем сущности, которую он описывает.
EDL-файл содержит следующие разделы (порядок важен):
- Имя сущности. Обязательный раздел, начинающаяся с ключевого слова
entity
, за которым следует имя сущности.Имя сущности должно начинаться с заглавной буквы и не может содержать символ подчеркивания (_).
- Интерфейс безопасности, используемый сущностью. Раздел не является обязательным и должен быть добавлен, только если сущность использует интерфейс безопасности. Декларируется ключевым словом
security
, за которым следует полное имя интерфейса. - Перечень реализаций интерфейсов, предоставляемых сущностью. Не является обязательным и описывается в секции
interfaces
. Каждая реализация интерфейса указывается отдельной строкой в следующем формате:interfaces {
<имя реализации интерфейса>:<имя интерфейса>
}
Сущность может содержать несколько реализаций одного интерфейса. Все реализуемые интерфейсы необходимо описать на языке IDL в IDL-файлах.
Имя реализации интерфейса не может содержать символ подчеркивания (_).
- Список экземпляров компонентов, входящих в сущность. Не является обязательным и описывается в секции
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
}