【实验手册】基于 Arm 虚拟硬件的指纹图像识别算法开发实战

基于 Arm 虚拟硬件的指纹图像识别算法开发实战

目录


本实验过程中所显示的优惠价格及费用报销等相关信息仅在【Arm AI 开发体验创造营】体验活动过程中有效,逾期无效,请根据实时价格自行购买和体验。同时,感谢本次体验活动 Arm 导师 Liliya 对于本实验手册的共创与指导。
详见活动地址:https://marketing.csdn.net/p/a11ba7c4ee98e52253c8608a085424be

一、实验背景

1. 嵌入式软件开发的基本流程

在常规的嵌入式软件开发中,通常需要在用于开发的电脑主机上提前把应用程序编译好,生成可在嵌入式芯片上运行的文件代码,再通过相应的烧录调试工具,把该代码烧录至开发板中,才能查看验证所编写应用程序的正确性。

传统的嵌入式开发流程中,往往需要用到物理开发板才能进行相应的软件开发。但是,没有拿到物理开发板或对于一些新推出的处理器产品(例如:Arm® Cortex®-M55,Cortex-M85, Ethos™-U 系列 NPU 等)市场上硬件的资源较为稀缺且需要较长的时间才能获取到物理开发板的情况下,是否有办法在相应的平台上进行软件开发呢?

答案自然是有的,这就是我们本期实验手册要给大家介绍的一个非常强大的开发工具:Arm 虚拟硬件(Arm Virtual Hardware)

2. Arm 虚拟硬件镜像产品简介

Arm 虚拟硬件(Arm Virtual Hardware)提供了一个 Ubuntu Linux 镜像,包括用于物联网、机器学习和嵌入式应用程序的 Arm 开发工具:例如,Arm 编译器、 FVP 模型和其他针对 Cortex-M 系列处理器的开发工具帮助开发者快速入门。Arm 虚拟硬件限时免费提供用于评估用途,例如,评估 CI/CD、MLOps 和 DevOps 工作流中的自动化测试工作流等。订阅访问和使用此版本的 Arm 虚拟硬件,您需同意产品最终用户许可协议中与免费测试版许可相关的条款和协议。

Arm 虚拟硬件产品的技术概览示意图如下所示。开发者也可访问 Arm 虚拟硬件产品介绍页和产品技术文档了解更多关于 Arm 虚拟硬件产品知识。


Arm 虚拟硬件产品概览
图1. Arm 虚拟硬件产品概览

二、实验目标

  1. 了解 Arm 虚拟硬件产品的功能及核心优势。
  2. 熟悉 Arm 虚拟硬件云服务器 BCC 实例的订阅流程及 Arm 虚拟硬件镜像内的主要组件。
  3. 掌握如何使用 Arm 虚拟硬件云服务器 BCC 实例进行嵌入式软件的开发(例如:机器学习、物联网应用等)并熟悉其基本的开发流程,包括:如何搭建开发环境、编译构建应用代码、运行调试工程代码等步骤。

三、实验步骤简介

本实验将展示如何使用百度智能云云市场上的 Arm 虚拟硬件镜像开发一个简单的指纹图像识别算法。更详细的实验项目介绍资料请参考本手册第五章《实验步骤指导》中的内容。
本实验主要包括以下几个核心步骤,并在接下来的章节中提供更全面的操作指南:

1. 了解 Arm 虚拟硬件产品的功能及核心优势

  • 访问 Arm 虚拟硬件产品介绍网站或 Arm 公司 官网了解 Arm 虚拟硬件产品信息。
  • 微信搜索并关注 “Arm 社区” 微信公众号(二维码见文末),回复 “AVH” 即可获取更全面的关于 Arm 虚拟硬件产品的最新资讯和技术指南博客。

2. 订阅使用 Arm 虚拟硬件镜像的百度智能云云服务器 BCC 实例

  • (可选地)注册百度智能云账号并完成个人实名验证。
  • 订阅指定的使用 Arm 虚拟硬件镜像的百度智能云云服务器 BCC 实例。
  • 登录所购买的云服务器 BCC 实例并熟悉 Arm 虚拟硬件镜像环境。

3. 完成实验项目的开发与测试

  • 克隆本实验项目代码到 BCC 实例中。
  • 安装本实验项目所依赖的 CMSIS Packs 软件包。
  • 编译构建本实验项目的应用程序,生成相应的可执行文件。
  • 使用 Arm 虚拟硬件镜像中的 Cortex-M7 的虚拟硬件 FVP 模型执行所构建的指纹图像识别应用。

4. 验证实验运行结果

  • 应用程序代码运行过程中,并查看实验结果与预期结果是否一致。

四、实验前准备

本章节将重点介绍如何订阅使用 Arm 虚拟硬件镜像的百度智能云云服务器 BCC 实例。这一步骤是我们后续进行实验项目开发和测试的必要准备,为我们后续实验项目的体验提供了基础的开发环境和工具。

1. 订阅使用 Arm 虚拟硬件镜像的百度智能云云服务器 BCC 实例

Arm 虚拟硬件镜像目前已经在百度智能云云市场上线,具体的订阅步骤可以参考如下。

1.1 百度智能云账号准备

若您已经拥有百度智能云的账号并完成了个人实名验证可忽略部分步骤并直接登录百度智能云平台即可。可选步骤仅面向从未使用过百度智能云的新用户或拥有百度智能云账号(云账号或百度账号)却未完成实名制认证的用户。

1.1.1(可选)注册百度智能云账号

访问百度智能云登录/注册页面注册【云账号】(可选地,也可注册和使用【百度账号】登录)。具体注册流程请根据百度智能云账户注册页面的提示操作并完成注册即可。

1.1.2 登录百度智能云平台

访问百度智能云平台登录页面,根据所注册的账号类型输入相应的账号和密码登录(推荐使用【云账号】,【云账号】的登录示意图如下图所示)。


实名认证入口
图2. 百度智能云平台登录界面

1.1.3 完成实名认证(个人用户)

成功登录后,点击用户头像(位于页面右上角)会自动跳转至【用户中心】界面(或手动选择下拉菜单中的【用户中心】按钮进行跳转)。【用户中心】页面,请参考图 3-6 中的步骤完成个人实名认证(可选地,若为企业用户也可进行企业认证)。


实名认证入口
图3. 实名认证入口

选择实名认证方式
图4. 选择实名认证方式

信息录入并完成实名认证
图5. 信息录入并完成实名认证

认证成功提示
图6. 认证成功提示

请根据自身是否为新用户的情况,二选一完成 1.2 章节。若未购买过百度智能云的任何一款云服务器产品,包括:从未注册过百度智能云账号的用户、以及已注册过百度智能云账号但未有发生过购买行为的用户,即为新用户,可享受优惠购买价格。

1.2 (新用户)购买使用 Arm 虚拟硬件镜像的百度智能云云服务器 BCC 实例

访问百度智能云云服务器新品推荐页面。如下图所示,即为我们需要配置购买的百度智能云云服务器 BCC 实例。


云服务器新品推荐
图7. 云服务器新品推荐

点击【立即购买】按钮,将会自动跳转至如下图所示的订单购买页面。请注意页面底端的【地域】和【云市场镜像】两个选项以及右上角的订单金额

  • 地域】:仅可选择【广州】(推荐)、【北京】、【苏州】此 3 个地域中任意一个。
  • 云市场镜像】:确保其为 Arm 虚拟硬件(Arm Virtual Hardware,AVH)
  • 订单金额】:由于云服务器 BCC 实例的基础设施配置默认且相同,因此订单价格应与图示价格应一致。

确认订单明细及价格
图8. 确认订单明细及价格

点击【下一步】后,将会自动跳转至如下图所示的订单确认页面。请再次核对此页面所示的云服务器 BCC 实例的各个配置选项以及订单价格。


订单确认页面
图9. 订单确认页面

点击【去支付】后,将会跳转至如下图所示的订单支付页面。可根据自己的情况选择支付方式并完成支付。支付完成后,将会显示实例开通成功的提示。开通成功后,即可根据 1.3 章节中的内容进行后续的操作。


订单支付页面
图10. 订单支付页面

实例开通成功提示
图11. 实例开通成功提示

1.2 (非新用户)购买使用 Arm 虚拟硬件镜像的百度智能云云服务器 BCC 实例

1.2.1 订阅百度智能云云市场 Arm 虚拟硬件镜像

访问百度智能云云市场主页,产品搜索框输入 “Arm虚拟硬件” 即可进入 Arm 虚拟硬件产品详情页面(也可直接点击链接跳转)。


百度智能云云市场 Arm 虚拟硬件产品简介
图12. 百度智能云云市场 Arm 虚拟硬件产品简介

请仔细阅读产品详情页面的产品信息以及相关服务协议(例如:《商品服务协议》和《云市场服务协议》),确认无误后勾选【同意】框并点击【立即购买】并进入到百度智能云云服务器 BCC 实例购买配置页面。


Arm 虚拟硬件产品订阅页面
图13. Arm 虚拟硬件产品订阅页面

1.2.2 配置购买百度智能云云服务器 BCC 实例

百度智能云云服务器 BCC 实例的配置与购买示意图如下所示,请仔细阅读下文中配置步骤 a-f 中的注意事项。


百度智能云云服务器 BCC 实例配置页面
图14. 百度智能云云服务器 BCC 实例配置页面

a. 基本配置
  • 付费及地域

    • 计费方式】默认为“包年包月”方式,请勿更改。目前【云市场镜像】仅支持“包年包月”模式,若调整为其他模式会导致无法订阅使用云市场的 Arm 虚拟硬件镜像服务。
    • 当前地域】可选择“华北-北京”、“华南-广州”以及“华东-苏州”(可参考图 15 中选择当前地域为 “华南-广州”)。请勿选择除上述 3 个选项之外的地域。具体原因为:目前百度智能云云市场上线发布的 Arm 虚拟硬件镜像仅可运行于采用 Arm 架构的服务器实例上,仅在上述 3 个地区有提供。

    付费及地域配置参考示意图
    图15. 付费及地域配置参考示意图

  • 配置

    • 实例配置】中【架构】请选择 “ARM计算”(原因如前文所述)。

    • 实例规格】可参考图 16 中选择 “bcc.gr1.c1m4”(即 1 核、4GB 内存)。

    • 镜像类型】请选择【云市场镜像】中的 “Arm虚拟硬件(Arm Virtual Hardware)”。请注意:

      • 若从云市场 Arm 虚拟硬件产品详情页进入,此项默认会自动匹配,无需手动配置。
      • 若从云服务器 BCC 实例创建入口直接进入,请手动搜索选择【云市场镜像】中的 “Arm 虚拟硬件(Arm Virtual Hardware)”。

      实例配置参考示意图
      图16. 实例配置参考示意图

      镜像类型参考示意图
      图17. 镜像类型参考示意图

      (可选)手动选择镜像类型操作示意图
      图18. (可选)手动选择镜像类型操作示意图

  • 存储

    • 系统盘】类型及是否添加额外存储盘会影响实例价格。参考下图,存储配置【系统盘】可选择 “通用型SSD、40GB”,以及不添加其他存储盘。此项无特殊要求,可根据用户所实际开发项目的工作负荷大小进行配置。

    存储配置参考示意图
    图19. 存储配置参考示意图

b. 网络和带宽
  • 网络

    • 私有网络】保持默认配置即可(【网络类型】和【安全组】不进行改动)。
    • 公网访问】保持默认配置即可(【公网带宽】的不同配置模式会造成购买实例时较大的价格差异。参考下图,本实验中推荐保持默认即可,即:【公网带宽】采用 “包年包月计算” 模式并且【带宽峰值】为 “1Mbps”)。

    网络配置参考示意图
    图20. 网络配置参考示意图

c. 登录凭证
  • 登录凭证

    • 如下图所示,请选择 【创建后设置】。
    • 初始登录用户名为 “ubuntu",密码统一为 “avh”。首次登录后请注意及时更改密码为自定义的密码,确保所使用镜像的安全性。受镜像内工具组件的许可证约束,目前仅支持使用 “ubuntu” 作为用户名进行登录和后续开发,请勿使用其他(例如:root)。

    登录凭证配置参考示意图
    图21. 登录凭证配置参考示意图

d. 购买信息

参考下图,保持默认配置即可。可选地,根据自己的需求进行【购买数量】和【购买时长】的自定义选择。


购买信息配置参考示意图
图22. 购买信息配置参考示意图

e. 其他配置

保持默认即可,或可选地参考以下说明进行自定义配置。

  • 部署集】、【标签】、【资源分组】建议保持默认配置。

  • 系统信息】中【实例名称】和【主机名】可保持空白(即由系统随机生成)。

    • (特别地,用于本次创造营活动报销)创建实例的过程中将【实例名称】和【主机名】定义为 “arm-用户的百度智能云 ID ” 的格式(如何找到用户自己的百度智能云 ID 请参考图 29 所示)。
    • (特别地,用于本次创造营活动报销)可选地,在实例创建完成后进行修改,参考后续步骤中的提示。

    其他配置参考示意图
    图23. 其他配置参考示意图

f. 确认订单
  • 订单确认
    配置完成后,点击下方蓝色的【确认购买】按钮即可进入订单确认页面。该页面可再次确认所购买的云服务器 BCC 实例的各项信息(主要包括:BCC、系统盘、EIP、MKT、快照链容量以及代金劵选择等方面)。
    • 请注意,创建实例过程中不同的配置选项会造成价格差异。本实验中的参考配置下的实例价格如下图所示。阅读并勾选同意对应条款后点击页面底部的蓝色【提交订单】按钮即可跳转至订单支付页面。

订单确认页面参考示意图
图24. 订单确认页面参考示意图

  • 订单支付
    订单支付界面可再次查看和确认所订购的云产品服务及其价格,确认无误后可选择支付方式。目前可选的支付方式包括:【账户余额支付】、【支付宝支付】、【微信支付】或其他支持的支付方式。确认无误后,点击页面底部的蓝色【确认支付】按钮即可完成支付。

订单支付页面参考示意图
图25. 订单支付页面参考示意图

  • 实例开通
    支付完成后,请耐心等待实例开通过程。当页面提示如下图所示,即表示实例已经成功开通。

实例开通成功提示
图26. 实例开通成功提示

1.3 查看已购买的使用 Arm 虚拟硬件镜像的百度智能云云服务器 BCC 实例

1.3.1 查看实例列表

实例创建完成后,可以点击图 26 中的【管理控制台】按钮直接跳转到实例列表页面。需要注意的是,请确保跳转后页面上方【控制台总览】旁的地区和在 1.2 节中创建实例时所配置的 【当前地域】 一致,否则可能出现实例不存在或不显示的情况。若不一致,请手动切换为创建实例时所配置的地域(例如,图 15 中所选择的为“华南-广州”,此处选择同为“华南-广州”)。
若确保一致仍未显示,请耐心等待 1-2 分钟,实例可能仍处于创建和初始化过程中。


实例列表详情页面
图27. 实例列表详情页面

1.3.2 查看实例详情

实例列表页面,点击蓝色的实例名称即可跳转至实例详情页面。此页面可以再次查看所创建实例的详细信息,并请重点关注以下几个关键信息:


实例详情页面
图28. 实例详情页面

  • 实例名称和主机名
    如 1.2 章节中所描述,若在创建实例的过程中未自定义实例名称和主机名(即保持空白),则此两项信息将由系统随机生成。为便于活动报销,请参考下面图所示的步骤将其修改为 “arm-用户的百度智能云账户ID” 的格式。若已经在创建实例的过程中完成了规定格式的自定义,请忽略下面的步骤。

    • a. 请访问【用户中心】页面获取自己的百度智能云账户ID。

    获取百度智能云账户ID
    图29. 获取百度智能云账户ID

    • b. 图 28 所示的实例详情页面点击【实例名称】旁的【修改】按钮修改实例名称并点击【确认】完成修改。

    修改实例名称
    图30. 修改实例名称

    修改格式示意图
    图31. 修改格式示意图

    • c. 图 28 所示的实例详情页面点击【主机名】称旁的【修改】按钮修改主机名并点击【确认】完成修改。

    修改主机名
    图32. 修改主机名

    修改格式示意图
    图33. 修改格式示意图

    • d. 主机名修改后,实例将会自动重启。请耐心等待实例完成自动重启。重启完成后,实例【状态】将会由 “重启中” 变化为 “运行中”。

    实例重启中示意图
    图34. 实例重启中示意图

    实例重启完成示意图
    图35. 实例重启完成示意图

  • 状态:确认实例状态处于 “运行中”。

  • 公网 IP:用于 SSH(Secure Shell Protocol)等远程登录操作。

  • 实例规格:确认是否与订阅时选择的一致,参考示例中为 bcc.gr1.c1m4

  • 镜像信息和镜像类型:确认是否与订阅时选择的一致,即 Arm虚拟硬件(Arm Virtual Hardware)(试用版) 和云市场镜像。

2. 登录使用 Arm 虚拟硬件镜像的百度智能云云服务器 BCC 实例

百度智能云云服务器 BCC 实例提供了多种方式供开发者连接登录。如需深入了解,请参考百度智能云云平台帮助文档《登录 Linux 实例》。

强烈推荐有基础的开发者使用 SSH 远程登录方法连接所创建的使用 Arm 虚拟硬件镜像的百度智能云云服务器 BCC 实例(例如,终端使用命令 ssh ubuntu@公网 IP,密码为avh),具体连接方法可参考博客《 Arm 虚拟硬件实践专题一:产品订阅指南(百度智能云版)》,开发体验会更加稳定和流畅。可选地,可参考 2.1 章节所描述的 《浏览器窗口通过 VNC 登录》的方式连接实例。

2.1 浏览器窗口登录(通过 VNC 登录)

本小节将介绍一种更为简单的百度智能云云服务器 BCC 实例的登录方式供开发者参考和使用。如下图所示,点击实例列表详情页面所创建的使用 Arm 虚拟硬件镜像的百度智能云云服务器 BCC 实例(确保实例【状态】为 “运行中” )右侧蓝色的【远程登录】按钮。弹出的窗口选项选择【通过 VNC 登录】,点击后页面即刻跳转至浏览器窗口登录页面如图 38 所示。完全启动后(即不再有新的启动日志滚动),输入登录用户名ubuntu和登录密码avh( Linux 命令行默认不显示密码)。


实例列表详情页面【远程登录】选项
图36. 实例列表详情页面【远程登录】选项

【远程登录】方式选择页面
图37. 【远程登录】方式选择页面

浏览器窗口VNC 登录页面
图38. 浏览器窗口 VNC 登录页面

登录过程中,正确地输入用户名和密码后,页面将会弹出和最终用户许可协议相关的提示信息。请您仔细阅读该提示中提及的网页链接中所展示的EULA文件确认无误后请输入Y/yes/YES等表示您确认同意遵守相应的最终用户许可协议。输入后按下回车,用户即可成功连接登录到所创建的使用 Arm 虚拟硬件镜像的百度智能云云服务器 BCC 实例中。如图所示,当页面信息提示ubuntu@arm-百度智能云ID:~$等信息则代表您已经成功地作为ubuntu的用户身份登录到实例中(请确保用户名ubuntu正确,非root或其他自定义的用户名)。


登录过程提示
图39. 登录过程提示

(可选)登录后可在该页面手动输入 ls 命令可查看当前目录下的文件列表。


查看当前登录目录下文件列表
图40. 查看当前登录目录下文件列表

另外,请重点了解下面的 2 个小贴士,熟悉如何通过浏览器 VNC 登录页面完成实例的重启操作或输入/复制粘贴已有的命令(利于后续项目代码的输入)。

  • 重启实例:如下图所示,实验过程中若需要重启实例,请点击页面右上角的【发送Ctrl+Alt+Del】按钮。实例将立刻重启,重启完成后根据与上面步骤同样的方法输入登录账户名ubuntu和密码avh再次登录即可。

快捷重启实例
图41. 快捷重启实例

  • 输入命令/复制粘贴命令:由于网页直接输入代码或存在不稳定因素,若需稳定的输入命令或直接复制/粘贴已有的命令,请参考以下操作进行。点击页面右上角的【复制命令输入】按钮,输入已经复制的命令内容或手动输入相关命令后点击蓝色的【确认】按钮即可回到命令行输入页面。此处可以发现,所输入/复制粘贴的命令已经填充至命令行处,点击键盘上的回车按钮即可执行命令。

输入/复制粘贴命令方法示意图
图42. 输入/复制粘贴命令方法示意图

执行已输入的命令
图43. 执行已输入的命令

2.2 查看 Arm 虚拟硬件镜像预装软件清单

目前,Arm 虚拟硬件镜像预装的 Arm 相关软件工具清单可以通过以下两种方式查看:

  • 云市场 Arm 虚拟硬件产品详情页的规格参数介绍中的 “集成服务组件及版本” 信息。
  • 登录使用 Arm虚拟硬件镜像的百度智能云云服务器 BCC 实例后(默认登录目录为/home/ubuntu),运行以下命令将自动显示当前版本的 Arm 虚拟硬件镜像安装的 Arm 软件工具清单及其版本信息。同时,运行该命令后,当前目录下(/home/ubuntu)会自动生成文本文件tool-inventory.txt记录了所显示的工具清单和版本信息。

参考执行命令如下(该命令实则执行了位于 /home/ubuntu 目录下的 tool-inventory.sh 脚本文件):

./tool-inventory.sh

可参考的输出结果如下所示:

Arm Compiler information: 
Product: 
Component: Arm Compiler for Embedded 6.18
Tool: armclang [5e4cbf00]
Target: arm-arm-none-eabi

GNU Compiler information: 
arm-none-eabi-gcc (GNU Toolchain for the Arm Architecture 11.2-2022.02 (arm-11.16)) 11.2.1 20220111
Copyright (C) 2021 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

CMSIS build information: 
cbuild: Build Invocation 1.2.0 (C) 2022 ARM
Usage:
  cbuild <project.cprj> [flags]
Flags:
  -c, --clean              Remove intermediate and output directories
  -d, --debug              Enable debug messages
  -g, --generator string   Select build system generator (default "Ninja")
  -h, --help               Print usage
  -i, --intdir string      Set directory for intermediate files
  -j, --jobs int           Number of job slots for parallel execution
  -l, --log string         Save output messages in a log file
  -o, --outdir string      Set directory for output files
  -p, --packs              Download missing software packs with cpackget
  -q, --quiet              Suppress output messages except build invocations
  -r, --rebuild            Remove intermediate and output directories and rebuild
  -s, --schema             Check *.cprj file against CPRJ.xsd schema
  -t, --target string      Optional CMake target name
  -u, --update string      Generate *.cprj file for reproducing current build
  -v, --version            Print version

Arm Virtual Hardware Targets information: 
   FVP_Corstone_SSE-300 information: 
Fast Models [11.22.38 (Oct 27 2023)]
Copyright 2000-2023 ARM Limited.
All Rights Reserved.
Info: /OSCI/SystemC: Simulation stopped by user.

   FVP_Corstone_SSE-300_Ethos-U55 information: 
Fast Models [11.22.38 (Oct 27 2023)]
Copyright 2000-2023 ARM Limited.
All Rights Reserved.
Info: /OSCI/SystemC: Simulation stopped by user.

   FVP_Corstone_SSE-300_Ethos-U65 information: 
Fast Models [11.22.38 (Oct 27 2023)]
Copyright 2000-2023 ARM Limited.
All Rights Reserved.
Info: /OSCI/SystemC: Simulation stopped by user.

  FVP_Corstone_SSE-310 information: 
Fast Models [11.22.38 (Oct 27 2023)]
Copyright 2000-2023 ARM Limited.
All Rights Reserved.
Info: /OSCI/SystemC: Simulation stopped by user.

  FVP_Corstone_SSE-310_Ethos-U65 information: 
Fast Models [11.22.38 (Oct 27 2023)]
Copyright 2000-2023 ARM Limited.
All Rights Reserved.
Info: /OSCI/SystemC: Simulation stopped by user.

  FVP_MPS2_Cortex-M0 information: 
Fast Models [11.22.38 (Oct 27 2023)]
Copyright 2000-2023 ARM Limited.
All Rights Reserved.
Info: /OSCI/SystemC: Simulation stopped by user.

  FVP_MPS2_Cortex-M0plus information: 
Fast Models [11.22.38 (Oct 27 2023)]
Copyright 2000-2023 ARM Limited.
All Rights Reserved.
Info: /OSCI/SystemC: Simulation stopped by user.

  FVP_MPS2_Cortex-M23 information: 
Fast Models [11.22.38 (Oct 27 2023)]
Copyright 2000-2023 ARM Limited.
All Rights Reserved.
Info: /OSCI/SystemC: Simulation stopped by user.

  FVP_MPS2_Cortex-M3 information: 
Fast Models [11.22.38 (Oct 27 2023)]
Copyright 2000-2023 ARM Limited.
All Rights Reserved.
Info: /OSCI/SystemC: Simulation stopped by user.

  FVP_MPS2_Cortex-M33 information: 
Fast Models [11.22.38 (Oct 27 2023)]
Copyright 2000-2023 ARM Limited.
All Rights Reserved.
Info: /OSCI/SystemC: Simulation stopped by user.

  FVP_MPS2_Cortex-M35P information: 
Fast Models [11.22.38 (Oct 27 2023)]
Copyright 2000-2023 ARM Limited.
All Rights Reserved.
Info: /OSCI/SystemC: Simulation stopped by user.

  FVP_MPS2_Cortex-M4 information: 
Fast Models [11.22.38 (Oct 27 2023)]
Copyright 2000-2023 ARM Limited.
All Rights Reserved.
Info: /OSCI/SystemC: Simulation stopped by user.

  FVP_MPS2_Cortex-M55 information: 
Fast Models [11.22.38 (Oct 27 2023)]
Copyright 2000-2023 ARM Limited.
All Rights Reserved.
Info: /OSCI/SystemC: Simulation stopped by user.

  FVP_MPS2_Cortex-M55_ADA information: 
Fast Models [11.22.38 (Oct 27 2023)]
Copyright 2000-2023 ARM Limited.
All Rights Reserved.
Info: /OSCI/SystemC: Simulation stopped by user.

  FVP_MPS2_Cortex-M7 information: 
Fast Models [11.22.38 (Oct 27 2023)]
Copyright 2000-2023 ARM Limited.
All Rights Reserved.
Info: /OSCI/SystemC: Simulation stopped by user.

  FVP_MPS2_Cortex-M85 information: 
Fast Models [11.22.38 (Oct 27 2023)]
Copyright 2000-2023 ARM Limited.
All Rights Reserved.
Info: /OSCI/SystemC: Simulation stopped by user.

特别地,请注意查看以下两项核心组件的相关信息:

  • Arm Compiler for Embedded 工具许可证有效期
    请注意,若运行 tool-inventory.sh 显示组件信息的过程中(注意起始的几行信息),出现下面所示的错误提示信息(红色 error 报错),请运行 armlm inspect 命令检查 Arm Compiler for Embedded 工具的许可证有效期。若有效期信息显示正常(即在有效期时间内),则可忽略并继续进行后续步骤。

    Arm Compiler information: 
    error: Your cached license information has expired and could not be refreshed
    error: Check your network connection and restart armclang
    error: https://lm.arm.com/200
    Product: 
    Component: Arm Compiler for Embedded 6.18
    Tool: armclang [5e4cbf00]
    

    可参考的工具许可证有效期提示信息如下,当前日期在工具许可证有效期限内,故表明该许可证有效期正常。

    ubuntu@ip:~$ armlm inspect
    Keil MDK Community (non-commercial free of charge)
      Product code: KEMDK-COM0
      Order Id: Community
      License valid until: 2033-05-31
      Local cache expires: 6 days and 23 hours
    

    若有效期提示信息异常(如下所示),请尝试重新启动实例(手动关机重启或参考图 41 所示快捷方式)再次运行armlm inspect 命令检查 Arm Compiler for Embedded 工具的许可证有效期。若多次尝试仍然异常,请参考本手册第七章《实验问题解答》中的问题 2。

    ubuntu@ip:~$ armlm inspect
    Keil MDK Community (non-commercial free of charge)
      Product code: KEMDK-COM0
      Order Id: Community
      Local cache expired on: 2024-03-28
    
  • Arm 固定虚拟平台(Fixed Virtual Platform,FVP)模型
    Arm 固定虚拟平台 FVP 模型为软件开发人员提供了基于 Arm 架构的 SoC 的准确模型。若想查看当前镜像内所支持的 Arm FVP 模型的清单,请运行 ls /opt/VHT/bin/FVP_* 命令。

    ubuntu@ip:~$ ls /opt/VHT/bin/FVP_*
    /opt/VHT/bin/FVP_Corstone_SSE-300            /opt/VHT/bin/FVP_MPS2_Cortex-M3
    /opt/VHT/bin/FVP_Corstone_SSE-300_Ethos-U55  /opt/VHT/bin/FVP_MPS2_Cortex-M33
    /opt/VHT/bin/FVP_Corstone_SSE-300_Ethos-U65  /opt/VHT/bin/FVP_MPS2_Cortex-M35P
    /opt/VHT/bin/FVP_Corstone_SSE-310            /opt/VHT/bin/FVP_MPS2_Cortex-M4
    /opt/VHT/bin/FVP_Corstone_SSE-310_Ethos-U65  /opt/VHT/bin/FVP_MPS2_Cortex-M55
    /opt/VHT/bin/FVP_MPS2_Cortex-M0              /opt/VHT/bin/FVP_MPS2_Cortex-M55_ADA
    /opt/VHT/bin/FVP_MPS2_Cortex-M0plus          /opt/VHT/bin/FVP_MPS2_Cortex-M7
    /opt/VHT/bin/FVP_MPS2_Cortex-M23             /opt/VHT/bin/FVP_MPS2_Cortex-M85
    

五、实验步骤指导

通过实验步骤四,我们已经成功地创建并登录了使用 Arm 虚拟硬件镜像的百度智能云云服务器 BCC 实例。本章节我们将通过一个具体的应用案例,带领大家更深入地体验如何使用 Arm 虚拟硬件镜像环境进行嵌入式软件开发的全流程。

1. 克隆实验代码

首先我们需要将实验代码克隆(下载)至 BCC 服务器实例中,便于后续使用 Arm 虚拟硬件镜像环境中的软件开发工具进行进一步的开发调试。
本实验代码的仓库地址为:https://github.com/recan-li/AVH-FINERPRINT-DEMO-RECAN.git ,通过以下命令可以将代码仓库中的代码克隆下载至服务器中。

mkdir test
cd test
git clone https://github.com/recan-li/AVH-FINERPRINT-DEMO-RECAN.git

命令执行后参考结果示意图如下所示:

克隆代码
图44. 克隆代码

代码克隆(下载)完成后,参考如下命令查看已克隆的实验工程目录(示例如下)。若下载过程中出现问题,请查看实验手册第七章【实验问题解答】中的解决方案。

ubuntu@ip:~/test$ ls AVH-FINERPRINT-DEMO-RECAN
AVH-CM7  LICENSE  Makefile  README.md  cmake  fvs-0.1.1-master

1.1 了解实验项目技术栈

通过上述步骤,我们已经成功地将实验项目代码克隆(下载)到了 BCC 服务器实例中。在正式地进行实验项目体验之前,我们首先需要了解本实验项目的一些技术原理和相应的工程代码实现,便于我们更好地理解整个实验项目。本实验设计的指纹图像识别软件算法的流程示意图如下所示。在该架构图中:


软件算法流程图
图45. 软件算法流程图

  • 流程图中可以看出,完成指纹识别的图像匹配算法需分别要经过以下几个关键步骤,即:输入图像(或图像库已存储)、计算山脊方向、计算山脊频率、生成掩码参数、增强图像、二值化、细化、检测细节、绘制细节、提取指纹特征、特征值匹配等步骤。

  • 为便于开发者理解,将该流程精简为下图所示的几个典型步骤。本实验最终判断指纹是否匹配是根据特征值比较的得分数值来比较的,因此会涉及到阈值的设置问题。只有合适地设置阈值大小,才可避免出现指纹识别误判的情况。

    指纹识别的精简流程示意图
    图46. 指纹识别的精简流程示意图

在了解该指纹识别算法的功能和主要步骤的基础上,进一步地,请开发者仔细阅读实验项目的帮助文档 README.md(在实验项目根目录下),有助于更深入理解本实验项目的工程代码实现。

实验工程帮助文档
图47. 实验工程帮助文档

1.2 安装项目依赖软件包

完成实验代码的克隆(下载)后,在构建应用之前,我们仍需要手动安装一些实验项目所依赖的软件包。

1.2.1 安装实验项目依赖的 CMSIS Packs 软件包

本实验项目的开发采用了 Open-CMSIS-Pack 项目的标准形式,我们可以使用 Arm 虚拟硬件镜像中预装的 CMSIS-Toolbox 工具包里的 cbuild 工具来构建本实验项目。
需要注意的是,正常情况下,运行 cbuild 命令在构建工程的过程中会自动下载项目所依赖的 CMSIS Packs 软件包。但由于国内外网络环境的差异,部分 CMSIS Packs 软件包资源的下载速度较慢导致无法自动下载成功。因此,为便于开发者顺利地完成本实验项目的体验,作者提供了本实验项目所依赖的 CMSIS Packs 软件包的压缩包供开发者快捷下载和安装。开发者只需要将该压缩包下载至 BCC 服务器实例的对应位置中(/home/ubuntu 目录下),覆盖原有文件夹即可完成安装。详细步骤如下:

  • (可选)步骤1. 切换至安装目录:切换目录至 CMSIS-Pack 软件包的安装目录(确保后续步骤均在此目录下)。若您已经在 /home/ubuntu 目录下,可跳过此操作。

    cd /home/ubuntu
    
  • 步骤2. 下载压缩包:由于压缩包比较大,受网络配置下载速度的影响,请耐心等待下载完成(下载过程大概需要几分钟)。

    wget https://Arm-workshop.bj.bcebos.com/packs.tar.bz2
    
    软件包下载过程中
    图48. 软件包下载过程中

    软件包下载完成
    图49. 软件包下载完成

  • 步骤3. 解压压缩包:由于压缩包比较大,请耐心等待压缩包解压完成(解压过程大概需要 1-2 分钟)。

    tar -xvjf packs.tar.bz2
    
    压缩包解压完成
    图50. 压缩包解压完成

1.2.2 配置环境变量

参考下面的步骤完成环境变量的配置。

  • (可选)步骤1. 切换至工程目录:切换至克隆的工程目录下(确保后续步骤均在此目录下)。若您已经在 /home/ubuntu/test/AVH-FINERPRINT-DEMO-RECAN 目录下,可跳过此操作。

    cd /home/ubuntu/test/AVH-FINERPRINT-DEMO-RECAN
    
  • 步骤2. 执行环境配置命令:需要注意的是,该命令配置的环境变量并非永久有效,仅单次登录有效。因此,若重启后希望重新构建应用时,需再次执行此命令确保环境变量被正确地配置。

    make source
    

2. 编译构建应用程序

执行下面命令进行应用程序的编译和构建。

make build

执行过程的示意图如下图所示。


编译过程示意图
图51. 编译过程示意图

请注意,本实验项目代码的顶级构建采用的是 Makefile 来进行的,因此关于各个 make 命令所执行的具体命令操作请翻阅目录下的 Makefile 文件进行更深入的学习和了解。为提高实验学习效果,非常建议各位开发者在运行该命令前可主动阅读了解该命令实际完成的操作。例如,上述 make build 命令实际执行了如下图所示的几个命令。该命令执行的过程中使用了 cbuild 工具去构建应用(具体代码如红色标记部分)。关于 cbuild 工具的更多帮助说明,大家可以使用命令 cbuild -h 查看或访问 CMSIS-Toolbox 代码仓库,了解最新、最全面的用户使用指南


Makefile 部分内容解析
图52. Makefile 部分内容解析

当日志显示 info cbuild: build finished successfully! 时说明应用已经成功完成编译构建并生成了相应的可执行文件 image.axf。查看是否已经成功生成该文件,可参考以下命令:

find . -name image.axf
查看可执行文件
图53. 查看可执行文件

3. 验证应用程序运行结果

执行下面命令可将构建好的 image.axf 应用程序运行在 FVP 模型 FVP_MPS2_Cortex-M7 上并查看验证其运行结果。

make run

执行过程的示意图如下图所示。

验证指纹识别算法运行结果
图54. 验证指纹识别算法运行结果

进一步地,参考工程的 Makefile 文件,我们对于上述 make run 命令进行深度命令分析可以发现,除利用 Linux 的基本显示命令 echo 打印基本的提示信息 Running ... 外,更重要的是它相当于执行了以下命令来使用 Arm 虚拟硬件镜像中的 Cortex-M7 的 FVP 模型 FVP_MPS2_Cortex-M7 来执行和验证所开发指纹识别算法应用的功能正确性。本实验所测试验证的指纹图片位于项目工程的 AVH-FINERPRINT-DEMO-RECAN/fvs-0.1.1-master/fingerprint_bitmaps/ 目录下,开发者可自行浏览和比对并并与 FVP 模型输出的指纹图像识别结果进行比对和验证。

/opt/VHT/bin/FVP_MPS2_Cortex-M7 --stat --simlimit 8000 -f AVH-CM7/vht_config.txt out/image.axf

其中,该命令部分参数解读如下:

  • FVP_MPS2_Cortex-M7 即为所调用的 Cortex-M7 的 FVP 模型的名称。
  • --stat 表示停止模拟时,打印相关的运行状态信息。
  • --simlimit 8000 表示模拟运行的时间上限为 8000s,即若用户未手动退出,则8000s 后程序会自动退出运行。
  • out/image.axf 即为所执行的应用文件,即本实验项目开发的指纹图像识别应用的可执行文件。
  • -f AVH-CM7/vht_config.txt 即指定了 FVP 模型运行时的所依据的配置文件。可以通过 FVP_MPS2_Cortex-M7 -l 命令获取 Cortex-M7 的 FVP 模型所有可配置的参数及其默认值(初始值)信息。用户可根据自身需求进行参数调整,获得不同的应用执行效果。

请注意,在应用程序运行的过程中,若希望程序停止运行可按住 ctrl+c 即可随时停止运行仿真过程。

手动停止运行
图55. 手动停止运行

4. (可选)调试应用程序

本小节提供一些关于快捷调试应用程序的指令介绍,用户可根据自身需求进行尝试和了解。

  • 清除构建:如需重新进行完整的工程编译,需要先清除编译过程生成的中间文件。执行下面命令可快速进行清除,完成后若需重新编译,再执行 make build 命令即可。

    make clean
    
    make clean 命令输出示意图
    图56. make clean 命令输出示意图

  • 快速构建:执行下面命令将快速完成从环境变量配置(make source) 到中间文件清除(make clean)、应用构建(make build)和应用执行(make run)等步骤。

    make all
    
    make all 命令输出示意图
    图57. make all 命令输出示意图

  • 调试构建:执行下面命令将仅编译改动的代码,并将重新编译构建好的应用程序运行起来。

    make debug
    
    make debug 命令输出示意图
    图58. make debug 命令输出示意图

六、实验效果展示

经过以上步骤,本实验步骤体验基本完成。参考以下图片进行实验结果图的留存(用于后续实验报销)。需要注意:

  • 展示完整的主机名:根据前面章节要求将主机名改为统一格式,即 arm-用户百度智能云ID 的形式。
  • 展示 Arm 虚拟硬件镜像的运行日志:按下 ctrl+c 可停止应用程序的运行并显示仿真情况信息。
实验结果截图留存参考
图59. 实验结果截图留存参考

七、实验问题解答(遇到问题先看我)

  • 问题1:云服务器订阅完成后, 管理控制台不显示订阅的百度智能云云服务器 BCC 实例的信息。
    出现实例找不到的情况可能存在以下两种可能性:

    • a. 针对管理控制台不显示云服务器的情况: 订阅步骤完成后, 实例开通或需等待一段时间, 可在订单页面查看开通情况, 确保状态为”已创建”则代表实例创建成功。

    已支付(已创建)实例

    • b. 针对订单状态显示”已创建”而点击实例出现无法跳转的情况(例如:页面右上角提示 VPC 权限错误等问题),请再次确认目前所在区域是否为创建实例时所选择的【当前地域】。
  • 问题2:Arm Compiler for Embedded 工具许可证有效期显示信息异常且重启后运行 ./tool-inventory.sh 脚本仍然提示报错信息。
    多次重启后仍然不能解决许可证正常激活的情况,可以运行以下命令手动激活许可证:

    armlm activate -product KEMDK-COM0 -server https://mdk-preview.keil.arm.com
    
  • 问题3:在克隆实验代码的过程中,如果出现类似下面的错误提示无法成功将代码下载至服务器实例中。

    fatal: unable to access 'https://github.com/recan-li/AVH-FINERPRINT-DEMO-RECAN.git': GnuTLS recv error (-110): The TLS connection was non-properly terminated.
    

    不同服务器实例可能存在随机性的差异。多次尝试原下载命令后,若仍无法从 GitHub 上的代码仓库中拉取代码,则可以考虑从作者的网盘链接中下载相应的示例代码。切换到测试目录 /home/ubuntu/test下后,请参考执行以下命令完成代码的下载和解压。

    wget https://Arm-workshop.bj.bcebos.com/AVH-FINERPRINT-DEMO-RECAN.tar.bz2
    tar -xvjf AVH-FINERPRINT-DEMO-RECAN.tar.bz2
    
  • 问题4:显示项目构建成功 (info cbuild: build finished successfully!) 但是运行时提示 image.axf 文件找不到。
    可能是应用程序构建过程中部分命令没有正确执行。可以重启服务器并运行以下命令重新构建应用。

    make all
    

八、参考文档

  1. Arm 虚拟硬件产品简介

  2. Arm 虚拟硬件帮助文档

  3. Arm 虚拟硬件开发者资源

  4. 【中文技术指南】Arm 虚拟硬件实践专题一:产品订阅指南(百度智能云版)

  5. 【中文技术指南】Arm 虚拟硬件实践专题二:Arm 虚拟硬件 FVP 模型入门指南

  6. 【中文视频直播课】加速AI开发,1小时快速入门Arm虚拟硬件

  7. Arm 社区微信公众号

    Arm 社区微信公众号

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

架构师李肯

您的鼓励是我前进的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值