KasperskyOS Community Edition 1.2

Миграция прикладного кода с версии SDK 1.1.1 на версию SDK 1.2

В связи с изменениями в компонентах SDK в версии 1.2, вам необходимо внести изменения в прикладной код, разработанный с использованием версии KasperskyOS Community Edition 1.1.1, перед тем как использовать его с версией KasperskyOS Community Edition 1.2.

Список необходимых изменений:

  1. В 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 () }
  2. Всем реализациям компонента VFS теперь необходим доступ к программе kl.EntropyEntity.
    • Если для создания init-описания решения (файл init.yaml) используется шаблон init.yaml.in и для процессов, использующих компонент VFS (как поставляемых в составе SDK kl.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 () }
  3. Драйверу 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 () }
  4. В SDK добавлена возможность использования динамических библиотек. Теперь любое решение по умолчанию собирается с использованием динамической компоновки. Это может повлиять на сборку решений, содержащих библиотеки, имеющие как статический так и динамический вариант.
    ... 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).

  5. Монтирование файловой системы romfs теперь возможно только в режиме readonly.

    Пример монтирования файловой системы 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})