Миграция прикладного кода с версии SDK 1.1.1 на версию SDK 1.2
В связи с изменениями в компонентах SDK в версии 1.2, вам необходимо внести изменения в прикладной код, разработанный с использованием версии KasperskyOS Community Edition 1.1.1, перед тем как использовать его с версией KasperskyOS Community Edition 1.2.
Список необходимых изменений:
- В SDK добавился драйвер для работы с сопроцессором VideoCore (VC6) через технологию mailbox:
kl.drivers.Bcm2711MboxArmToVc
, доступ к которому необходим драйверамkl.drivers.DNetSrv
иkl.drivers.USB
.- Если для создания init-описания решения (файл
init.yaml
) используется шаблонinit.yaml.in
и для процессовkl.drivers.DNetSrv
иkl.drivers.USB
использованы макросы@INIT_ProgramName_ENTITY_CONNECTIONS+@
или@INIT_ProgramName_ENTITY_CONNECTIONS@
, то изменений в init-описании не требуется.Иначе, если IPC-каналы для процессов
kl.drivers.DNetSrv
иkl.drivers.USB
указаны вручную, то необходимо добавить процессkl.drivers.Bcm2711MboxArmToVc
в init-описание и определить IPC-каналы между ним и процессамиkl.drivers.DNetSrv
иkl.drivers.USB
:
- name: kl.drivers.Bcm2711MboxArmToVc
path: bcm2711_mbox_arm2vc_h
- name: kl.drivers.USB
path: usb
connections:
...
- target: kl.drivers.Bcm2711MboxArmToVc
id: kl.drivers.Bcm2711MboxArmToVc
- name: kl.drivers.DNetSrv
path: dnet_entity
connections:
...
- target: kl.drivers.Bcm2711MboxArmToVc
id: kl.drivers.Bcm2711MboxArmToVc
- Необходимо добавить процесс
kl.drivers.Bcm2711MboxArmToVc
в файлsecurity.psl
и разрешить процессамkl.drivers.DNetSrv
иkl.drivers.USB
и ядру взаимодействовать с ним:
...
use kl.drivers.Bcm2711MboxArmToVc._
...
execute src = Einit dst = kl.drivers.Bcm2711MboxArmToVc { grant () }
request src = kl.drivers.Bcm2711MboxArmToVc dst = kl.core.Core { grant () }
response src = kl.core.Core dst = kl.drivers.Bcm2711MboxArmToVc { grant () }
request src = kl.drivers.DNetSrv dst = kl.drivers.Bcm2711MboxArmToVc { grant () }
response src = kl.drivers.Bcm2711MboxArmToVc dst = kl.drivers.DNetSrv { grant () }
request src = kl.drivers.USB dst = kl.drivers.Bcm2711MboxArmToVc { grant () }
response src = kl.drivers.Bcm2711MboxArmToVc dst = kl.drivers.USB{ grant () }
- Если для создания init-описания решения (файл
- Всем реализациям компонента VFS теперь необходим доступ к программе
kl.EntropyEntity
.- Если для создания init-описания решения (файл
init.yaml
) используется шаблонinit.yaml.in
и для процессов, использующих компонент VFS (как поставляемых в составе SDKkl.VfsNet
,kl.VfsRamFs
,kl.VfsSdCardFs
, так и включающих в себя VFS статически), использованы макросы@INIT_ProgramName_ENTITY_CONNECTIONS+@
или@INIT_ProgramName_ENTITY_CONNECTIONS@
, то изменений в init-описании не требуется.Иначе, если IPC-каналы для процессов, использующих компонент VFS, указаны вручную, то необходимо добавить процесс
kl.EntropyEntity
в init-описание и определить IPC-каналы между ним и процессами, использующими компонент VFS:
- name: kl.VfsSdCardFs
path: VfsSdCardFs
connections:
...
- target: kl.EntropyEntity
id: kl.EntropyEntity
- name: kl.VfsNet
path: VfsNet
connections:
...
- target: kl.EntropyEntity
id: kl.EntropyEntity
- name: kl.ProgramWithEmbeddedVfs
path: ProgramWithEmbedVfs
connections:
...
- target: kl.EntropyEntity
id: kl.EntropyEntity
- name: kl.EntropyEntity
path: Entropy
- Необходимо добавить процесс
kl.EntropyEntity
в файлsecurity.psl
и разрешить процессам, использующим компонент VFS, и ядру взаимодействовать с ним:
...
use kl.EntropyEntity._
...
execute src = Einit dst = kl.drivers.EntropyEntity { grant () }
...
request src = kl.EntropyEntity dst = kl.core.Core { grant () }
response src = kl.core.Core dst = kl.EntropyEntity { grant () }
request src = kl.VfsNet dst = kl.EntropyEntity { grant () }
response src = kl.EntropyEntity dst = kl.VfsNet { grant () }
request src = kl.VfsSdCardFs dst = kl.EntropyEntity { grant () }
response src = kl.EntropyEntity dst = kl.VfsSdCardFs { grant () }
request src = kl.ProgramWithEmbeddedVfs dst = kl.EntropyEntity { grant () }
response src = kl.EntropyEntity dst = kl.ProgramWithEmbeddedVfs { grant () }
- Если для создания init-описания решения (файл
- Драйверу
kl.drivers.USB
теперь необходим доступ к программеkl.core.NameServer
.- Если для создания init-описания решения (файл
init.yaml
) используется шаблонinit.yaml.in
и для процессаkl.drivers.USB
использованы макросы@INIT_ProgramName_ENTITY_CONNECTIONS+@
или@INIT_ProgramName_ENTITY_CONNECTIONS@
, то изменений в init-описании не требуется.Иначе, если IPC-каналы для процесса
kl.drivers.USB
указаны вручную, то необходимо добавить процессkl.core.NameServer
в init-описание и определить IPC-каналы между ним и процессомkl.drivers.USB
:
- name: kl.core.NameServer
path: ns
- name: kl.drivers.USB
path: usb
connections:
...
- target: kl.core.NameServer
id: kl.core.NameServer
- Необходимо добавить процесс
kl.core.NameServer
в файлsecurity.psl
и разрешить процессуkl.drivers.USB
и ядру взаимодействовать с ним:
...
use kl.core.NameServer
...
execute src = Einit dst = kl.core.NameServer { grant () }
...
request src = kl.core.NameServer dst = kl.core.Core { grant () }
response src = kl.core.Core dst = kl.core.NameServer { grant () }
request src = kl.drivers.USB dst = kl.core.NameServer { grant () }
response src = core.NameServer dst = kl.drivers.USB { grant () }
- Если для создания init-описания решения (файл
- В SDK добавлена возможность использования динамических библиотек. Теперь любое решение по умолчанию собирается с использованием динамической компоновки. Это может повлиять на сборку решений, содержащих библиотеки, имеющие как статический так и динамический вариант.
- Чтобы включить принудительную статическую компоновку исполняемых файлов, нужно в корневом CMakeLists.txt проекта заменить
initialize_platform()
наinitialize_platform (FORCE_STATIC)
. - Для перехода от статической компоновки к динамической компоновке необходимо выполнить дополнительные действия, описанные в статье "Использование динамических библиотек".
- Для использования динамических библиотек необходимо включить в решение системную программу BlobContainer.
- Необходимо добавить процесс
kl.bc.BlobContainer
в файлsecurity.psl
и разрешить процессам, использующим динамические библиотеки, взаимодействовать с ним:
...
use kl.bc.BlobContainer
...
execute src = Einit dst = kl.bc.BlobContainer { grant () }
request
{
/* Allows tasks with the kl.bc.BlobContainer class to send requests to specified tasks. */
match src = kl.bc.BlobContainer
{
match dst = kl.core.Core { grant () }
match dst = kl.VfsSdCardFs { grant () }
}
/* Allows task with the kl.bc.BlobContainer class to recive request from any task. */
match dst = kl.bc.BlobContainer { grant () }
}
response
{
/* Allows tasks with the kl.bc.BlobContainer class to get responses from specified tasks. */
match dst = kl.bc.BlobContainer
{
match src = kl.core.Core { grant () }
match src = kl.VfsSdCardFs { grant () }
}
/* Allows task with the kl.bc.BlobContainer class to send response to any task. */
match src = kl.bc.BlobContainer { grant () }
}
Можно вынести разрешения для работы
kl.bc.BlobContainer
в отдельный .psl файл и подключать его. (см. пример secure_logger в составе SDK). - Чтобы включить принудительную статическую компоновку исполняемых файлов, нужно в корневом CMakeLists.txt проекта заменить
- Монтирование файловой системы romfs теперь возможно только в режиме readonly.
- При монтировании romfs в C/C++ коде с использованием функции
mount()
нужно передавать флагMS_RDONLY
. - Также требуется внести изменения в аргументы командной строки программы VFS в init-описании или в файле CMakeLists.txt для сборки программы Einit.
Пример монтирования файловой системы romfs в файле init.yaml:
- name: kl.VfsSdCardFs
path: VfsSdCardFs
connections:
- target: kl.drivers.SDCard
id: kl.drivers.SDCard
- target: kl.EntropyEntity
id: kl.EntropyEntity
args:
- -l
- nodev /tmp ramfs 0
- -l
- romfs /etc romfs ro
env:
ROOTFS: mmc0,0 / fat32 0
VFS_FILESYSTEM_BACKEND: server:kl.VfsSdCardFs
Пример монтирования файловой системы romfs в файле CMakeLists.txt:
set (VFS_NET_ARGS "
- -l
- devfs /dev devfs 0
- -l
- romfs /etc romfs ro")
set_target_properties (${precompiled_vfsVfsNet} PROPERTIES
EXTRA_ARGS ${VFS_NET_ARGS})
- При монтировании romfs в C/C++ коде с использованием функции