• [技术干货] 第五讲:鲲鹏编译调试及原生开发工具基础知识
    课程链接:https://www.hikunpeng.com/zh/developer/live/detail/1537729153943310338鲲鹏编译调试及原生开发工具基础知识分为两个板块进行讲解。第一个版块是开发框架插件的内容介绍。第二个板块是开发框架功能特性与案例演示。在介绍鲲鹏开发框架插件之前,先让我们了解一下什么是原生开发。因为鲲鹏开发框架插件的提供的功能是帮助用户快速上手。原生开发的定义是什么呢?让我们来看一下。即开发者基于任意环境快速开发新软件应用,可在鲲鹏服务器或鲲鹏架构下高效运行。开发过程体验好、粘性强,此过程称为鲲鹏原生开发。它主要具备以下四个特点,首先,开发体验好。开发体验好主要体现在易用和好用两个方面。易用,即不改变开发者原本的开发习惯,降低开发者的学习成本。好用在于开发者开发鲲鹏应用可以敏捷开发,提升开发效率,让开发者可以高效地进行创新。鲲鹏原生开发的第二个特点是架构自亲和,即开发过程屏蔽硬件复杂性鲲鹏架构自亲和。鲲鹏原生开发的第三个特点,应用高性能,即在用户开发应用时发挥鲲鹏架构优势,释放鲲鹏算力,构建极致性能。鲲鹏原生开发的最后一个特点是多算力兼容,多样算力兼容,一次开发多次复用,性能可移植。待介绍完原生开发的概念之后,接下来让我们看一下鲲鹏开发框架插件是什么。很多开发者在刚开始接触鲲鹏原生开发时都会遇到这样的问题,对鲲鹏加速库的 API 不熟悉,不知道有哪些 API 也不知道如何去使用。同时对如何将自己的程序针对鲲鹏处理器进行加速优化的方法也一无所知。针对这些开发者遇到的这些常见问题,鲲鹏推出了鲲鹏开发框架插件,帮助开发者更便捷的开发鲲鹏应用,使能开发者高效创新。鲲鹏开发框架插件可以在 ID 的插件市场中免费获取,在插件市场中搜索鲲鹏关键字就可以看到了。鲲鹏开发框架插件充分利用了鲲鹏平台的各类型算力,即性能更优的第三方组件,提供了三大特性,分别是鲲鹏工程向导洗发、日编程代码亲和检查等能力。一键引入了鲲鹏加速库,快速构建鲲鹏应用软件框架,引导用户快速上手。原生开发。接下来我们整体的看一下鲲鹏开发框架插件给我们提供了哪些功能。从图中我们可以看出,鲲鹏开发框架插件着眼于开发全流程,在开发前、开发中、开发后都提供了重要的特性,帮助开发者提升开发效率,提高应用性能。在开发前,开发者可以使用开发向导功能,通过输入一些简单的工程配置项,就可以一键创建鲲鹏工程,从而快速上手鲲鹏原生开发。鲲鹏工程中包含了基础的 demo 文件以及相关加速库的 demo 和源码文件。开发者通过鲲鹏工程不仅可以了解奔鹏加速库的 API 是如何调用的,还可以在远程服务器上实地的进行运行,查看鲲鹏加速库带来的极致性能提升。在开发过程中,鲲鹏开发框架插件提供了启发式编程功能,用户只需要输入相关函数的关键字,鲲鹏开发框架产插件便会根据这些关键字进行智能联想,并提示该函数的一些相关内容。这些内容中包含功能名称、优化内容、对应的汇编指令等丰富的信息,帮助用户了解鲲鹏加速库的 API 在用户开发之后可以使用代码亲和检查功能。代码亲和检查是鲲鹏原生开发的一大特性之一,功能分布在鲲鹏开发框架插件和迁移插件中。在鲲鹏开发框架插件里,主要的实现形式是鲲鹏加速分析,它会扫描用户工程中可以用鲲鹏加速库 API 替换的代码,并生成详细的可视化报告,帮助用户更好地进行替换。好待对开发框架插件进行了一个整体的介绍过后,接下来让我们详细的展示一下鲲鹏开发框架插件的功能特性。第一个要介绍的开发框架插件的功能特性是鲲鹏工程向导。鲲鹏工程向导的实现效果如图中所示,在输入一些简单的工程配置项之后,选择相关的加速库信息之后,可以自动构建鲲鹏工程,推动用户深入地进行鲲鹏原生开发。接下来让我们仔细看一下鲲鹏工程要怎样进行创建。首先在创建鲲鹏工程的页面中输入相关的工程配置项,诸如工程名称、工程位置语言选择语言必标准工程类型等。用户只需要输入和选择一些关键项目信息,开发框架插件就会根据用户的选择自动创建鲲鹏工程用户点击下一步之后就到了加速库选择页面。鲲鹏工程目前支持 jstd 激励吧 C Hyper scan 等 7 款加速库,涵盖系统、压缩、存储三大主要类别。这些加速库基于鲲鹏 920 处理器微架构特点进行了大量优化,可以使鲲鹏服务器的性能得到更充分的释放。除了这些棚加速库,我们还提供了加解密媒体、数学库、网络库等四大加速库的主要类别的下载链接,用户可以点击获取资源按钮下载并使用这些家族库。接下来我们介绍一下开发框架插件的第二大特性,启发式编程。启发式编程针对所有进行鲲鹏原生开发的开发者,提供了总量几千条的函数编码,实时智能补全仪式内容信息全覆盖广,包含鲲鹏加速库函数以及 new interest 函数。股权内容包含功能描述、优化点描述、对应汇编指令等多种提示信息。我们从页面的图中可以看到,当用户输入相关函数的关键字之后,开发框架插件就会进行编码。智能实时补全的提示,提示相关用户可能想输入的函数,并展示了丰富的补全信息,帮助用户提高开发效率,提升用户的使用体验。启发式编程提供的函数智能提示功能会在用户编写 C 或 C 加文件时触发。它主要针对这么两种函数进行智能联想与补全,分别是鲲鹏加速库函数以及 NEO interest 函数。鲲鹏加速库函数的智能补全包含了 ZSTD chaekml 等 14 款加速库,覆盖系统压缩加解密、数学四大基础加速场景,为大数据加解密、分布式存储压缩应用场景提供高性能加速。利用 interesting 函数的智能联想包含了 arm 提供的所有 new inch 这个函数。 new 函数相比于传统的使用纯汇编语言对 NEO 寄存器进行操作,具有可读性强、开发速度快等优势。最后让我们来看一下代码亲和检查特性的功能。代码亲和检查特性在开发框架上的实现主要是鲲鹏加速分析。鲲鹏加速分析针对压缩系统加解密、媒体数学五大基础加速场景进行分析优化,它会扫描开发者工程中可以使用鲲鹏加速库函数进行优化的代码,并整理出详细的可视化报告。用户将这些函数替换成鲲鹏加速库函数之后,就可以提高用户工程在鲲鹏服务器上的运行性能。接下来让我们看一下可视化报告中给我们提供了哪些信息。我们可以看到报告中提供的信息有函数名、所在路径、函数简介、加速方法等比较关键的信息。同时还提供了下载链接,开发者可以点击下载链接下载相关的鲲鹏加速库函数并进行替换使用。鲲鹏开发框架插件的功能特性暂时讲解到这里。接下来让我们使用 VSCode 这个非常主流的 IDE 去实战一下。我们在 vs code 上搜索鲲鹏开发框架插件并进行下载使用实地体验一下鲲鹏开发框架插件给我们提供的强大功能。大家在设计开发场景中,经常会是在本地 Windows 环境中使用 IDE 编码,比如使用 VSCode 然后再手动将代码上传到远端服务器,之后在服务器上进行编译调式运行等一系列操作。如果遇到编译错误,又得回到本地继续修改,修改完成之后再上传编译。如果遇到运行错误,这个时候我们就需要在服务器上进行调试定位问题,然后再到本地修改代码,然后再上传编译运行重复前面的一些动作。我们推出鲲鹏编译调试插件,就是为了解决这一系列因为开发调试环境分离而造成的开发效率低下的问题。鲲鹏调鲲鹏编译调试插件能够在本地 IDE 中实现一站式部署开发。远程区编译调试功能可以简化大家在 Linux 服务器开发流程和提高大家的开发效率。下面给大家介绍一下编译条插件的基本功能。在编译之前可以使用编译调试插件提供的一键式部署编译器的功能,将选择的编译器一键部署到目标服务器上。可以选择的编译器类型有 GCC for open 欧拉和避声编译器以及避声 gdk 在配置目标服务器之后,我们可以创建编译任务。在编译之前,我们可以通过手动同步,就是通过按钮操作,一次性将项目的文件同步到远端服务器,或者通过自动同步,通过监听代码变更,自动将变更的文件同步到远端服务器。这两种方式将本地代码上传到远端服务器。代码同步完成之后,执行编译操作,编译的过程以及结果可以通过本地终端查看。在编译成功之后,也可以通过测试用例功能,就是添加测试用例,然后执行测试用例,通过执测试用例的代码执行整个过程。也可以整个过程无需本地与远端服务器之间的频繁切换,实现的本地 IDE 中一站式部署开发远程调试和编译。下面给大家介绍一下编译调试插件的功能特性以及部分案例演示。编译调试插件以插件的形式集成到 IDE 中,给鲲鹏生态用户安装使用。当前工具支持部署编译器、远程编译和远程运行调试三大功能,目的是解决开发者因开发和调试环境分离造成的开发效率低下的问题,实现本地 IDE 开发调试一体化。部署编译器的功能。支持部署 GCC for open 欧拉、避声编译器和避声 gdk 单款编译器整个部署的过程不需要手动登录到远端服务器,仅在本地 ID 端即可完成部署。 GCC for open 欧拉是一款基于 GCC 开发,主要是因为当前很多服务器软件都是基于开源 GCC 开发。为了减少客户切换的成本,我们在 GCC 上也做了优化和改进,比如提供高性能编译算法,提供加速指令集、高性能数学库等。 SPC 2006 和 SPC 2017 性能比开源的 GCC 九点三高 10% 以上。B 升编译器是基于开源的 LVM 开发,是一种 Linux 下针对鲲鹏九十零的高性能编译器。主要支持 C 语言、 C 加语言、 fountrie 语言。这三种语言是在 HPC 高性能计算场景下使用最多的语言。毕生编译器针对鲲鹏的芯片指定集、流水线也做了增强和优化,比如高性能的编译算法,提升指令和数据吞吐量。另外还提供一些加速指令集和 AI 迭代调优,充分发挥鲲鹏架构的最佳性能。毕森 gdk 是基于 openjdk 定制开发的开源版本,是一款高性能可用于生产环境的 openjdk 发行版。毕生 gdk 是 open gdk 的下游,我们在华为内部 500 多个产品上广泛使用,积累了大量使用场景和 Java 开发者反馈的问题和需求,解决了很多业务运行中的实际问题,并且针对这些问题也做了相应的修复。在 arm 架构上也进行了优化和稳定性增强,使得在 arm 架构下更加稳定,在大数据场景下也获得了更好的性能。远程编译,你们插件也是提供的可视化界面执行,无需重复手动输入编译命令,同时再配合其他调试插件支持调配,在配合其他调试插件下,支持远程执行和调试的功能。当然在使用编译调试插件与远程编译和运行之前,需要完成配置远程服务器。这边一键是部署的编译器的一个部分界面。一键是部署编译器的目标服务器,就是需要处于联网状态。在输入目标服务器的相关参数,比如 IP 地址 polar 端口以及用户名和密码。配置好之后,插件会根据选择的编译器类型,从官方镜像网站下载对应的编译器自动完成安装。这也是为什么要保证目标服务器也是处于联网状态。因为这个要从官方网站下载对应的编译器。在下载和安装的过程中,也可以通过 ID 的终端去查看具体的下载和安装的进度。在安装完成之后,也会给出工具部署成功的提示,整个过程都不需要去登录远程服务器。在编译器安装完成之后,下一步就是进行远程编译。首先创建一个编译任务,可以给编译任务进行不同的命名,而且指定编译命令。这样创建好一个编译任务。下面就是将本地代码同步到远端服务器进行编译,同时可以在终端查看整个的编译结果。当然在设置同步设置远程同步代码的时候,也可以在设置中启动自动同步功能。如果本地代码发生变化,会自动同步到服务器。代码自动同步到服务器之后,可以直接通过编译生成新的可执行文件。在编译完成情况下,可以通过添加测试用例来进行远程运行和调试。这是一个调试二进制的一个页面。大家可以看到这是归因有一些调试按钮和正在运行的一个行。这边高亮行就是正在运行的那一行。下面是运行的结果,下面大家看一下部分的案例演示。这边是一个编译器部署的页面,这上面是可以选择编译器的类型,就是那三款编译器以及右边是服务器 IP 地址、端口号,还有用户名以及用户的密码。这边选择通过密钥认证这些信息填完填完之后可以通过检测连接,如果能够连,如果连接没有问题就可以直接部署。这是编辑部署这个功能。远程编译的话是先创建一个编译任务指定一下编译名称和编译命令。然后会在编译任务下面会有一个列表展示,列表展示上面去这个按钮可以点击去执行整个编译任务。编译任务执行的时候,会通过选择对应的目标服务器的话,会会去执行编译编译的过程中是能够在终端查看整个编译过程程执行编译执行的过程这边是添加测试用例,然后远程运行和调试。测试用例这边也是有一个测试用例的任务名称以及可执行的程序和程序所在的路径,最后面也可以加一些参数。然后运行完之后那个也可以点击调试按钮,调试按钮的话就会进入到这个调试的界面。这个调试的界面就跟本地调试是一样的,有一些继续什么步入步出,还有一些下一步还有一些重启会暂停一些功能。下面用一个 demo 给大家演示一下。下面这个例子比较简单,就是一个简单的 hard word 输出。首先在不介入我们调试插件的情况下,如果想调试运行这个程序,咱们需要将这个上面本地的代码传到人的服务器上,先打一个压缩包,然后通过本地的 sap 命令转到人端服务器上。我这个服务器也是通过远程实验室申请的。 Workspace.输入密码。已经传到了免单服务器 in the workspace 目录,然后进行解压,然后再进到 demo 的 demo 目录。这个时候就需要去在远端服务器执行它的编译命令,可以看到生成的一个 hello 的二进制文件,这个时候就执行 hello 然后就打印了这个 hello world 这是不借助我们工具。而且如果要是通过修改代码的话,比如说我又在代码里面修改的一个,再打印一个 hi word 然后这个时候又需要进到项目中。但是这个时候可以对单独的文件进行上传,不需要再去打压缩包了。然后在这个要上传到它的文件目录 demo 下面再输入一遍密码。这时候传上来之后,要重新对这个文件进行编译,它能生成到一个新的二进制文件。这整个过程可以看到在这个远端服务器和本地 IDE 之间去来回的切换,而且还需要手动将变更了代码以及最开始的代码都要同步到远端服务器。这个过程还是比较比较复比较复杂的,完全非常影响大家的开发效率。对于我们的鲲鹏调试插件,就对这一块做的做了优化。首先在插件市场搜查搜一下鲲鹏,这些都是我们鲲鹏生态的一些插件,这个是我们编译调试的插件。安装完之后,首先因为我们这个上面不需要可以不需可以,如果有编译器源不需要去安装编译器,可以直接通过添加目标服务器邀请。这个是输入服务器 IP 地址,然后端口号默认 2 加 2 端口,然后用户名 root 工作空间就是 root workspace 这边因为我新建了一个新建那个 test 目录,就是为了对比你现在在这个目录新建一个 test 目录,这边可以通过输入需要传入那个私公私钥。公钥,就是为了方便后面自动上传代码的免密边填入 root 的账号密码。配置完成之后,它会提示一个你可以开始调试任务了。点击确认这边就是添加调试任务,因为这个部署编辑可以不需要部署编译任务,指定一个名称 build SED 刚才我们的编译命令就是 make 创建一个编译任务,就是可以启动编译,这边就需要选择你的目标服务器。如果添加多个目标服务器,这边会一个个列表,就需要选择你这个编译任务在哪个目标服务器上去运行。因为我们代码这个时候还没有同步到远端服务器,现在远端服务器这个目录下是空的。所以说第一步就选择同步并编译,就是将本地的这个代码同步到远端服务器上。这边就是编译的输出,可以看到编译成功。可以看到编译成功,也生成了这个 hello 的二进制文件。然后这个时候就可以通过创建那个测试用例。来测试这个编译的。问编译的二进制这个程序路径就是这个生成的二进制的路径。这个也没有参数,所以说调试参数就直接空着了。然后添加测试用例。添加的测试用例之后,可以点击这个测试用例上面的获取测试用例,也是可以选择一个 IPD 一个目标服务器获取测试用例。完成之后这边可以展开有一个测试用例的任务,点击一下运行。这是就是刚才这个代码这边打印的两句话,一个 hello word 一个 high word。也可以通过这个调试。这个是通过 GDB 远程调试,然后在实现本地调试,这个是可以通过下一步这种或者是继续,这都是可以的。下面就是如果下面就是配置一下自动代码自配置,自动上传选择配置的服务器,配置完之后大家可以看一下。就是如果这个时候我去修改代码。然后点击的直接按下 ctrl S 然后在下面右下角这里提示代码已经同步上去,这时候咱们可以在这边看一下。就是远端服务器代码是已经同步过来了,然后这个时候直接就可以不需要去上传代码,直接可以点击这个编译任务,重新将这个只能生成一下这个二进制文件仅编译这个二进制文件生成完之后这边测试用例去执行的时候就是最新的。所以说整个过程人是不需要去额外的去频繁地切换这个远端服务器和本地的 ID 只需要在这边修改调试。比如说又需要调试的话,就直接点击一下,这是下一步。这都是可以完全实现本地调试。如果就是不想去每次修改代码的时候都去把这个代码同步到远端。远端服务器可以将可以在那个地方给将它的手动,手动将它那个自动改为手动,那这个否有关闭的自动同步的功能。就不需要去。但是这个时候如果编译之前就将代码同步一遍就可以了以上就是编译调试插件的介绍和部分功能的演示,谢谢大家。下面由我的同事王启坤给大家继续介绍鲲鹏开发框架插件。好,接下来让我们打开 VSCode 这个开发工具,实地安装一下鲲鹏开发框架插件,体验一下鲲鹏开发框架插件给我们提供的强大功能。打开 VSCode 工具之后,让我们点击扩展按钮,搜索鲲鹏。搜索结果中展示了这么几个信息,首先是鲲鹏 David kit 鲲鹏 David kit 是所有鲲鹏 David kit 插件的一个集合。当你安装鲲鹏 DEV kit 之后,会自动将下面四个插件全部进行安装。今天我们只演示鲲鹏开发框架插件的功能,所以我们只安装鲲鹏开发框架插件,点击按钮之后就可以快速进行安装了。安装之后会弹出鲲鹏开发框架插件的详细内容。从这些内容中我们可以看到鲲鹏开发框架插件支持的相关鲲鹏加速库,比如系统库、压缩库、加解密媒体等,同时还展示了鲲鹏开发框架插件围绕鲲鹏处理器提供的加速策略。接下来让我们看一下鲲鹏开发框架插件给我们提供的第一大功能等工程管理向导。首先点击鲲鹏开发框架插件按钮,之后先关闭其他无关页面,并点击新建鲲鹏工程按钮。现在我们创建一个包含相关加速库的一个鲲鹏工程,工程名称定为 PaaS demo 1 工程位置默认选择地盘之后我们选择两个加速库进行下载。比如我们选择系统库的 Hyper scan 以及压缩库中的。 Be zip. 点击创建工程,并选择继续下载。下载加速库会为我们从目标地址中下载鲲鹏加速库的源码,之后我们在当前窗口查看工程。此时工程内容已经展示在左侧栏中了。从左侧栏中的信息我们可以看到主要以有以下几个主要内容。首先 SRC 中包含一些简单的 hello world 式的 demo 我们先禁用一下这个错误波形曲线。之后在 sort party 里面包含我们刚刚选择的两款加速库的子文件夹,分别是 zip 还有 Hyper scan 这两款。那么以 gzip 为例,它下面包含 G zip 加速库对应的 demo 以及 G zip 加速库对应的源码。 G zip 是一个压缩库。所以说 jessica demo 中就提供了对 gzip 的加密和压缩和解压缩的 API 的调用。同时除了这两个内容之外,还提供了一份详细的 README 文档,指导用户如何对 gzip 这个工程进行编译并运行。接下来我们以这个工程为基础,试一下鲲鹏开发框架插件给我们提供的第二大功能,也就是启发式编程。首先以面点 C 这个工程为基础,我们先输入一下鲲鹏的加速库函数。以 kml 数学库为例,当我输入 K 的时候,其实他就已经对相关的函数进行提示了。提示的信息除了有对应的加速库函数,还包含这个函数对应的一些详细信息,比如功能描述、优化点介照、下载地址等。当你想选择对应的函数进行补全时,除了用鼠标点击,还可以直接敲击回车键。当你敲击回车键之后,你就可以发现对应的鲲鹏加速库函数已经进行了高亮展示。同理利用 interest 函数也是一样的操作方法。比如我输入 VA 它就会给我提示相关的一些函数信息,我选择 VBA his 16,它的功能描述是长行绝对差值,再加上 16 敲击回车同样是高亮进行展示,这就是鲲鹏开发框架插件给我们提供的第二大功能启发式编程。接下来我们使用用一下鲲鹏开发框架插件提供的加速分析功能。加速分析可以分析用户选中的对应工程或文件中的内容,扫描出其中可以使用鲲鹏加速库函数进行替换的内容,并提供一份详细的可视化报告供用户进行查看。我们以 gzip demo 中的 demo gzip.cbp 文件为例进行一次扫描,右键这个文件,点击加速分析按钮。此时我们可以看到开发框架插件会先让用户选择对应的加速分析类型。如果用户只想针对自己的工程或文件进行压缩方面的扫描,就可以直接选择压缩库。这一次我为了给大家更好的展示扫描结果,我针对这个文件进行所有相关加速库的加速分析。点击确认分析按钮之后,右下角会有对应的进度提示。同时下面的问题弹窗中会展示相关可以优化的函数,即对应的详细信息,比如名称、描述、优化点等。扫描结束之后,会议在当前页面中展示详细的可视化报告。从这个报告中我们可以看出有以下几点重要内容,比如对应的函数名、所在地址、加速方法等,同时提供了查看和下载按钮,用户点击下载会自动跳转到对应的加速库的下载地址,用户可以下载之后进行对应的函数替换。同时用户可以点击查看按钮,跳转到对应的函数地址,方便用户进行下一步的替换。此时鲲鹏开发框架插件给我们提供的三大功能已经全部演示完毕。接下来让我们回到 PPT 看一下鲲鹏开发框架插件的相关关沙箱实验内容。目前鲲鹏社区推出了鲲鹏开发框架的在线实验,用户可以登陆鲲鹏社区搜索基于鲲鹏亲和开发框架进行原生开发这么个实验。这个实验会指导用户创建并运行坤鹏工程,帮助用户快速熟悉原生开发的过程和优势。今天在这里我带大家大概看一下这个实验的一些具体的内容。好,这个实验它的目的是指导用户通过鲲鹏开发框架插件从 0 到 1 完成原生开发的基本开发过程,让用户熟悉原生开发的基本操作过程,体验原生开发带来的极简操作和性能提升。我们看一下实验手册。实验手册中主要分为以下四步,非常简单,安装插件、创建工程并查看工程,最后编译并执行这个鲲鹏工程安装和创建鲲鹏工程。这么两步刚刚已经给大家进行了个展示,查看工棚工程的话,我们来看一下这昆仑工程到底有什么。点击查看工程按钮之后会展示对应的工程内容。我们可以看到在这个实验中创建的是 gzip 相关的一个加速库的 demo 那么这个 demo 里面一共有两个子文件夹,分别是 G zip demo 还有 G zip demo 的源码。那么 G zip 这个源码是已经下载并解压好的 gzip 鲲鹏库。这个加速库针对鲲鹏处理器的架构特点,对 gzip 原生库进行了加速优化。接下来的这个实验就是利用这个 demo 来对比加速库和原生库在解压两个 G 大小文件时的解压效率。接下来让我们大致看一下在编译并执行鲲鹏工程时,加速库和原生库的解压效率究竟有何不同。我们略过这些命令的相关内容,看一下具体的执行结果。大家也可以自己去鲲鹏社区上的这个在线实验去手动操作一下,看看自己得到的结果和沙箱实验里面提到的结果是否有和不同?首先先进行的是 dzip 鲲鹏加速库对两个 G 大小压缩文件的解压。从终端动作结果可以看出解压时间是 27.3 秒。下面使用的是原生 gzip 来对比这个解压性能。我们可以看到原声库针对两 G 大小的压缩文件的解压时间是 34.8 秒,加速库相比于原生库有 20% 的性能提升。
  • [问题求助] 【200DK】【ascendCamera】fatal error:driver/peripheral_api.h:没有那个文件
    【功能模块】想运行https://gitee.com/ascend/samples/tree/master/cplusplus/level1_single_api/5_200dk_peripheral/ascendcamera【操作步骤&问题现象】1、执行“make",一直报找不到acl/acl.h,acl/acl_base.h的问题。通过修改src下面的CMakeList.txt大概解决了这个问题。2、但是还是出现了新的问题。我怀疑我的环境变量有问题,但是实在不会改。通过find也找不到该文件。【截图信息】【日志信息】(可选,上传日志内容或者附件)
  • [交流吐槽] 第四天(第二章)笔记
    # 第四天(第二章)笔记 ## Hello_word ### 添加源码文件 打开源码,在applications/BeraPi/BearPi-HM_Nano/sample下,新建文件夹my_app,在此文件夹下新建一个hello_world.c文件,在新建一个BUILD.gn文件 ### 编写hello_word代码 在新建的hello_word.c文件夹中编写以下代码 ![j.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20227/17/1658049415612141462.png) 在myapp路径下的BUILD.gn文件下添加代码 ![a.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20227/17/1658049432371477053.png) static_library中指定业务模块的编译结果,将hello_word.c文件编译成libmyapp.a文件 在sample路径下的BUILD.gn文件下添加代码,放在最下边 ![d.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20227/17/1658049463544142869.png) ### 编译 打开MobaXterm,打开源码,登录,在code/code_3路径下进行编译hpm dist,编译成功之后,打开HiBurn工具,需要查看开发板与电脑的连接情况,设置波特率为115200,选择烧录文件,点击connect进行下载,成功之后通过MobaXterm查看 ## 点亮LED ### 添加源码文件 在sample路径下新建my_led文件夹,在my_led路径下新建led_example.c文件和BUILD.gn文件(与hello_world一样)。 ### 添加源码 在led_example.c文件下添加代码 ![h.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20227/17/1658049479498402130.png) 在my_led路径下的BUILD.gn文件中添加代码 ![p.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20227/17/1658049495474462008.png) 在sample路径下的DUILD.gn文件中添加代码 ![屏幕截图 2022-07-16 210601.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20227/17/1658049524588227066.png) 烧录代码与上述相同 烧录完成之后根据上述的步骤可以查看LED灯被点亮 ### 实现LED灯闪烁 在led原代码下添加for循环 ![w.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20227/17/1658049538437917779.png) ## Ninja编译工具 在Unix/Linus下通常使用Makefile来控制代码的编译,但对于比较大的项目有时候会比较慢。故重新开发出来新的编译工具Ninja,编译速度更快。 ### 如何编译模块 用vscode来访问服务器 模块gn文件 ![kp.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20227/17/1658049555055599075.png) 业务gn文件 ![op.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20227/17/1658049570549164380.png) Json文件 ![ij.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20227/17/1658049583578551984.png) ### 如何执行代码 ![iu.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20227/17/1658049609303667281.png) ## CMSIS-RT0S2接口 CMSIS-RT0S2是一个通用的API,与底层的ROTS内核无关,程序员在用户代码中调用CMSIS-ROTS2 API函数时,可以方便的将应用程序从一个ROTS移到另一个ROTS。 ### OpenHarmony与CMSIS-RT0S2接口联系 OpenHarmony在CMSIS-RT0S2接口中封装了LiteOS-m的内核代码 结构关系 ![iy.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20227/17/1658049625749422167.png) ### 使用CMSIS-RT0S2接口 在业务代码中包含有"cmsis_os2.h",通过调用API函数可以使用系统相关功能 更多API: ![ji.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20227/17/1658049641322550069.png)
  • [干货汇总] 我用开天平台做了一个城市防疫政策查询系统,你不试试?
    【摘要】 华为云开天集成工作台是基于华为在数字化转型中积累的丰富经验,为企业开发者提供基于元数据的可扩展的集成框架,降低了应用间集成工作量,并沉淀多种集成资产如连接器、业务模型、行业API等。它可以帮助客户快速建立SaaS应用之间的连接通道,打破信息孤岛与“烟囱式”架构,从而实现应用的快速构建和上线,持续提升用户体验。本文分享自华为云社区《我用开天平台做了一个城市防疫政策查询系统【开天aPaaS大作战】》,作者: jackwangcumt 。1 开天集成工作台概述      根据华为官方文档的介绍,所谓的华为云开天集成工作台是基于华为在数字化转型中积累的丰富经验,为企业开发者提供基于元数据的可扩展的集成框架,降低了应用间集成工作量,并沉淀多种集成资产如连接器、业务模型、行业API等。它可以帮助客户快速建立SaaS应用之间的连接通道,打破信息孤岛与“烟囱式”架构,从而实现应用的快速构建和上线,持续提升用户体验。      产品官方网址为 : https://www.huaweicloud.com/product/mssi.html .  开天集成工作台总体架构示意图如下图所示:       开天集成工作台使能伙伴的SaaS高效上云,与伙伴共建行业方案,共同沉淀和分享行业经验。开天集成工作台提供如下核心能力特征:(01)标准的数据模型管理:领域信息模型的采集、定义、管理能力,支撑在行业建立标准的领域信息模型库,行业内各厂家应用依托标准的领域信息模型进行互联互通。(02)灵活的API生命周期管理:支持合作伙伴的API设计、实施、测试、发布、运维、消费和运营,并可封装为便于编排的连接器和流。(03)可扩展的连接器管理:它是集成工作台流编排能力扩展的唯一方式,提供了丰富的预置连接器,用户还可以基于API自定义连接器。(04)可视化流管理:基于连接器,通过可视化的方式进行流式组合,实现集成流编排。扩展支持多种形式编排如流程编排,事件编排等。      开天集成工作台产品优势如下:     (01)丰富的行业经验:面向行业的业务模型库,拉通管理者、业务人员和IT人员。行业能力API化,覆盖工业、城市治理、教育、办公、Message、Map、移动应用等领域。SaaS应用间集成资产多样化,开箱即用,降低交付复杂度。     (02)灵活易用地集成:基于标准业务模型的集成模式,每个应用只需集成一次,实现X*Y*Z变成X+Y+Z。开放的连接框架,可灵活定义各种连接器和流,适配企业的业务逻辑。2 开天集成工作台用户和应用场景        开天集成工作台是一个“开放、共生、智能、协同”的平台,它是搭建开发者、系统集成商、客户之间的“桥梁”和“纽带” 。具体来说,用户可以分为如下几种类型:(01)面向行业API开发者:一站式完成行业API设计、编排、测试、发布和消费,打造API商业经济。(02)面向行业应用开发者:以低代码或者零代码的方式,轻松构建面向行业的SaaS应用,加速业务创新。(03)面向系统集成商:和客户无缝对接,进行集成开发,交付项目和运维支持。同时,沉淀云上项目的集成资产,提升交付效率。(04)面向客户:企业集成资产的使用和管理,并联合生态资源如系统集成商等,完成企业数字平台建设。         开天集成工作台的应用场景也非常丰富,主要可以分为三类应用场景:(01)行业能力开放场景,企业把自身能力以API服务的形式开放出来,通过API连接应用开发者、系统集成商等,服务更多的商业场景,快速形成产业链,从而让企业以最小代价满足客户碎片化且日益增长的需求。(02)使能行业应用创新场景,合作伙伴通过集成工作台提供的低代码/零代码的方式,可以方便使用各种资产如行业API、业务模型、连接器等,完成应用的开发和部署;它使能不同层级的开发者,极大增强企业应用的供给能力。(03)SaaS应用互联场景,企业应用建设随着业务发展逐步展开,势必要解决企业存量应用与新应用之间的协同,通过建立应用间的水管,让价值信息在企业内部及企业间流动。通过集成工作台,实现云上应用间、云上应用与企业内部应用间集成。具体可以用如下几张图来说明:3 城市防疫政策查询系统快速构建        开天集成工作台内置了各类模板,可以快速基于模板构建流应用。在开发自己的应用之前,请确保成功开通开天集成工作台。目前处在公测阶段,可以免费体验,开通的网址为 : https://www.huaweicloud.com/product/mssi.html 。       注意:申请公测后,页面会跳转到开通工作台的界面,页面上如显示【您还没有开通集成工作台】属于正常跳转流程。点击【立即开通】,输入所属行业和企业名称,账号正式开通集成工作台。       登录开天集成工作台管理控制台 https://console.huaweicloud.com/macroverse/ssi/?region=cn-north-4#/console/portal  。进入【流编排】【我的流】,首次体验,可以点击【从模板创建流】页签,选择【根据出入城市查询出行城市防疫政策】模板来创建。如下图所示。        点击【创建流 】,弹出界面,单击【继续】,并显示流编排的可视化管理界面,如下图所示:      这里我们首先将发送邮件的节点删除,然后添加新的发送短信节点,如下图所示:           注意:经测试,华为短信(体验)节点发送的短信内容不能过长,否则会导致发送失败,因此,这个我将短信内容可以进行了简化。        单击【华为短信(体验)】,并编辑短信内容,如下图所示:        注意:由于防疫政策查询中的风险等级查询返回的结果是"0","1","2","3"等值,这样并不直观,因此我们自定义了一个函数getRisk(riskId)。        自定义函数可以通过如下界面进行定义,目前支持nodejs和python两种语言来进行自定义函数的创建,具体界面如下所示 :   函数创建完成后,可以进行测试,看看能否正确工作,这里需要注意参数的数据类型,这个返回的是字符串的"1" 而不是 数值 1 。该函数代码如下所示:# -*- coding:utf-8 -*- import json ## main函数是方法的入口, ##设置变量表单项的变量 ## 会被预置到inputData中, ## 如果你在上面定义了参数name ##则在inoutData["name"]就可以访问变量name ## result 是此函数的输出,可以是一个基本类型或string类型 ##,也可以是Object类型, def main(inputData): result="" if inputData["riskId"] == '0' : result="暂无" elif inputData["riskId"] == '1' : result="低风险" elif inputData["riskId"] == '2' : result="中风险" elif inputData["riskId"] == '3' : result="高风险" else : result="部分中高风险" return result    测试结果示意图如下所示:      单击左边的画布中的元素节点,右边可以显示具体的属性信息。这里我们基于手动触发事件的方式来构建查询系统。模板中的防疫出行政策查询的城市是在第一个节点进行指定的,为了更好的灵活性,我们将城市作为参数,从第一个节点进行传入。单击第一个节点,并添加参数:         然后,在第一个节点中,添加参数值,在【动态内容】中可以选择前一步定义的参数,from和to 。如下图所示:     至此,我们就可以进行【保存并测试】,这样可以来进行测试自定义的出行防疫政策查询是否可以工作,正确执行后,可以有短信通知:
  • [应用平台AppSta...] 【开天aPaaS专家说】一文带你搞懂企业工作台SaaS应用的“四统一”
    作者:荀礼勇(华为云开天aPaaS专家)      众所周知,企业内部存在很多支撑运营的应用,包括:HR类应用、差旅类应用、财务类应用、业务相关类应用如CRM,这些应用都有自己的账号体系,自己的部门管理,这就导致用户很难以一个账号使用多个应用,也无法基于统一的账号来梳理企业内部的信息流,这不仅影响用户的使用体验,也大大降低了工作效率。      怎么解决呢?最好的办法就是进行账号管理的统一,这也是大多数企业数字化转型的第一步。      像华为云云商店已经有超过700+个SaaS软件,但是当前用户没有使用统一的ID服务,而是分散在每个SaaS软件独立的ID体系内,用户使用每个SaaS时都需要重新登录,使用体验很不好。      并且,由于每个SaaS之间用户体系不通,各SaaS之间如果需要数据和信息互通,就需要专门的集成开发,例如:用户想把会议系统上的会议信息同步到自己的日历上,但如果没有打通用户ID,这么简单的需求就无法完成。      为了解决上述问题,开天aPaaS企业工作台提出了“四统一”规范,即:统一账号:提供账号注册,账号同步管理能力,实现全应用账号的统一;统一组织:提供组织管理(包括部门新增、修改、删除和查看),通讯录管理及成员管理(添加成员、修改、删除、成员邀请)能力;统一登录:实现应用一次登录,其他应用无须二次登录,包括Web单点登录能力、APP单点登录登录能力;统一授权:实现SaaS应用进行组织的统一授权,授权方式包括:用户授权、组织授权、用户组授权、管理员授权。      企业工作台提出“四统一”规范,目的就是要实现账号的统一,信息的协同。这就要求必须要对用户、部门统一进行集中管理。这也是“四统一”规范主要包括的两部分内容:账号管理统一:涉及到用户管理(通过用户生成应用账号)统一、部门管理统一、授权管理统一。先将登录的相关用户信息同步到ISV服务商,ISV再根据同步过来的信息入库,并初始化用户的权限等相关内容。认证协议规范:账号如何应用到SaaS应用系统中,这就需要SaaS应用基于标准的认证协议进行改造,其认证源指向企业工作台。用户登录应用时,应用根据标准协议获取用户信息,之后与账号管理同步过来的信息进行比对,如果存在相应的角色赋权,就展示页面并显示可访问页面菜单。      这就是企业工作台统一账号、统一组织、统一登录、统一授权的“四统一”规范,如果你对“四统一”规范感兴趣,可点击以下链接,了解规范详细内容:https://support.huaweicloud.com/accessg-marketplace/zh-cn_topic_0070649109.html
  • [问题求助] 【中泰化学项目】消费者程序启动正常,发送消息后,消息不能正常消费,也没有任何异常。
    【功能模块】API测试 、消息队列服务MQS【操作步骤&问题现象】1、LiveData->API测试  名称为“1.1.1.设备属性数据变化通知”的api, 点击测试-》测试API,返回成功提示后,在java消费端收不到消息,也没有报任何异常。【截图信息】详情请看附件【日志信息】(可选,上传日志内容或者附件)详情请看附件易丽 15891449679  yili003@chinasofti.com
  • [二次开发] 通过RESTful API接口获取SmartRooms智能协同大屏的sip号码发起视频呼叫
    目前越来越多的客户使用并购买了华为云会议的SmartRooms大屏设备,它可以同样加入到华为云会议中,通过RESTful API调用的方式将设备拉入会议中,满足企业多场景自定义下的使用问题。SmartRooms激活具体步骤可参考链接:https://support.huaweicloud.com/smartroom-meeting/toctopics/zh-cn_topic_0000001167929241.html调用服务端查询企业通讯录接口serchKey字段中填写SmartRooms的名称,便于搜索响应样例获取到sip号码后,可以通过创建会议接口自动邀请或者会中邀请与会人添加SmartRooms到会议中SmartRooms可设置来电自动接听(可选)
  • [其他] 【开天aPaaS专家说】无码化集成系列之连接器应用场景
    作者:包宜强(华为云开天aPaaS专家)API是一种使用公开的系统功能而不是 UI 从系统访问信息的方法。API允许人们创建与系统交互的应用程序或在现有系统之上创建新的应用程序/UI。这时候您需要属性API接口定义/协议,使用不同语言的开发工具去调用它们,使用的是有一定门槛的。有了API,为什么我们还需要用连接器? 因为API对开发技能有要求啊。我们以笔记本电脑输出视频到电视为例,类比如下所示: 可以看到连接器是在API的基础之上,结合事件和业务场景,进行了封装,并提供了可视化操作UI,降低了使用门槛,例如上面的分别连接到电脑和电视的接头。通过使用连接器您可以避免点对点集成,通过集成应用如流编排组合使用不同的连接器,来访问不同的应用系统。假设您用到制造MES、办公OA系统,这些系统有自己的“语言”,您就需要1个翻译人员,他能打开两个不同系统的钥匙,从而简化这两个系统之间的沟通。 接下来大家可以对API进行组合编排,发布成新API的连接器-API流,通过它,您可以很方便实现场景化API。例如点击 创建流定义组合的API的请求和响应,并添加其它连接器调用不同的API。 例如您有天气API,获取位置信息API,您可以通过API编排,发布一个新的带有位置信息的API,您只要输入位置信息既可返回所在位置的天气,这样的话可以简化API的多次调用。 相关术语:1、连接器对接各类应用/系统的工具,开发者以可编排实例的方式集成第三方系统,无需关注具体代码实现,只需要配置服务地址和鉴权信息。2、操作操作是和对接系统的交互例如使用某个操作在 SQL 数据库中查找、写入、更新或删除数据。3、触发器在发生特定事件时选择某个操作。4、连接连接器存在各种的认证配置信息,而连接就是来保存这些认证信息,只有在配置了连接之后,才可以正常使用连接器。~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~立即体验开天aPaaS集成工作台
  • [活动体验] [活动体验] API中文文档上新,MindSpore邀您检视
    mindspore.nn.MSSSIMissue:https://gitee.com/mindspore/mindspore/issues/I5EYQR?from=project-issuePR:https://gitee.com/mindspore/mindspore/pulls/37025
  • [问题求助] CloudLink Kit_21.0.0.6_SDK iOS版包含私有api不能上架App Store
    CloudLink Kit_21.0.0.6_SDK包含私有api,不能上架App Store被拒原因如下:ITMS-90338: Non-public API usage - The app references non-public symbols in Frameworks/tsdk_service.framework/tsdk_service: _rdft. If method names in your source code match the private Apple APIs listed above, altering your method names will help prevent this app from being flagged in future submissions. In addition, note that one or more of the above APIs may be located in a static library that was included with your app. If so, they must be removed. For further information, visit the Technical Support Information at http://developer.apple.com/support/technical/
  • [其他] CloudLink Kit_21.0.0.6_SDK iOS版包含私有api不能上架App Store
    CloudLink Kit_21.0.0.6_SDK包含私有api,不能上架App Store被拒原因如下:ITMS-90338: Non-public API usage - The app references non-public symbols in Frameworks/tsdk_service.framework/tsdk_service: _rdft. If method names in your source code match the private Apple APIs listed above, altering your method names will help prevent this app from being flagged in future submissions. In addition, note that one or more of the above APIs may be located in a static library that was included with your app. If so, they must be removed. For further information, visit the Technical Support Information at http://developer.apple.com/support/technical/
  • [分享交流] 让 Rust 库更优美的几个建议!你学会了吗?
    Carl M. Kadie喜欢创建软件库。两个月前将一个 Python 包移植到 Rust crate 中。这个新的 Rust crate 与 Python 包的易用性和表现力相匹配。实践中,他学到了九条规则,可以帮助你在 Rust 中创建漂亮的库。规则是:1.创建简洁明了的例子2.改进函数参数使其能够接受更多的类型3.了解你的用户的需求,知道用户到底想要什么4.使用构建器(builder) 来让其可配置化5.写好文档让你的设计更有诚意6.定义 From 来接收常见类型7.编写API测试8.定义并返回有意义的错误9.使用Clippy在这种情况下,库是供其他程序使用的 Rust crate。库的 API是程序可以调用的一组公共函数和对象。功能性 API 只是让用户做他们需要做的一切;而优美的 API 可以让他们以简单而明智的方式完成他们需要做的事情。
  • [问题求助] 【OBS产品】【授权用户获取桶列表功能】将权限桶读取授予其他用户,其他用户如何能查询到该桶,API请求和OBS客户端都获取不到
    【功能模块】【操作步骤&问题现象】1、2、【截图信息】【日志信息】(可选,上传日志内容或者附件)
  • [问题求助] 留言管理是否可以提供api进行自动导出
    留言功能挺实用的, 但是每次手动导出很麻烦,也不能做到及时,开发者是否可以考虑增加一个sdk或者接口提供留言导出功能
  • [问题求助] 【LB】【通过API添加后端云服务器报错】如何通过lb的sunbet筛选可以添加的云服务器
    【功能模块】API 负载均衡 pool 中添加云服务器报错【操作步骤&问题现象】1、LB中添加pool2、pool 中添加云服务器报错所有的操作都是通过API请求的看报错信息是由于云服务的subnet 与 loadbalancer 的子网不匹配导致的,请问如何通过LB 的subnet去AP查询可添加云主机,筛选条件是什么【截图信息】【日志信息】(可选,上传日志内容或者附件)"NeutronError": {"type": "MemberRouterLoadBalancerRouterMismatch", "message": "Router of member's subnet ff65f2cc-d8f9-42d1-9200-d492f3da3d00 and router of loadbalancer's subnet d62410b4-7b03-4e2a-819d-2e744b15f7b0 mismatch