GMTC北京站9折购票倒计时,部分日程已上线,戳此查看 了解详情
写点什么

使用 AWS IoT Greengrass 在 OpenWrt 上构建边缘解决方案

  • 2019 年 9 月 20 日
  • 本文字数:5716 字

    阅读完需:约 19 分钟

使用 AWS IoT Greengrass 在 OpenWrt 上构建边缘解决方案

边缘设备的硬件和操作系统以不同的外形规格构建并交付给客户,例如消费者网关、工业控制器和车载信息娱乐系统。构建商用现成产品的原始设计制造商 (ODM) 和原始设备制造商 (OEM) 决定使用何种硬件和软件组合。系统集成商 (SI) 开发广泛的解决方案,客户创建定制的硬件解决方案并且设计边缘解决方案。根据目标使用案例,他们可能会决定使用特定类型的嵌入式 Linux 发行版,借此提供核心功能,为系统操作带来便利并延长设备使用寿命。


在这篇博文中,我探讨了 ODM、OEM、SI 和客户在使用 AWS IoT Greengrass 时,满足这些要求所需的选项。


概览


今天,AWS 宣布为适用于 ARMv7l 和 ARMv8 架构的 AWS IoT Greengrass 提供 OpenWrt 支持。AWS IoT Greengrass 可将 AWS 无缝扩展到边缘设备,以便在本地处理所生成的数据,同时仍然使用云进行管理、分析和长久存储。


在与客户合作开发解决方案时,我发现 OpenWrt 对以下方面而言是理想的操作系统:有助于减少系统的资源占用,并为运行耗损均衡文件系统提供功能强大的选项。


以前,为了运行 AWS IoT Greengrass,您需要安装 glibc C 运行时程序包,从而导致占用额外的资源。如今,利用 OpenWrt,您可以从一开始就为 AWS IoT Greengrass 设计操作系统,以最大限度地减少资源占用。


客户、合作伙伴和 SI 现在可以选择为其 OpenWrt 映像使用较小的 C 运行时库,从而完全消除 AWS IoT Greengrass 对 libc 的依赖性,而且不会增加资源占用量。


这些改进使客户能够使用 AWS IoT Greengrass 提供 AWS Lambda 函数和 Amazon SageMaker Neo 编译的机器学习 (ML) 模型(占用空间小 100 倍),从而创建最适合资源有限、基于 OpenWrt 的网关设备的更小规模的 IoT 解决方案。


适用于 OpenWrt 的 AWS IoT Greengrass 程序包现已可供下载。


在边缘位置针对 ML 进行优化


我们的许多客户和合作伙伴正在 AWS 上构建引人注目的创新解决方案,并将 AWS IoT Greengrass 用在架构中。


此处所述示例来自我们的高级 AWS 合作伙伴之一 Smartiply, Inc.。Smartiply 已将 AWS IoT Greengrass 与 Smartiply IoT Gateway 集成,以便在边缘处提供高级 AWS 功能,为两家的共同客户提供新的使用案例和机会。


Smartiply IoT Gateway 可加速在基础设施面临挑战或存在地理和经济方面难题的环境中对 IoT 的采用。目标使用案例包括视频监控、企业安保、视频流和智慧城市。网关的核心功能包括:


  • 智能连接,提供不间断的视频体验

  • 雾计算环境中的嵌入式智能(视频、语音、数据和传感器分析),可用于本地决策

  • 数据精简,以优化传输到云的流量

  • 用于监控的传感器集成

  • 远程设备管理



图 1.Smartiply 边缘设备


除了智能连接和边缘智能之外,Smartiply 的客户还希望在 AWS IoT Greengrass 的支持下在边缘执行对象分类推理。Smartiply 的设备运行 OpenWrt 以优化设备的使用寿命和操作。Smartiply 已决定使用 AWS IoT Greengrass 为其客户提供无缝、安全的 IoT 连接和更有效的边缘到云计算。AWS IoT Greengrass 可让客户使用 Lambda 函数和 ML 推理,通过编程扩展不断拓展其设备的价值。


我们两家在印度有一个从事电子监控领域的共同客户。他们最近还因在技术领域的领先地位及为印度客户提供丰富的多元化定制服务,而获得了 Frost Sullivan 奖。


我们齐心协力,帮助他们拓展新的客户领域,实现客户多元化,并进军银行 ATM 监控之外的新市场。这些市场包括需要更高级别功能以满足高级需求的环境,例如零售、物流和建筑施工。通过使用 Smartiply IoT Gateway 并在 AWS 云上构建解决方案,我们的共同客户使用 IoT 提供了包括基本和高级视频分析在内的智能安全解决方案。


他们在各个位置都布设了安全监控摄像头。但是,通过 AWS IoT Greengrass 提供的 AWS 高级功能(特别是 Amazon Rekognition),Smartiply 可以通过边缘到云的框架快速有效地提供创新的计算机视觉解决方案。


以下所有项均属于增值微服务:


  • 检测快餐店的员工是否佩戴围裙或帽子,以确保合规。

  • 发现公共场所令人不安的行为(打斗)。

  • 计算餐厅收费的平均时间。

  • 监控餐厅上座率。

  • 改善 POS 工作站的队列管理。

  • 所有这些都为 Smartiply 开辟了新的收入机会并提高了运营效率。


“与 Amazon 合作、集成 AWS IoT Greengrass 的最大优势是完美契合所有标准。我们不需要另起炉灶,我们可以着眼于边缘,快速、高效地提供解决方案。对于许多任务关键型应用程序来说,在边缘实现基本功能,但同时还可以访问云以实现高级计算的混合模型都是理想的解决方案。它不仅可以节省成本,还可以提高性能,有助于加快实现 IoT 部署急需的投资回报率。” – Kaushik Pillalamarri,Smartiply, Inc. 联合创始人兼 CEO。


另一个共同客户是墨西哥最大的地方政府机构之一,他们需要通过 Smartiply IoT 网关将 AWS 云的 ML 功能与视频识别相结合,打造智慧城市。通过自动化、AWS 云驱动的模型训练和测试提供强大的解决方案,持续改进边缘处执行人员和物体识别的能力。


明确系统要求


构建嵌入式 Linux 系统(Yocto、Buildroot 或 OpenWrt)时,所有系统要求都要内置于映像中。


通常情况下,除非是构建开发人员映像,否则生产环境中没有可用的程序包管理器工具,例如 apt、yum 或 opkg。这意味着,除了内核配置要求外,目标使用案例的所有依赖包都要预先构建到发行映像中。对程序包进行更新就意味着,要构建可交付给客户的固件升级。


本文不会探讨如何构建自定义程序包,因此请安装 opkg 并手动安装 AWS IoT Greengrass。在后续博文中,我们会介绍如何通过自定义方式将 AWS IoT Greengrass 打包到 OpenWrt 中。


启动 Amazon EC2 实例

如果您有适用于嵌入式 Linux 的构建用计算机,可以选择使用该计算机。确保满足所有系统构建依赖项要求。


如果您没有构建用计算机,请启动 Amazon EC2 实例以构建 OpenWrt,并启动符合 AWS IoT Greengrass 容器模式要求的实例。按照启动实例向导中的说明进行操作,但注意要指定以下内容:


  • 在“选择 Amazon 系统映像 (AMI)”页面上,选择公共映像并针对 Debian 进行筛选。选择最新的 Stretch 发行版。

  • 为加快构建速度,请选择较大的实例。

  • 将存储空间分配更改为 120GB。

  • 要连接到您的实例,请在登录构建用系统后运行以下命令:


ssh -i ~/.ssh/xxx.pem admin@xx.xxx.xxx.x
复制代码


下面的许多步骤直接摘自“OpenWrt 项目映像快速构建指南”。连接到 EC2 实例后,运行以下命令以安装依赖项:


sudo apt-get updatesudo apt-get -y dist-upgradesudo apt-get install -y subversion g++ zlib1g-dev build-essential git python timesudo apt-get install -y libncurses5-dev gawk gettext unzip file libssl-dev wgetsudo apt-get install -y libelf-dev
复制代码


然后,查看 OpenWrt 源代码。


git clone https://git.openwrt.org/openwrt/openwrt.git/cd openwrt
./scripts/feeds update -a./scripts/feeds install -a
复制代码


运行以下命令进入菜单系统:


make menuconfig
复制代码


选择相应的开发板

请按照以下步骤选择相应的开发板。


  1. 选择“目标系统”,滚动到 Broadcom BCM27xx,然后选择“进入”。

  2. 滚动到“子目标”,并选择“进入”。

  3. 因为此示例在 Raspberry Pi 3 B 型号上运行,请滚动到 BCM2710,然后选择“进入”。


安装实用工具

请按照以下步骤安装多个实用工具和 ca-certificates 程序包。


  1. 安装 lsblk 实用工具,此工具用于列出设备上的磁盘和分区:

  2. 1, 选择实用工具,然后按 Enter 键。

  3. 2.选择磁盘,然后按 Enter 键。

  4. 3.选择 lsblk,然后输入 Y。

  5. 4.按 Tab 键并选择退出,然后按 Enter 键。

  6. 安装 useradd 和 groupadd 实用工具,用于添加所需的 AWS IoT Greengrass 用户和组。在生产环境中,自动将用户和组分别添加至 /etc/passwd 和 /etc/group。

  7. 1.选择基础系统,然后按 Enter 键。

  8. 2.选择 busybox,然后按 Enter 键。

  9. 3.选择自定义 busybox 选项,然后按 Y。

  10. 4.选择登录/密码管理实用工具,然后按 Enter 键。

  11. 5.对于 addgroups、support adding users to groups、adduser、mkpasswd 和 chpasswd,均按 Y。

  12. 6.按 Tab 键并选择退出,然后按 Enter 键(三次)。

  13. 安装 ca-certificates 程序包,因为 AWS IoT Greengrass 需要与 AWS IoT Core 网关执行初始 TLS 1.2 握手:

  14. 1.选择基础系统,然后按 Enter 键。

  15. 2.选择 ca-certificates,然后按 Y。

  16. 3.按 Tab 键并选择退出,然后按 Enter 键。

  17. 4.按 Tab 键三次,并选择保存,然后按 Enter 键。再次按 Enter 键保存配置。

  18. 5.按 Tab 键并选择退出,然后按 Enter 键。

  19. 在当前工作目录下创建名为 LXC_PATCH 的文件。复制并粘贴以下代码块:


cat <<OUT >> .configCONFIG_KERNEL_BLK_CGROUP=yCONFIG_KERNEL_CC_STACKPROTECTOR_REGULAR=yCONFIG_KERNEL_CFQ_GROUP_IOSCHED=yCONFIG_KERNEL_CGROUPS=yCONFIG_KERNEL_CGROUP_CPUACCT=yCONFIG_KERNEL_CGROUP_DEVICE=yCONFIG_KERNEL_CGROUP_FREEZER=yCONFIG_KERNEL_CGROUP_SCHED=yCONFIG_KERNEL_CPUSETS=yCONFIG_KERNEL_DEVPTS_MULTIPLE_INSTANCES=yCONFIG_KERNEL_FREEZER=yCONFIG_KERNEL_IOSCHED_DEADLINE=mCONFIG_KERNEL_IPC_NS=yCONFIG_KERNEL_LXC_MISC=yCONFIG_KERNEL_MEMCG=yCONFIG_KERNEL_MEMCG_SWAP=yCONFIG_KERNEL_MM_OWNER=yCONFIG_KERNEL_NAMESPACES=yCONFIG_KERNEL_NETPRIO_CGROUP=yCONFIG_KERNEL_NET_CLS_CGROUP=yCONFIG_KERNEL_NET_NS=yCONFIG_KERNEL_PID_NS=yCONFIG_KERNEL_POSIX_MQUEUE=yCONFIG_KERNEL_RESOURCE_COUNTERS=yCONFIG_KERNEL_USER_NS=yCONFIG_KERNEL_UTS_NS=yCONFIG_KERNEL_SECCOMP_FILTER=yCONFIG_KERNEL_SECCOMP=yOUT
复制代码


完成配置和编译

现在已经为设备设置了主要更改,您可以通过运行 defconfig 目标来填充剩余的基准配置:


make defconfig
复制代码


要编译系统,请运行以下命令。考虑为 EC2 实例实现实例化的核心数,向其添加一个核心,并将其应用于 make 命令:


make -j X
复制代码


如果您之前选择了 C4.8xlarge 发行版,则此数字为 37:


make -j 37
复制代码


如果构建中断,请尝试使用 X=1 继续,因为 make 依赖项可能会被破坏。根据我的经验,在本文定义的配置下运行并行性不会造成构建中断。但是,如果添加了其他软件包,则可能会发生中断。


make -j 1
复制代码


当我使用 C4.8xlarge EC2 实例构建时,所需时间不到 14 分钟。


构建系统后,使用 scp 将映像下载到工作站。 映像位于以下目录中:


~/openwrt/bin/targets/brcm2708/bcm2710
复制代码


输入下载命令:


scp -i ~/.ssh/xxx.pem admin@xx.xxx.xxx.xx:/home/admin/openwrt/bin/targets/brcm2708/bcm2710/openwrt-brcm2708-bcm2710-rpi-3-ext4-factory.img.gz
复制代码


您可以暂停或删除用于构建 OpenWrt 系统的 EC2 实例,以节省 EC2 费用。


将映像刷入 microSD 卡

接下来,将映像刷入您的 microSD 卡。此操作过程与上一部分描述的过程类似。


sudo dd if=./openwrt-brcm2708-bcm2710-rpi-3-ext4-factory.img of=/dev/disk3 bs=2048syncdiskutil unmountdisk /dev/disk3
复制代码


从工作站中移除 microSD 卡,将 microSD 插入 Raspberry Pi,然后打开电源。


配置网络

在本文中,我们使用以太网连接。编辑 /etc/config/network,将 eth0 更改为使用 DHCP。编辑后,您的网络应类似于:


config interface 'loopback'option ifname 'lo'option proto 'static'option ipaddr '127.0.0.1'option netmask '255.0.0.0'
config globals 'globals'option ula_prefix 'fd77:891b:69b8::/48'
config interface 'lan'option type 'bridge'option ifname 'eth0'option proto 'dhcp'
复制代码


编辑网络后,重新加载网络配置以使更改生效:


service network reload
复制代码


为 AWS IoT Greengrass 配置用户和组

将用户添加到系统:


addgroup ggc_groupadduser -DH -G ggc_group ggc_user
复制代码


修改 /boot/cmdline.txt 中的引导参数以装载内存 cgroup。进入 vi /boot/cmdline.txt 文件,按 End 键,选择 a,然后输入以下文本:


cgroup_enable=memory cgroup_memory=1
复制代码


按 Esc 键,输入 :wq! 以便将缓冲区内容写入文件,并退出 vi。输入 reboot 并按 Enter 键重启系统。


创建 AWS IoT Greengrass 组

接下来创建您的 Greengrass 组。按照简要组创建向导中的说明进行操作,但注意要指定以下内容:


  1. 为您的组选择一个名称,例如 openwrt-containermode。

  2. 在“选择 root CA”下,将 Amazon root CA 1 保存到 tar.gz 下载内容所在的目录。

  3. 在“选择平台下,将 Aarch64 的 OpenWrt 发行版下载到相同的已知目录下。


在您的设备上启动 AWS IoT Greengrass

现在,您可以在物理设备上启动 AWS IoT Greengrass 了。


  1. 插入一个 U 盘,并将所有三个文件复制到 U 盘:


  • 组配置 tar.gz

  • AWS IoT Greengrass 软件 tar.gz

  • root CA


  1. 卸载 U 盘,并将其插入 Raspberry Pi。

  2. 要装载 U 盘,请切换回串行连接窗口并运行以下命令:


lsblk # identifies the disk partition for your memory stickmkdir /mediamount /dev/sda1 /media
复制代码


将 AWS IoT Greengrass 及其配置解压到文件系统。


cd /tar xzvf /media/[name of greengrass distribution file]cd greengrasstar xzvf /media/[name of greengrass configuration file]cp /media/AmazonRootCA1.pem certs/root.ca.pem
复制代码


启动 AWS IoT Greengrass。


/greengrass/ggc/core/greengrassd start
复制代码


部署

接下来即可部署 Greengrass 组。 AWS IoT Greengrass 现在正在运行您以 OpenWrt 系统为目标的第一次部署。


接下来,您可以开始按照教程操作,例如:


  • AWS IoT Greengrass 上的 Lambda 函数(第 1 部分)

  • AWS IoT Greengrass 上的 Lambda 函数(第 2 部分)

  • 在 AWS IoT Greengrass 组中与设备交互

  • 与设备影子交互

  • 访问其他 AWS 服务

  • 在设计运行生产工作负载(如消费类成品)的 AWS IoT Greengrass 系统时,您可能还需要更深入地了解硬件安全集成。


小结

根据您在 AWS 上构建解决方案的原因,您可能会发现在 OpenWrt 操作系统上运行 AWS IoT Greengrass 十分有帮助。从基本的遥测到执行 ML 推理,我们的客户正在构建多种多样的 AWS IoT Greengrass 解决方案,以便不断创新并扩展解决方案的价值。


在本文中,您学习了如何构建支持 AWS IoT Greengrass 的 OpenWrt 系统映像。现在,您可以评估 OpenWrt 操作系统能否帮助您进一步加强功能,并利用 AWS IoT Greengrass 不断改进您的边缘功能。


本文转载自博客 aws。


原文链接:


https://amazonaws-china.com/cn/blogs/china/building-edge-solutions-on-openwrt-with-aws-iot-greengrass/


2019 年 9 月 20 日 13:13404
用户头像

发布了 1464 篇内容, 共 51.1 次阅读, 收获喜欢 57 次。

关注

评论

发布
暂无评论
发现更多内容

AI 收藏夹 Vol.003:AI 能听懂阴阳怪气吗?

Zilliz

神经网络 AI 计算机视觉

老铁久等了,尚硅谷Vue大型电商项目:尚品汇教程发布!

编程江湖

Vue 大前端

前端开发面试之框架react的相关问题及答案

@零度

大前端 React

12.7直播预告|「淼懂·观测云实践学堂」全新栏目上线!带你走进观测云的精彩世界!

观测云

可观测性 直播 可观测

业务请求量膨胀的扩容技术实践

博文视点Broadview

使用HTML,CSS 和 JS 创建 Chrome 扩展程序

海拥(haiyong.site)

json chrome扩展 28天写作 签约计划第二季 12月日更

2021年马上要结束了,这5款Java框架你都了解吗

@零度

Java spring

面试官:Java 线程如何启动的?

华为云开发者社区

Java 线程 JVM 时序图 Java 线程

Android技术分享| ViewPager2离屏加载,实现抖音上下视频滑动

anyRTC开发者

android 音视频 移动开发 ViewPager 视频滑动

Rust 元宇宙 10 —— 接入和协议

Miracle

rust 元宇宙

使用 HTML、CSS、JavaScript 创建一个简单的井字游戏

海拥(haiyong.site)

大前端 js 28天写作 签约计划第二季 12月日更

全程干货,用 python 下载某站全部【免抠图片】,图片背景透明,格式PNG

梦想橡皮擦

12月日更

在 Flutter 中如何使用TabBar和TabBarView创建选项卡布局【Flutter 专题 13】

坚果

flutter 28天写作 签约计划第二季 12月日更

模块5-课后作业

21°Char

你该不会拿 CSAPP 垫显示器吧

Zilliz

【Pandas学习笔记02】-数据处理高阶用法

恒生LIGHT云社区

Python 数据分析 pandas 数据可视化

如何在 Vue 中使用 防抖 和 节流

编程江湖

【Flutter 专题】01 图解 Windows 环境下安装配置环境

阿策小和尚

Flutter 小菜 0 基础学习 Flutter Android 小菜鸟 12月日更

尚硅谷Vue大型电商项目:尚品汇教程发布!

@零度

Vue 大前端

你知道什么时候用Vue计算属性吗?

华为云开发者社区

Vue 字符串 逻辑 模板 计算属性

大数据开发开源平台之Spark SQL的基础

@零度

大数据 spark SQL

华为云企业级Redis评测第一期:稳定性与扩容表现

华为云开发者社区

redis 测评 GaussDB(for Redis) NoSQL数据库 企业级Redis

如何在 ShardingSphere 中开发自己的 DistSQL

SphereEx

Java 数据库 ShardingSphere database SphereEx

技术管理哲学随笔:面对大量事业部需求与产研团队资源之间的矛盾

dclar

团队管理 管理 CTO

Groovy热更新Java实践

FunTester

Java 测试开发 热更新 Groovy FunTester

看FusionInsight Spark如何支持JDBCServer的多实例特性

华为云开发者社区

大数据 SQL语句 FusionInsight Spark JDBCServer 多实例

对象存储手把手教七 | 存储空间授权策略 Bucket Policy

QingStor分布式存储

分布式系统 对象存储 分布式存储 分布式,

Java难吗?Java基础知识最强总结(2021版)

XiaoLin_Java

Java

技术驱动未来,保险极客凭借数字团险领跑

科技热闻

一文带你读懂数字管家

HarmonyOS开发者社区

HarmonyOS OpenHarmony

Java中抽象类和接口的区别

编程江湖

JAVA开发 java编程

使用 AWS IoT Greengrass 在 OpenWrt 上构建边缘解决方案_文化 & 方法_亚马逊云科技 (Amazon Web Services)_InfoQ精选文章