Миграция прикладного кода с версии 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++ коде с использованием функции