Snapdragon 远程信息处理应用框架 (TelAF) 用户指南(1)
1 概述
Snapdragon 远程信息处理应用框架 (TelAF) 凭借 QTI 在 5G、C-V2X、定位、远程信息处理、汽车、功能安全、管理程序和安全方面的丰富专业知识,提供下一代连接和远程信息处理解决方案。它是在 QTI 严格的安全和 OSS 流程下开发的,以确保许可证合规性。TelAF 与 C2C 预先集成,提供增值服务,例如 FOTA、SOTA、应用程序和生态系统管理、SoftSKU、见解和连接管理。它建立在Legato框架之上,继承了Legato的构建系统和目标工具。应用程序在隔离的环境中运行,并且可以显式配置其权限。
TelAF包含一组用于框架管理的核心服务和一组用于远程信息处理功能的平台服务,例如音频服务、SMS服务等。核心服务和平台服务均由主管管理。平台服务默认添加到应用程序框架中,但可以根据需要添加或删除。
TelAF是基于微服务的,这意味着平台服务之间可以独立运行,并提供统一的IPC接口供外部参考。许多平台服务都是多应用程序安全的,允许多个应用程序同时使用 API。仲裁完全由服务管理,以确保应用程序安全地共享相同的资源。它通过 TelAF 运行时环境中的 SELinux 为所有服务和应用程序提供通用访问控制。
2 设置应用环境
2.1 使用 CodeLinaro (CLO)/开源构建 Yocto 平台 SDK
本主题提供使用 Codelinaro (CLO)/开源构建 yocto 平台 SDK 的说明。这些说明仅适用于 QTI 处理器版本。对于外部AP,必须使用与特定外部AP对应的平台SDK。
Linux Ubuntu 18.04
注意:不要将其与远程信息处理 SDK 混淆。Yocto 平台 SDK 包括为给定设备开发任何程序所需的工具链和库。它还包括存根开源库。
- 安装所需的软件包。
$ sudo apt-get install -y \
autoconf \
automake \
bash \
bc \
bison \
bsdiff \
build-essential \
chrpath \
cmake \
cpio \
diffstat \
flex \
gawk \
gcovr \
git \
gperf \
iputils-ping \
libbz2-dev \
libcurl4-gnutls-dev \
libncurses5-dev \
libncursesw5-dev \
libsdl-dev \
libssl-dev \
libtool \
libxml2-utils \
ninja-build \
python \
python-git \
python-jinja2 \
python-pkg-resources \
python3 \
texinfo \
unzip \
wget \
zlib1g-dev \
mtd-utils
- 同步 CLO 构建。
$ repo init -u https://git.codelinaro.org/clo/le/le/manifest.git -b release -m <clo_TAG>.xml --repo-url=https://git.codelinaro.org/clo/tools/repo.git --repo-branch=qc-stable
$ repo sync -j 32
例如:
$ repo init -u https://git.codelinaro.org/clo/le/le/manifest.git -b release --no-clone-bundle -m LE.UM.4.1.1.c15-03800-sa515m.xml --repo-url=https://git.codelinaro.org/clo/tools/repo.git --repo-branch=qc-stable
使用AU标签
repo init -q -u git://codeaurora.org/quic/le/le/manifest.git -b release -m caf_AU_LINUX_EMBEDDED_LE.UM.4.1.1_RB1_TARGET_ALL.01.147.055.xml
使用 CRM build-id 标签
repo init -q -u git://codeaurora.org/quic/le/le/manifest.git -b release -m LE.UM.4.1.1-05510-sa515m.xml
注意:
AU_LINUX_EMBEDDED_LE.UM.4.1.1_RB1_TARGET_ALL.01.147.055 应替换为与所需设备版本对应的 AU 标记。“caf_”需要作为 AU 标签的前缀。CAF 中的标签列于https://source.codeaurora.org/quic/le/le/manifest/refs/tags。
- 配置构建环境。
$ echo 'CORE_IMAGE_EXTRA_INSTALL += "telux"' >> poky/build/conf/local.conf
$ echo 'CORE_IMAGE_EXTRA_INSTALL += "telux-lib"' >> poky/build/conf/local.conf
$ echo 'CORE_IMAGE_EXTRA_INSTALL += "vsomeip"' >> poky/build/conf/local.conf
- 构建 Yocto 平台 SDK 并为 SA515M 目标生成工具链安装程序。
$ cd poky
$ source build/conf/set_bb_env.sh
$ export MACHINE=sa515m
$ export DISTRO=auto
$ bitbake core-image-minimal -c do_populate_sdk
$ bitbake squashfs-tools-native
构建成功完成后,将在poky/build/tmp-glibc/deploy/sdk/oecore-x86_64-armv7at2hf-neon-toolchain-nodistro.0.sh生成工具链安装程序。所需的 mksquashfs 工具位于poky/build/tmp-glibc/sysroots-components/x86_64/squashfs-tools-native/usr/sbin/mksquashfs。
2.2 构建 TelAF 独立版
-
在构建独立版本之前,SA515m SDK 工具链 ( oecore-x86_64-armv7at2hf-neon-toolchain-nodistro.0.sh ) 应安装到位置/opt/qct/sa515m/。
SDK 工具链位于 poky/build/tmp-glibc/deploy/images/sa515m/sdk。 -
默认 mksquashfs linux 实用程序不是使用 XATTR 生成的,因此需要在/usr/local/bin中替换它。
$ cp poky/build/tmp-glibc/sysroots-components/x86_64/squashfs-tools-native/usr/sbin/mksquashfs /usr/local/bin
- 设置环境:
cd sa515m/telaf
source set_af_env.sh sa515m
- 运行构建命令:
build-distclean-af ;build-sa515m-af
如果build编译成功,那么会在build/sa515m/telaf_ro.squashfs目录下生成TelAF镜像,并且在telaf-sdk-.tar同目录下也会生成telaf-sdk补丁tarball .bz2。
2.2.1 将 TelAF 应用程序构建依赖项修补到 SDK 工具链
通过 TelAF 构建过程中生成的 TelAF SDK 补丁 tarball,用户可以使用 TelAF 应用程序依赖项修补 SDK 工具链。
解压telaf-sdk-<TelAF-版本>.tar.bz2
tar xjf telaf-sdk-telaf.lnx.1.1-230301.tar.bz2
patchsdk 脚本和 telaf-tools-x86_64-telaf.lnx.1.1-230301.tar.bz2 将被提取到当前目录。
将 TelAF 修补到 SDK 工具链
patchsdk 脚本用于查询工具链中当前已打补丁的 TelAF 版本(如果有),将 TelAF 打补丁到 SDK 工具链,以及从 SDK 工具链中取消打补丁。
执行以下命令获取脚本工具的帮助信息:
$ ./patchsdk
Patch tool for adding and removing TelAF application building dependencies
to the toolchain.
Syntax: ./patchsdk [-h|V|p|r]
options:
h Print this Help.
V Print TelAF version installed in given toolchain path and exit.
Syntax: -V toolchain-path
p Patch TelAF application building dependencies to the SDK toolchain
with given telaf tools tarball and toolchain path and exit.
Syntax: -p telaf-tools-tarball toolchain-path
r Remove the patched TelAF application building dependencies from the
SDK toolchain and exit.
Syntax: -r toolchain-path
运行以下命令将提取的 telaf-tool tarball 修补到 SDK 工具链:
运行以下命令将提取的 telaf-tool tarball 修补到 SDK 工具链:
在工具链路径 /opt/qct/sa515m 下,现在生成了一个专门用于 TelAF 应用程序构建过程的环境设置脚本,名为 environment-setup-telaf-app。
用户可以直接获取environment-setup-telaf-app脚本,然后将设置所有TelAF应用程序构建依赖项。
3 教程
3.1 Hello World
本教程将引导您创建 Hello World 应用程序,包括如何创建组件、将组件捆绑到应用程序中、将应用程序安装到目标上以及测试应用程序。
3.1.1 创建组件
示例目录和文件
应用程序具有文件夹和文件的层次结构,基本文件夹是应用程序的名称。每个组件都封装在其自己的子目录中,并包含 .c 文件和组件定义 (.cdef) 文件(本教程稍后将介绍如何创建 .cdef 文件)。应用程序目录将包含一个应用程序定义 (.adef) 文件,该文件用于将所有组件组合成可执行文件、配置可执行文件的进程以及定义应用程序的配置。
Hello World 的目录结构示例:
helloWorld/
├── helloComponent/
│ ├── Component.cdef
│ └── helloWorld.c
└── helloWorld.adef
- 创建组件目录。
为您的组件创建一个目录。目录名称将是组件名称(这样做是为了便于组织,并且在包含多个组件时变得很重要)。
$ mkdir helloComponent
- 创建 C 源文件。
$ vim helloComponent/helloWorld.c # use any editor of your choice
您的 helloWorld.c 应该如下所示:
#include "legato.h"
#include "interfaces.h"
COMPONENT_INIT
{
LE_INFO("Hello world!");
}
- 创建 .cdef 文件。
TelAF 使用定义文件(.sdef、.adef、.cdef 和 .mdef)作为构建工具 (mktools) 的指令,并告诉 mktools 如何绑定组件、应用程序和系统。
组件定义文件用于指定组件的外部接口和内部内容,以及定义系统对组件的要求,例如组件需要哪些访问权限、组件将访问哪些API、将访问哪些外部文件每个组件都必须有一个相应的 Component.cdef,它必须与组件代码的其余部分包含在同一文件夹中。
创建一个名为 Component.cdef 的 cdef 文件:
$ vim helloComponent/Component.cdef
由于我们的 helloWorld 组件没有任何外部接口,并且我们将使用默认构建位置,因此我们可以创建一个简单的 .cdef 文件并仅定义源。
将以下内容添加到 Component.cdef 文件中,然后保存并退出。
sources:
{
helloWorld.c
}
您现在已经成功创建了第一个 TelAF 组件。恭喜!