嵌入式软件设计-基于华为海思Hi3861芯片和OpenHarmony操作系统 课件06 嵌入式软件开发环境_第1页
嵌入式软件设计-基于华为海思Hi3861芯片和OpenHarmony操作系统 课件06 嵌入式软件开发环境_第2页
嵌入式软件设计-基于华为海思Hi3861芯片和OpenHarmony操作系统 课件06 嵌入式软件开发环境_第3页
嵌入式软件设计-基于华为海思Hi3861芯片和OpenHarmony操作系统 课件06 嵌入式软件开发环境_第4页
嵌入式软件设计-基于华为海思Hi3861芯片和OpenHarmony操作系统 课件06 嵌入式软件开发环境_第5页
已阅读5页,还剩103页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第六章嵌入式软件开发环境武汉大学计算机学院赵小刚嵌入式软件开发与通用的软件开发有许多共同点。它继承了许多通用软件开发的习惯,但是嵌入式系统具有很强的硬件依赖性和专用性。嵌入式软件系统通常只为软件提供运行环境,而不提供软件的开发环境。本章主要介绍嵌入式软件交叉开发和仿真开发技术,并着重介绍基于Hi3861芯片的嵌入式软件开发环境和开发工具。学习完本课程后,您将能够:掌握嵌入式软件的编译过程;了解嵌入式系统仿真开发技术,掌握LiteOS系统仿真环境搭建;了解LIteOS系统编译构建过程,掌握LiteOS编译构建工具的使用。掌握LiteOS操作系统裁剪方法嵌入式软件的编译及调试仿真开发技术LiteOS-M编译系统构建开发工具DevEcoToolsLiteOS操作系统实验嵌入式软件特性嵌入式软件系统是以应用为中心,嵌埋在系统运行环境中,所处环境、表现形式、内部结构、主要功能等都因不同应用而千差万别的系统。嵌入式软件系统的一个突出特点在于,通常只为软件提供运行环境,而不提供也没必要提供软件的开发环境。嵌入式软件的另一个重要特性是专用性,即它们只能为指定的更大的系统工作,无法运行于其他系统中。也就是说,它们一旦被加载到所要控制的系统中,软件的功能和行为也就相应的确定了。另外,在嵌入式系统中软件的运行与硬件有着紧密的联系,因此,嵌入式软件具有很强的硬件依赖性。嵌入式软件开发工具特性需要协调管理特殊的硬件资源。软件具有可配置/裁剪特性。需要交叉编译环境。需要交叉调试环境。需要交叉测试环境。需要软件固化工具。与通用软件相比,嵌入式软件开发工具的特殊性主要体现在软件编译调试等软件编码实现和测试方面。嵌入式软件的编译交叉开发概念交叉编译的难点交叉汇编器和工具链链接器和定位器关键术语本地工具(nativetool):宿主机的操作系统自带的编译器、汇编器、链接器等工具,称为本地工具。交叉编译器(cross-compiler):运行在宿主机上的、能将高级语言程序生成被目标机微处理器识别的二进制指令的工具软件,称为交叉编译器。交叉汇编器(cross-assembler):运行在宿主机上的、能将汇编程序生成被目标机微处理器识别的二进制指令的工具软件,称为交叉汇编器。工具链(toolchain):将程序代码转换为能被目标机微处理器识别的二进制指令的过程中使用的相互兼容的各种工具软件的集合,称为工具链。交叉编译概念运行在宿主机上的编译器、汇编器、链接器等一系列用来建立在宿主机上运行程序的工具称为本地工具(nativetool)。例如,运行于X86平台的Linux系统上的本地编译器gcc能够创建运行在Corei7系列CPU上运行的程序,如果目标主机也是X86平台,那么这个本地编译器还是有效的;但如果目标主机是其他平台的机器,如基于RISC-V架构的Hi3861处理器,那么这个编译器生成的二进制代码是不能运行在目标平台的。交叉编译器能够运行在宿主机上,却能够生成被目标机的微处理器识别的二进制指令的程序被称为交叉编译器(CrossCompiler)。可以把从宿主机开发源码,到经过交叉编译器编译生成目标主机可执行程序的过程称为交叉编译过程(CrossCompiling)。宿主机与目标机宿主机与目标机的差别主要是指:硬件的差别:员主要是两者的处理器不同。宿主机的CPU多数是X86系列或与其兼容的其他处理器,而目标机的CPU则是的例如RISC-V等品种繁多的嵌入式处理器。因此,两者支持的指令集、地址空间都也不同。其他,如内存容量、外围设备等均有很大差别。软件环境的差异:在宿主机上都有通用操作系统等系统软件提供软件开发支持,而目标机除了调试代理外几乎没有其他用于嵌入式软件开发的软件资源。现有的嵌入式操作系统仅可作为嵌入式软件运行时的支撑。交叉编译的难点理论上,一个经过本地编译器编译正确的程序在交叉编译器编译时也应该正确;但在实际上,可以被一种编译器接受的某种数据结构不一定能被另一种编译器接受。以C语言为例,在使用if、switch等语句时不会出现问题,但如果使用未经声明的函数,或者使用了旧的函数声明形式,那么就会产生问题;某段程序能够在宿主机上运行并且能够通过交叉编译,但并不能保证该程序能在目标机上运行;比如一个int类型的变量在宿主机和目标机上的字节长度不一样;或者struct类型的变量的存储组织方式不一致;以及对于变量的非对齐存储访问能力等;将一台嵌入式设备上能正常运行的程序,复制到另一台嵌入式设备上也会出现问题,即使两台嵌入式设备具有同架构的CPU。一种可能的情况是两台嵌入式设备上具有不同的外设类型。交叉汇编器和工具链本地链接器和加载器当用户请求应用程序时,本地链接器首先在宿主机的硬盘上生成可执行文件,然后由操作系统中的加载器(loader)程序来读取。加载器在内存中找到分配给待加载程序的位置,将程序从硬盘读取到内存中,启动运行程序。本地链接器和加载器嵌入式系统的链接器/定位器定位器生成的文件是要被一些将输出复制到目标主机的程序(HiBurn)所使用的。输出到目标主机的程序会立刻在目标主机上运行。在嵌入式系统中,应用程序和操作系统是紧耦合的;定位器会将应用程序代码添加到RTOS中,然后这个组合好的固件会一起烧写到目标主机上。定位器输出示例下图展示的是在华为公司开发的嵌入式软件开发工具DevEcoStudio中的定位器的输出,这个是个汇编代码,产生于二进制镜像之前。从中可以看到这是一段中断向量下载程序,会下载到003b8004这个位置,从Hi3861开发板内存分布图可以看到,这个位置正好是ROM的起始位置。合理安排程序在目标主机上的分布在嵌入式环境中,装入程序必须解决的另一个问题是嵌入式程序在嵌入式存储设备中的分布问题。嵌入式存储设备包括ROM、RAM和Flash。ROM和Flash都是可以持久化存储数据的:ROM容量较小,速度较快;Flash容量大但速度较慢。RAM速度最快,但掉电数据会丢失。需要根据各种设备的特性,同时结合程序结构和运行的特点进行综合评估,来确定嵌入式程序的存储方式。合理安排程序在目标主机上的分布嵌入式软件的调试应用软件调试准则软件调试基本技术硬件调试方法嵌入式软件开发环境调试准则在开发过程中尽早发现错误运行所有代码开发可重用、可重现的测试在宿主机上做尽可能多的测试软件调试常用硬件调试方法ROMMonitor:将一段ROMMonitor的程序固化在目标机上,负责监控目标机上被调试程序的运行,该程序与宿主机的调试程序一起完成对应用程序的调试;ROMEmulator:ROMEmulator是一种硬件,可以连接到目标机的ROM插座上,取代目标机的ROM内存。这样用户程序将被调试程序下载到ROMEmulator中;ICE(输入电路仿真器,InCircuitEmulator):ICE是嵌入式系统领域使用得最多、功能最强大的调试器之一。ICE是一种用于替代目标机上CPU的设备,可以执行目标机CPU的指令,能够将内部的信号输出到被控制的目标机,ICE上的内存也可以被映射到用户的程序空间。常用硬件调试方法OCD(片上调试器):在CPU芯片内部内嵌一个调试模块:当满足一定的触发条件时CPU进入某种特殊状态,如BackgroundMode;在该状态下,被调试程序停止运行,主机的调试器可以通过处理器外部特设的通信接口,如JTAG,访问各种资源,如寄存器、存储器等,并执行指令。交叉开发环境由于嵌入式软件开发的特点,它提供的是一套嵌入式软件编码阶段的交叉开发工具,包括交叉编译环境、交叉调试环境、嵌入式开发支持环境以及其他辅助工具。嵌入式软件的编译及调试仿真开发技术LiteOS-M编译系统构建开发工具DevEcoToolsLiteOS操作系统实验仿真开发技术仿真开发技术的分类仿真开发过程仿真开发环境仿真开发的意义嵌入式软件交叉开发需要建立一个交叉编译环境,将应用系统下载到目标机(或开发板)等硬件环境,然后启动运衍调试系统。这种方法存在一个明显的缺陷:开发过程严重依赖宿主机和目标机协作。也就是说,一方面只有在目标硬件系统准备完成之后,才能进行软件系统的调试和运行。另一方面,软件和硬件开发相互牵制,硬件引起的异常行为严重影响软件的调试和测试,导致开发进度延误,软件质量难以保证。仿真开发的特点仿真开发是解决上述问题的有效途径之一。该方法利用计算机仿真技术模拟嵌入式硬件系统的真实运行,使软件开发和系统集成在虚拟平台上进行,在硬件原型制造前就完成系统模型验证和运行行为分析,避免软硬件开发相互等待,提高开发效率,降低风险和成本。仿真开发的分类按照所使用物理环境的差别,嵌入式软件的仿真开发可分成基于仿真硬件的开发和纯软件仿真开发两大类。纯软件的仿真开发是软硬件同时开发的唯一选择。它利用宿主机上的资源模拟目标机的实际硬件电路的运行(包括外设模拟),构建应用软件运行所需的虚拟硬件环境,提供嵌入式软件开发和调试的真正“软”平台,从而在宿主机上完成整个应用软件的仿真开发和执行。纯软件仿真开发技术又可分为应用级仿真、编程接口级仿真和硬件级仿真三类。编程接口级仿真关注的是所开发的嵌入式软件在功能上是否满足需要。所以也可以称为功能级仿真开发技术。其主要利用宿主机资源从功能上模拟嵌入式应用软件开发所需要编程接口函数,并保证接口与实际函数的一致。而后者就是利用这些接口一致的仿真函数,编写需要的嵌入式软件并运行,从而在功能上进行验证。其实整个过程就是”硬件无关”部分软件的测试支架代码。硬件开发仿真硬件级仿真主要看眼于对物理硬件的功能和内部运行过程进行仿真,其基本元素是硬件指令的操作和过程,因此该方法也可称为指令级仿真开发。开源仿真工具qemuQEMU是一套以GPL许可证分发源码的模拟处理器软件,在GNU/Linux平台上使用广泛。qemu1.0之后的版本,主要利用qemu-kvm加速模块,QEMU能模拟至接近真实电脑的速度。QEMU有两种主要运作模式:Usermode模拟模式,亦即是用户模式。QEMU能启动那些为不同中央处理器编译的Linux程序。Systemmode模拟模式,亦即是系统模式。QEMU能模拟整个电脑系统,包括中央处理器及其他周边设备。它使得为跨平台编写的程序进行测试及除错工作变得容易。默认支持多种架构。可以模拟x86、MIPS

、SPARC、PowerPC、ARM和RISC-V等主流CPU架构。QEMU工作示意图因为KVM是硬件辅助的虚拟化技术,主要负责比较繁琐的CPU和内存虚拟化,而Qemu则负责I/O虚拟化,两者合作各自发挥自身的优势,相得益彰。QEMU源码结构Qemu软件虚拟化实现的思路是采用二进制指令翻译技术,主要是提取guest代码,然后将其翻译成TCG中间代码,最后再将中间代码翻译成host指定架构的代码,如x86体系就翻译成其支持的代码形式,ARM架构同理。

Windows下的QEMUEclipse+嵌入式MCU插件嵌入式软件的编译及调试仿真开发技术LiteOS-M编译系统构建开发工具DevEcoToolsLiteOS操作系统实验LiteOS交叉编译环境构建gcc编译器项目构建工具项目构建流程gdb调试器GNU的嵌入式开发环境GNU开发环境是自由软件基金组织为Linux配套的一套性能优异、使用灵活的开发工具,包括C编译器gcc(GNUCCompiler)、make工具GNUmake、开发调试工具gdb(GNUDebugger)等。这些工具不但功能强大,而且它们都是按GPL版权声明发布,不需要任何的使用费用。随着Linux在嵌入式领域不断深入发展,GNU的开发环境也成为嵌入式领域的主流开发环境,在嵌入式软件开发中会经常用到它们,而且随着广大开发人员的不断补充完善,这些工具逐渐加入了许多支持嵌入式应用的功能。gcc编译器

gcc是GNU推出的完全免费、功能强大、性能优越的多平台编译器工具集,包括cpp、g++、as、ld等,它的前端支持C、C++、ObjectiveC、Java等高级语言,后端支持多种平台,包括34家公司的29种CPU上的53种的不同版本。生成的代码,其执行效率与一般的编译器相比平均要高20%-30%。同时,gcc是一个交叉编译器,它可以把源代码编译成在其他硬件平台上运行的可执行代码。gcc工作过程编译过程交叉gcc的生成本地gcc编译器使用交叉编译gcc生成LiteOS-M采用的交叉编译器LiteOS的编译工具链,目前以GNU为主,类型是gnu-arm-gcc和gnu-risc-v-gcc。基于32位RISC-V架构CPU的LiteOS-M,最后编译生成的交叉编译工具为riscv32-unknown-elf-gcc。此外,LiteOS目前还支持clang+LLVM模式的编译工具链,LiteOS-A的内核态编译均使用llvm编译器。make一个实际的工程项目一般由一系列文件组成。如果每一次编译都手工输入相关参数依次完成,不但枯燥费时,不规范,而且容易出错。为此,GNU工具集提供了一个项目编译管理工具make:可以自动查找出已经修改的源程序文件,并对它们进行编译;而对未改动的源程序文件,如果已经存在中间代码文件(“.o”文件)则不再重新编译:最后将所有的中间代码文件和库链接成可执行文件或特定格式的目标文件。实际使用时,make需要得到可执行文件和各源程序文件间的相互关系;这些信息记录在一个默认名称为makefile的指定文件中目标

makefile文件描述了目标和生成目标的源程序文件之间的依赖关系:目标依赖于哪些源程序文件,按照什么样的规则生成。目标的状态取决于所依赖的源程序文件状态。当所依赖的源程序文件发生改变后,make就按照生成规则重新生成目标。gdb调试类似于传统的桌面软件开发,嵌入式程序在编译和链接过程中会检查出源程序的一些语法错误,但这些仅仅是比较简单、易排除的静态错误,而更为复杂的错误,特别是一些动态错误,有必要依赖良好调试工具来排除。这种情况在多任务、实时处理的软件中更为突出。

GNU工具套件中为此提供了功能极强的gdb调试器。gdb是一个交互的、面向程序行、源代码级的字符调试器。通过它,可以知道程序在何处由于故障而终止,查看变量和表达式在运行过程中的值,在源代码中设置断点,运行和跟踪程序等,功能极其强大。LiteOS-M交叉编译构建工具一个基于gn和ninja的构建系统,以支持OpenHarmony组件化开发为目标,提供以下基本功能:支持按组件拼装产品并编译。独立构建芯片解决方案厂商源码。独立构建单个组件。基本概念子系统:子系统是一个逻辑概念,它由一个或多个具体的组件组成。OpenHarmony整体遵从分层设计,从下向上依次为:内核层、系统服务层、框架层和应用层。系统功能按照“系统>子系统>组件”逐级展开,在多设备部署场景下,支持根据实际需求裁剪某些非必要的子系统或组件。组件:系统最小的可复用、可配置、可裁剪的功能单元。组件具备目录独立可并行开发、可独立编译、可独立测试的特征。Gn:Generateninja的缩写,用于产生ninja文件。Ninja:ninja是一个专注于速度的小型构建系统。Hb:OpenHarmony的命令行工具,用来执行编译命令。目录结构

build/lite├──components#组件描述文件├──figure#readme中的图片├──hb#hbpip安装包源码├──make_rootfs#文件系统镜像制作脚本├──config#编译配置项│├──component#组件相关的模板定义│├──kernel#内核相关的编译配置│└──subsystem#子系统编译配置├──platform#ld脚本├──testfwk#测试编译框架└──toolchain#编译工具链配置,包括:编译器路径、编译选项、链接选项等构建流程

重要命令hbset:设置OpenHarmony源码目录和要编译的产品。hbbuild:编译产品、开发板或者组件。编译主要过程如下:读取编译配置:根据产品选择的开发板,读取开发板config.gni文件内容,主要包括编译工具链、编译链接命令和选项等。调用gn:调用gngen命令,读取产品配置生成产品解决方案out目录和ninja文件。调用ninja:调用ninja-Cout/board/product启动编译。系统镜像打包:将组件编译产物打包,设置文件属性和权限,制作文件系统镜像。配置规则为了实现芯片解决方案、产品解决方案与OpenHarmony是解耦的、可插拔的,组件、芯片解决方案和产品解决方案的路径、目录树和配置需遵循一定的规则。芯片解决方案芯片解决方案是指基于某款开发板的完整解决方案,包含驱动、设备侧接口适配、开发板sdk等。芯片解决方案是一个特殊的组件,源码路径规则为:device/{芯片解决方案厂商}/{开发板}。芯片解决方案组件会随产品选择的开发板默认编译。组件解决方案-目录树规则组件源码路径命名规则为:{领域}/{子系统}/{组件}。组件BUILD.gn的编写建议如下:编译目标名称与组件一致。组件对外可配置的特性变量需声明在该组件BUILD.gn中,特性变量命名规则:ohos_{subsystem}_{component}_{feature}。特性在组件描述中也需要同步定义,在产品配置文件config.json中按需配置。宏定义规则:OHOS_{SUBSYSTEM}_{COMPONENT}_{FEATURE}component├──interfaces│├──innerkits#系统内接口,组件间使用│└──kits#应用接口,应用开发者使用├──frameworks#framework实现├──services#service实现└──BUILD.gn#组件编译脚本芯片解决方案-目录树规则device└──company#芯片解决方案厂商└──board#开发板名称├──BUILD.gn#编译脚本├──hals#OS南向接口适配├──linux#可选,linux内核版本│└──config.gni#linux版本编译配置└──liteos_a#可选,liteos内核版本└──config.gni#liteos_a版本编译配置Config.jni关键配置选项kernel_type:开发板使用的内核类型,例如:“liteos_a”,“liteos_m”,“linux”。kernel_version:开发使用的内核版本,例如:“4.19”。board_cpu:开发板CPU类型,例如:“cortex-a7”,“riscv32”。board_arch:开发芯片arch,例如:“armv7-a”,“rv32imac”。board_toolchain:开发板自定义的编译工具链名称,例如:“gcc-arm-none-eabi”。若为空,则使用默认为ohos-clang。board_toolchain_prefix:编译工具链前缀,例如:“gcc-arm-none-eabi”。board_toolchain_type:编译工具链类型,目前支持gcc和clang。例如:“gcc”board_cflags:开发板配置的c文件编译选项。board_cxx_flags开发板配置的cpp文件编译选项。board_ld_flags:开发板配置的链接选项。新增组件helloworld首先确定组件归属的子系统和组件名称,完成源码开发后,添加组件编译脚本。以编译组件hello_world可执行文件为例,applications/sample/hello_world/BUILD.gn可以写为:如上编译脚本,可编译出一个可在OpenHarmony上运行的名为hello_world的可执行文件。executable("hello_world"){include_dirs=["include",]sources=["src/hello_world.c"]}添加到产品单独编译该组件,hbset任意选择一款产品,然后使用-T选项单独编译组件:添加组件描述:组件描述位于build/lite/components下,新增的组件需加入对应子系统的json文件中。一个组件描述必选的字段有:component:组件名称。description:组件的一句话功能描述。optional:组件是否为系统可选。dirs:组件源码路径。targets:组件编译入口。hbbuild-f-T//applications/sample/hello_world添加组件到应用子系统以将hello_world组件加入应用子系统为例,在applications.json中添加hello_world对象:{"components":[{"component":"hello_world","description":"Helloworld.","optional":"true","dirs":["applications/sample/hello_world"],"targets":["//applications/sample/hello_world"]},...]}将组件配置到产品产品的配置文件config.json位于vendor/company/product/下,产品配置文件需包含产品名称、OpenHarmony版本号、device厂商、开发板、内核类型、内核版本号,以及配置的子系统和组件。以将hello_world组件加入产品配置文件my_product.json中为例,加入hello_wolrd对象:{"product_name":"hello_world_test","ohos_version":"OpenHarmony1.0","device_company":"hisilicon","board":"hispark_taurus","kernel_type":"liteos_a","kernel_version":"1.0.0","subsystems":[{"subsystem":"applications","components":[{"component":"hello_world","features":[]}]},...]}编译产品

代码根目录输入hbset选择对应产品。执行hbbuild。新增芯片解决方案创建芯片解决方案目录。创建内核适配目录,并编写开发板编译配置config.gni文件:以realtek的“rtl8720“开发板的liteos_a适配为例,device/realtek/rtl8720/liteos_a/config.gni的内容如下:mkdir-pdevice/realtek/rtl8720开发板配置文件示例#Kerneltype,e.g."linux","liteos_a","liteos_m".kernel_type="liteos_a"#Kernelversion.kernel_version="3.0.0"#BoardCPUtype,e.g."cortex-a7","riscv32".board_cpu="real-m300"#Boardarch,e.g."armv7-a","rv32imac".board_arch=""#Toolchainnameusedforsystemcompiling.#E.g.gcc-arm-none-eabi,arm-linux-harmonyeabi-gcc,ohos-clang,riscv32-unknown-elf.#Note:Thedefaulttoolchainis"ohos-clang".It'snotmandatoryifyouusethedefaulttoochain.board_toolchain="gcc-arm-none-eabi"#Thetoolchainpathinstatlled,it'snotmandatoryifyouhaveaddedtoolchianpathtoyour~/.bashrc.board_toolchain_path=rebase_path("//prebuilts/gcc/linux-x86/arm/gcc-arm-none-eabi/bin",root_build_dir)#Compilerprefix.board_toolchain_prefix="gcc-arm-none-eabi-"#Compilertype,"gcc"or"clang".board_toolchain_type="gcc"#Boardrelatedcommoncompileflags.board_cflags=[]board_cxx_flags=[]board_ld_flags=[]编写编译脚本在开发板目录下创建BUILD.gn,target名称应与开发板名称一致。以realtek的rtl8720开发板为例,device/realtek/rtl8720/BUILD.gn内容可以是:group("rtl8720"){#target类型也可以shared_library,static_library,executable#具体内容......}嵌入式软件的编译及调试仿真开发技术LiteOS-M编译系统构建开发工具DevEcoDeviceToolsLiteOS操作系统实验开发工具DevEcoDeviceTools项目管理配置裁剪源码编辑目标代码编译生成交叉调试测试工具版本管理工具工具简介HUAWEIDevEcoDeviceTool(以下简称DevEcoDeviceTool)是OpenHarmony面向智能设备开发者提供的一站式集成开发环境,支持OpenHarmony的组件按需定制,支持代码编辑、编译、烧录和调试等功能,支持C/C++语言,以插件的形式部署在VisualStudioCode上。DevEcoDeviceTool采用Windows+Ubuntu混合开发环境,在Windows上主要进行代码开发、代码调试、镜像烧录等操作,在Ubuntu环境实现源码编译。其具有以下特点:DevEcoDeviceTool特点支持代码查找、代码高亮、代码自动补齐、代码输入提示、代码检查等,开发者可以轻松、高效编码。支持丰富的芯片和开发板,包括基于华为海思芯片的Hi3516DV300/Hi3861V100/Hi3751V350/BearPi-HMNano开发板,以及三方厂商的Neptune/RK3568/Bearpi-HMMicro开发板。支持自动检测各芯片/开发板依赖的工具链是否完备,并提供一键下载和安装缺失工具链。支持多人共享开发模式,采用基于Remote-SSH模式实现多人共享远程开发,实现一个团队公用一台服务器进行编译、烧录。支持源码级调试能力,提供查看内存、变量、调用栈、寄存器、反汇编等调试信息。功能区域DevEcoDeviceTool工具主要分为如下4个功能区域。基本功能区:DevEcoDeviceTool菜单栏,提供基本的工程创建、源码导入、工程配置等功能。开发板任务区:提供开发板相关操作任务,如源码的编译、镜像的烧录、Monitor串口工具等。代码编辑器:提供代码的查看、编写和调试等开发功能。输出控制区:提供日志打印、调试指令输入、命令行指令输入等。功能区域搭建开发环境可以搭建一套Windows+Ubuntu混合开发的环境,其中使用Windows平台的DevEcoDeviceTool可视化界面进行相关操作,通过远程连接的方式对接Ubuntu下的DevEcoDeviceTool(可以不安装VisualStudioCode),然后对Ubuntu下的源码进行开发、编译、烧录等操作。Ubuntu下负责源码的交叉编译,Windows负责源码的烧录。Windows系统上需要安装远程登录插件,而Ubuntu下则打开远程控制服务。也可以直接在windows中下载DevEcoDeviceTool和项目源码sdk,实现windows下编译、下载和运行的过程。工程管理通过DevEcoDeviceTool创建OpenHarmony工程,并自动下载相应版本的OpenHarmony源码,源码类型包括OpenHarmonyStableVersion、OpenHarmonySample和HarmonyOSConnectSolution。OpenHarmonyStableVersion:OpenHarmony稳定版本源码,通过镜像站点获取,支持OpenHarmony-v1.1.4-LTS、OpenHarmony-v3.0.3-LTS和OpenHarmony-v3.1-Release版本。OpenHarmonySample:针对不同SOC和开发板进行适配后的OpenHarmony发行版示例源码,HarmonyOS

ConnectSolution:根据华为智能硬件合作伙伴网站中定义的鸿蒙智联解决方案的配置信息,创建鸿蒙智联解决方案工程。创建新工程并获取镜像站点源码在新工程的配置向导页,配置工程相关信息,包括:OpenHarmonySourceCode:选择需要下载的OpenHarmony源码,请选择OpenHarmonyStableVersion下的源码版本,支持OpenHarmony-v1.1.4-LTS、OpenHarmony-v3.0.3-LTS和OpenHarmony-v3.1-Release版本。ProjectName:设置工程名称。ProjectPath:选择工程文件存储路径。SOC:选择支持的芯片。Board:选择支持的开发板。Product:选择产品。源码获取界面HDF驱动管理HDF驱动框架,为驱动开发者提供驱动框架能力,包括驱动加载、驱动服务管理和驱动消息机制。旨在构建统一的驱动架构系统,为驱动开发者提供更精准、更高效的开发环境,力求做到一次开发,多系统部署。HDF驱动框架模型如下图所示,HDF框架以组件化的驱动模型作为核心设计思路,为开发者提供更精细化的驱动管理,让驱动开发和部署更加规范。HDF框架将一类设备驱动放在同一个host里面,开发者也可以将驱动功能分层独立开发和部署,支持一个驱动多个node。驱动开发开发者可以通过DevEcoDeviceTool的HDF功能管理和添加设备的驱动,添加驱动时,工具会自动生成相应的驱动目录结构、初始化驱动模板、代码及头文件等信息。操作步骤在工具控制区QUICKACCESS>DevEcoHome中点击HDF进入驱动添加页面。添加驱动模块在驱动添加页面,点击ProjectList,选择要添加驱动的产品,然后点击DriverModule旁边的+按钮,弹出AddDriverModule对话框。在AddDriverModule对话框中,填写Module名称,选择Board,然后点击Add按钮。添加驱动模块结果添加后,可以在DriverModule下看到已添加的模块。进行驱动开发点击模块Files下的文件图标,可以打开文件,进行驱动开发编译Hi3861V100开发板源码

DevEcoDeviceTool支持Hi3861V100开发板的源码一键编译功能,提供编译工具链和编译环境依赖的检测及一键安装,简化复杂编译环境的同时,提升了编译的效率。Hi3861V100编译环境为Ubuntu环境。在菜单栏中点击ProjectSettings按钮,进入Hi3861工程配置界面。安装工具链在toolchain页签中,DevEcoDeviceTool会自动检测依赖的编译工具链是否完备,如果提示部分工具缺失,可点击Install按钮,自动安装所需工具链。设置编译类型在“hi3861”配置页签中,设置源码的编译类型build_type,默认为"debug"类型,请根据需要进行修改。然后点击Save按钮进行保存。开始编译在DevEcoDeviceTool界面的“PROJECTTASKS”中,点击对应开发板下的Build按钮,执行编译。使用仿真器运行在设备开发过程中,由于缺少物理开发板,开发者时常面临无法验证编译生成的镜像文件是否正常运行等问题。对此,DevEcoDeviceTool基于Qemu,提供开发板的模拟仿真能力,使源码编译后的镜像文件能直接运行在仿真器上。由于需要对源码进行编译,编译环境需要为Linux系统,因此使用仿真器只能在Windows+Ubuntu混合开发环境下运行。创建工程

OpenHarmonyCode:仿真只支持OpenHarmonyV3.1Release源码,请选择OpenHarmonyStableVersion下的V3.1Release版本。ProjectName:设置工程名称。ProjectPath:选择工程文件存储路径。SOC:qemu。Board:arm-virt。配置工具链在DevEcoDeviceTool的QuickAccess

>

Menu

>

Tools中,点击Addusercomponent,分别配置gn、ninja、llvm、hc_gen和arm_noneeabi_gcc工具链。编译运行

打开DevEcoDeviceTool界面,在QUICKACCESS下点击ProjectSettings,检查工具链是否完备配置调试信息打开OpenHarmony源码目录下的vendor/ohemu/{productName}/kernel_configs/debug.config文件,添加如下

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论