Qualcomm 机器人 RB5 开发套件用户指南(7)
5.2 构建和部署示例应用程序
笔记
Linux 嵌入式系统不支持。## 5.3 使用交叉编译器开发
在构建和部署示例应用程序之前,您必须克隆 Git 存储库。
5.2.1 克隆 Git 存储库
笔记
Linux 嵌入式系统不支持。
用于测试设备功能的示例代码可在GitHub上获取。要克隆 RB5 开发套件上的存储库,请执行以下操作:
-
要检索设备列表,请运行以下命令:
adb devices
-
adb通过shell 或进入终端ssh。例如:
ssh root@qrb5165-rb5#
-
要创建目录,请运行以下命令:
mkdir -p ~/DEVELOPMENT/qrb5165
-
要克隆 Git 存储库,请运行以下命令:
git clone https://github.com/quic/sample-apps-for-Qualcomm-Robotics-RB5- platform
5.2.2 示例应用程序
笔记
Linux 嵌入式系统不支持。
Qualcomm Robotics RB5 开发套件的示例应用程序可在GitHub上获取。
示例应用程序分为几类,每个类别都有一个相应的文件夹。有关构建、部署和测试示例应用程序的说明,请参阅相应示例应用程序文件夹中的 README 文件。以下是可用示例应用程序的列表:
-
AI-ML-应用程序
此类别包括在 Qualcomm Robotics RB5 开发套件上启用 AI 工作负载的应用程序以及实现选定 AI 使用案例的应用程序。-
snpe_分类
该应用程序使用 DLC 格式(从 Qualcomm® 神经处理 SDK 生成)TFLite 模型作为输入来设置环境、编译和运行对象分类。 -
snpe_检测
该应用程序使用 DLC 格式(从 Qualcomm 神经处理 SDK 生成)TFLite 模型作为输入来设置环境、编译和运行对象检测。 -
tflite_classification
该应用程序使用 TFLite 模型作为输入并实现 GStreamer 管道来设置环境、编译和运行对象分类。 -
tflite_posenet
该应用程序使用 TFLite 模型作为输入并实现 GStreamer 管道来设置环境、编译和运行姿态估计。 -
tflite_segmentation
该应用程序使用 TFLite 模型作为输入并实现 GStreamer 管道来设置环境、编译和运行图像分割。
-
-
Codec2-视频
此类别包含基于 GStreamer 的 H.264 视频编码和解码应用程序。您可以编译并测试不同文件格式的H.264视频编解码能力。 -
GStreamer 应用程序
此类别包含一组 Python 和 C 示例应用程序,展示了 Qualcomm Robotics RB5 开发平台上 GStreamer 插件的使用。-
GST-阿尔萨
本应用在RB5开发平台上实现了GStreamer和ASLA的播放和录制功能。 -
gst_音频
此应用程序演示了使用 PulseAudio 对 WAV、AAC 和 MP3 文件格式进行音频录制和播放。 -
gst_相机
该应用程序演示了显示屏上的相机实时取景。有两个示例:一个是 ISP 摄像头(主板载摄像头)的显示,另一个是 USB 摄像头的显示。 -
gst_编码_解码
该应用程序演示了如何将摄像机视频编码为 MP4 文件并从该文件进行播放。有两个示例:一个是 ISP 摄像头(主机载摄像头)的编码,另一个是 MP4 文件的播放。 -
gst_streaming
该应用程序演示了两种在网络上流式传输视频的方法。第一个示例使用 GStreamer 创建 TCP 流服务器。第二个示例演示了如何在板上运行实时流协议 (RTSP) 服务器。 -
gst_tflite
此应用程序展示了如何使用 TFLite 模型作为输入来设置环境、编译和运行对象分类以及实现 GStreamer 管道。 -
gst_变换
此应用程序展示了如何将 ISP 摄像机视频转换为 Weston 显示。
-
-
ROS应用程序
此类别包含展示使用 ROS 中间件构建机器人应用程序的应用程序。-
ROS-咖啡
该应用程序将Caffe框架集成到Qualcomm Robotics RB5开发平台上的ROS中。 -
ROS-TFLite
该应用程序将 Tensorflow 框架集成到 ROS 中,并在 Qualcomm Robotics RB5 开发平台上使用对象检测 API。
-
-
OpenCL-应用程序
此应用程序使用以下示例演示 OpenCL 示例代码:- FFT 展示了使用 OpenCL 进行快速傅立叶变换。
- Benchmark分别显示内存单位为Byte、KB、MB时的读写速率。
- Matrix_multiply 显示两个 20 × 20 矩阵的乘法,并在屏幕上打印输入矩阵的输出和两个矩阵的乘法。
-
平台启动
此类别包含用于获取设备信息、GPIO 示例、Weston-Client 和 Wi-Fi 热点的应用程序。-
设备信息
该应用程序提供以下信息:设备连接的外设列表、通过内核节点的子系统状态、CPU 和 GPU 信息、显示信息和内存大小。 -
GPIO 样本
该应用程序处理以下功能:LED 灯控制、GPIO 输入和输出、接收 GPIO 中断事件、按钮事件捕获、简单 PWM 输出以及读取 SoC 热温度。 -
WiFi 登录
Wi-Fi上线包括在STA模式下扫描周围热点、创建新的Wi-Fi连接、获取当前连接的Wi-Fi的SSID和PSK。切换到SAP模式后,您可以创建新的热点并获取当前热点的SSID和PSK。 -
Weston 客户端应用程序
Weston 示例代码展示了如何在 Weston 中编译和运行简单的客户端。
-
5.3 使用交叉编译器开发
笔记
Linux 嵌入式系统不支持。
先决条件:
在主机系统上使用交叉编译器进行开发:
-
要安装必要的软件包,请运行以下命令:
sudo apt update
sudo apt install diffstat xmlstarlet texinfo chrpath gcc-aarch64-linux-gnu libarchive-dev ssh libselinux1-dev fakechroot g++-aarch64-linux-gnu libiberty-dev qemu-user-static g++ gawk gcc make libwayland-dev fakeroot libpam0g-dev openjdk-8-jdk-headless binutils-dev util-linux uuid-dev zstd
-
要创建软链接,请运行以下命令:
sudo rm -rf /lib/ld-linux-aarch64.so.1
sudo ln -sf /usr/aarch64-linux-gnu/lib/ld-2.31.so /lib/ld-linux-aarch64.so.1
sudo ln -sf /bin/bash /bin/sh
sudo dpkg -P qemu-user-static
wget http://archive.ubuntu.com/ubuntu/pool/universe/q/qemu/qemu-user-static_6.2+dfsg-2ubuntu6_amd64.deb
sudo dpkg -i qemu-user-static_6.2+dfsg-2ubuntu6_amd64.deb
- 要安装 Android 工具,请运行以下命令:
sudo apt install android-tools-fsutils
5.3.1 准备系统根目录
在主机系统上准备sysroot的方法如下:
使用 Yocto 的 sysroot
导航到以下位置以复制 Yocto 生成的 sysroot:
cp -avx <src tree>/build-qti-distro-Ubuntu-debug/tmp-glibc/work/qrb5165_rb5-oe-linux/qti-Ubuntu-robotics-image/1.0-r0/rootfs <your sysroot workspace>
使用 system.img
在开始之前,请检查是否system.img是 Android 稀疏图像。如果是稀疏图像,请在挂载前解稀疏图像。
- 要检查是否system.img是 Android 稀疏图像,请运行以下命令:
file qti-Ubuntu-robotics-image-qrb5165-rb5-sysfs.ext4
qti-Ubuntu-robotics-image-qrb5165-rb5-sysfs.ext4: Android sparse image, version: 1.0, Total of 8192000 4096‑byte output blocks in 11950 input chunks.
- 要将稀疏图像转换为原始图像,请运行以下命令:
simg2img qti-Ubuntu-robotics-image-qrb5165-rb5-sysfs.ext4 system_raw.img
- 要安装system_raw.img,请运行以下命令:
mkdir data
sudo mount system_raw.img data
- 要卸载system_raw.img,请运行以下命令:
sudo umount data
示例应用程序:libxml2
例如,您可以使用 libxml2,一个开源应用程序。在RB5开发套件上开发该应用程序的流程如下:
- 从这里下载源代码。
- 要解压,请运行以下命令:
tar -xvf libxml2-2.9.9.tar.gz
- 要配置应用程序,请运行以下命令:
./configure --host=arm-linux --build=i386-linux --target=arm --prefix=<sysroot>/usr CC=/usr/bin/aarch64-linux-gnu-gcc --without-zlib --without-python
命令参数取值如下:
- –prefix=/usr:在 PREFIX 中安装与体系结构无关的文件
- CC=/usr/bin/aarch64-linux-gnu-gcc: 设置交叉编译器
有关更多详细信息,请运行
configure-h
- 要构建应用程序,请运行以下命令:
make
- 要安装libxml2到从原始映像挂载的 sysroot 文件夹,请运行sudo。
[sudo] make install
- 要检查输出,请运行以下命令:
file libxml2.so.2.9.9
示例输出:
libxml2.so.2.9.9:ELF 64 位 LSB 共享对象,ARM aarch64,版本 1 (SYSV),动态链接,BuildID[sha1]=a0074ea1ac119ddb9fcc4c1d4baa1489ff27dd25,带有 debug_info,未剥离
5.3.2
笔记
Linux 嵌入式系统不支持。
要在主机系统上打包,请使用 Yocto 的 sysroot 和system.img.
使用 Yocto 的 sysroot
从 获取原始打包命令uimage.bbclass。的用法make_ext4fs如下代码所示:
make_ext4fs -s -l ${SYSTEM_SIZE_EXT4} -C ${WORKDIR}/rootfs-fsconfig.conf -B ${DEPLOY_DIR_IMAGE}/system.map ${IMAGE_EXT4_SELINUX_OPTIONS} -b 4096 ${DEPLO Y_DIR_IMAGE}/${SYSTEMIMAGE_TARGET} ${IMAGE_ROOTFS}
要使用make_ext4fsYocto 生成的内容,请参阅以下示例:
<srctree>/build-qti-distro-Ubuntu-debug/tmp-glibc/work/qrb5165_rb5-oe-linux/qti-Ubuntu-robotics-image/1.0-r0/recipe-sysroot-native/usr/bin/make_ext4fs -s -l 33554432000 -C
<srctree>/build-qti-distro-Ubuntu-debug/tmp-glibc/work/qrb5165_rb5-oe-linux/qti-Ubuntu-robotics-image/1.0-r0/rootfs-fsconfig.conf -B <srctree>/build-qti-distro-Ubuntu-debug/tmp-glibc/deploy/images/qrb5165-rb5/system.map ${IMAGE_EXT4_SELINUX_OPTIONS} -b 4096 qti-Ubuntu-robotics-image-qrb5165-rb5-sysfs-new.ext4 <your sysroot workspace>
使用系统.img
-
要重新打包 sysroot,请运行以下命令:
sudo make_ext4fs -s -l 33554432000 -b 4096 sysfs.ext4 <sysroot mount point>
例如:
sudo make_ext4fs -s -l 33554432000 -b 4096 sysfs.ext4 data
-
要检查system.img输出是否是 Android 稀疏图像,请运行以下命令:
file sysfs.ext4 sysfs.ext4: Android sparse image, version: 1.0, Total of 8192000 4096-byte output blocks in 12234 input chunks
5.4 使用RB5平台开发
笔记
Linux 嵌入式系统不支持。
设置开发设备的先决条件是:
-
设置网络(Wi-Fi 和以太网)。
-
运行以下命令来设置构建环境:
apt install gcc g++
-
连接到 USB 端口并确保在 Android 调试桥模式下检测到设备。
在 Qualcomm Robotics RB5 Platform shell 终端上编写一个简单的程序。打印一行字符:Hello World!使用以下命令:
adb shell
sh-4.4#vi hello.c
sh-4.4#gcc hello.c -o hello
sh-4.4# ./hello
Hello world!
sh-4.4#