Миграция прикладного кода с версии 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})

В начало