嵌入式系统开发 -基于分布式系统OpenHarmony 课件全套 朱明 01-OpenHarmony的系统构成-09-小型系统应用开发_第1页
嵌入式系统开发 -基于分布式系统OpenHarmony 课件全套 朱明 01-OpenHarmony的系统构成-09-小型系统应用开发_第2页
嵌入式系统开发 -基于分布式系统OpenHarmony 课件全套 朱明 01-OpenHarmony的系统构成-09-小型系统应用开发_第3页
嵌入式系统开发 -基于分布式系统OpenHarmony 课件全套 朱明 01-OpenHarmony的系统构成-09-小型系统应用开发_第4页
嵌入式系统开发 -基于分布式系统OpenHarmony 课件全套 朱明 01-OpenHarmony的系统构成-09-小型系统应用开发_第5页
已阅读5页,还剩692页未读 继续免费阅读

下载本文档

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

文档简介

基于OpenHarmony的嵌入式开发

第一章OpenHarmony的系统构成安全边距1.1OpenHarmony系统特点[1.1.1]什么是OpenHarmony系统

由开放原子开源基金会孵化及运营的一个开源项目,目标是面向全场景、全连接、全智能时代,基于开源的方式搭建智能终端设备操作系统的框架和平台,促进万物互联产业的繁荣发展。基于OpenHarmony的嵌入式开发2开放原子开源基金会是致力于推动全球开源事业发展的非营利机构,于2020年6月在北京成立,由阿里巴巴、百度、华为、浪潮、360、腾讯、招商银行等多家龙头科技企业联合发起。2020年9月,开放原子开源基金会接受了华为公司捐赠的智能终端操作系统基础能力的相关代码,随后进行了开源,命名为OpenAtomOpenHarmony(一般简称为OpenHarmony)。随后,基金会成立了OpenHarmony项目群工作委员会,签署了OpenHarmony项目群管理制度。1.1OpenHarmony系统特点[1.1.1]

OpenHarmony与HarmonyOS

OpenHarmony是以华为捐赠的智能终端操作系统为基础的,目前其中也融合了其他参与者的贡献,是开源项目。适用于嵌入式和物联网等智能设备。

HarmonyOS包含了OpenHarmony所不具备的诸多商用功能,如多端设备协同认证等,而ASOP的实现也使得HarmonyOS手机和平板等设备能够运行Android应用程序,是商用系统。适用于手机、平板电脑和智能汽车等移动终端。基于OpenHarmony的嵌入式开发3鸿蒙软件体系HarmonyOSOpenHarmonyASOP……OpenHarmony第三方库其他HarmonyOS=OpenHarmony+ASOP+…安全边距1.1OpenHarmony系统特点[1.1.2]OpenHarmony的技术特点

可装卸性、实时性、稳定性-嵌入式操作系统必备的特性特性1/3:统一系统,弹性部署满足不同类型设备的需求:血压计、体重计、游戏机、音视频播放机、打印机和扫地机器人等,不同设备使用同一语言无缝沟通。满足不同性能设备的需求:不同类型的处理器、不同级别的存储能力、不同功能的外部设备和器件。基于OpenHarmony的嵌入式开发4智能穿戴设备大小家电设备机器人设备健康医疗设备安全边距1.1OpenHarmony系统特点[1.1.2]OpenHarmony的技术特点特性2/3:一次开发,多端部署

OpenHarmony则基于分布式技术,在不同的硬件设备之间随意调用、互助共享,写一次逻辑代码,就可以部署在多种终端上。基于OpenHarmony的嵌入式开发5解决多种终端设备开发过程中,不同设备间的屏幕尺寸、色彩风格等方面的适配问题安全边距1.1OpenHarmony系统特点[1.1.2]OpenHarmony的技术特点特性3/3:硬件互助,资源共享

-(1/4)分布式软总线基于OpenHarmony的嵌入式开发6传统意义的总线:一种内部结构,它是CPU、内存、输入、输出设备传递信息的公用通道,主机的各个部件通过总线相连接,外部设备通过相应的接口电路再与总线相连接,从而形成了计算机硬件系统。分布式软总线:为设备间的无缝互联提供了统一的分布式通信能力,能够快速发现并连接设备,高效地传输任务和数据。由WLAN服务能力、蓝牙服务能力、软总线和进程间通信RPC共同组成,提供相关的功能。安全边距1.1OpenHarmony系统特点[1.1.2]OpenHarmony的技术特点特性3/3:硬件互助,资源共享

-(1/4)分布式软总线基于OpenHarmony的嵌入式开发7WLAN服务为用户提供WLAN基础功能、P2P(Peer-to-Peer)功能和WLAN消息通知的相应服务,应用可以通过WLAN和其他设备互联互通。蓝牙服务为应用提供传统蓝牙以及低功耗蓝牙相关功能和服务。软总线为应用和系统提供近场设备间分布式通信的能力,提供不区分通信方式的设备发现、连接、组网和传输功能。进程间通信RPC(RemoteProcedureCall)提供了不区分设备内或设备间的进程间通信能力。安全边距1.1OpenHarmony系统特点[1.1.2]OpenHarmony的技术特点特性3/3:硬件互助,资源共享

-(2/4)分布式数据管理基于OpenHarmony的嵌入式开发8分布式数据管理实现了应用程序数据和用户数据在多终端设备上的分布式管理功能。用户的数据不再与单一物理设备绑定,业务逻辑与数据存储分离,应用跨设备运行时能够实现数据的无缝衔接。持久化存储引擎支持数据跨设备相互同步安全边距1.1OpenHarmony系统特点[1.1.2]OpenHarmony的技术特点特性3/3:硬件互助,资源共享

-(3/4)分布式任务调度基于OpenHarmony的嵌入式开发9智慧屏设备智能穿戴设备分布式任务调度基于分布式软总线、分布式数据管理的分布式Profile等技术特性,构建统一的发现、同步、注册和调用的分布式服务管理机制,支持对跨设备的应用进行远程启动、远程调用、绑定和解绑、以及迁移等操作。

安全边距①智慧屏上在喜欢的节目菜单中,点击“开播后提醒我”按钮;②在节目开播时,智慧屏会拉起运动手表上的节目开播提醒FA;③通过运动手表上的该FA,用户可以快速获知喜欢的节目已经开始;④实现上述协同互助的作用。1.1OpenHarmony系统特点[1.1.2]OpenHarmony的技术特点特性3/3:硬件互助,资源共享

-(4/4)设备虚拟化功能基于OpenHarmony的嵌入式开发10安全边距将多台设备的各种硬件资源,如屏幕、相机、扩音器、键盘、传感器及存储器等予以抽象,形成“超级虚拟终端”内的统一硬件资源池,并支持硬件资源的按需分配和重新组合,真正实现了硬件资源的全局调用。硬件资源池化框架将各类设备的硬件资源进行抽象,为北向应用提供各种分布式服务,比如分布式相机、分布式屏幕、分布式音频和分布式输入等,同时提供统一的设备管理和分布式硬件框架,对硬件资源进行管理。1.1OpenHarmony系统特点[1.1.3]OpenHarmony的设备分类嵌入式系统分类方法之一:按照硬件平台的性能进行分类基于OpenHarmony的嵌入式开发11安全边距Mini

System/轻量系统L0类型:LiteOS-M内核CPU:Cortex-M/RISC-V32MEM:128KB~1MB功能:轻量级网络协议、轻量级的图形框架、IoT总线读写部件等;场景:智能家居领域的连接类模组、传感器设备和穿戴类设备等;硬件:Hi3861、TLSR9x、GR5515、BES2600、RK2206和ESP32等。Small

System/小型系统L1类型:LiteOS-A内核CPU:Cortex-AMEM:1MB~128MB功能:较高的安全能力、标准的图形框架、视频编解码的多媒体能力等;场景:智能摄像机、电子猫眼、路由器以及智慧出行领域的行车记录仪等;硬件:Hi3516DV300和STM32MP157A等。StandardSystem/标准系统L2类型:Linux内核CPU:Cortex-AMEM:128MB~功能:增强的交互能力、3DGPU、丰富的图形能力、完整的应用框架等;场景:高端的冰箱控制系统、汽车娱乐系统、智能家居控制系统等;硬件:RK3568、RK3399、RK3566、Hi3751V351、i.MX8M和T507等。不同类型系统的硬件不同,和内核软件功能存在差异,课程将分别介绍1.1OpenHarmony系统特点[1.1.4]OpenHarmony的技术架构系统的设计原则:按照功能进行分层设计基于OpenHarmony的嵌入式开发12安全边距1.2内核层[1.2.1]轻量系统的内核子系统内核类型:

LiteOS-M特性:MCU

AIoT领域设备

MPU、<1MB基于OpenHarmony的嵌入式开发13安全边距硬件相关层,提供HAL接口(HardwareAbstractionLayer)硬件无关层,提供KAL接口(KernelAbstractionLayer)基础内核模块提供基础能力,可选组建提供网络个文件系统等组件能力,以及调测工具。1.2内核层[1.2.2]小型系统的内核子系统内核类型:

LiteOS-A特性:CPU

AIoT领域设备

MMU、<128MB基于OpenHarmony的嵌入式开发14安全边距基础内核包括内核的基础机制,如调度和内存管理等;扩展组件包括文件系统、网络协议和安全等扩展功能;HDF框架是外设驱动的统一标准框架;兼容POSIX标准的应用可以方便移植到OpenHarmony。1.2内核层[1.2.2]小型系统的内核子系统基于OpenHarmony的嵌入式开发15安全边距①内核机制功能丰富:支持虚拟内存、系统调用、多核、轻量级IPC(Inter-ProcessCommunication,进程间通信)、DAC(DiscretionaryAccessControl,自主访问控制)等机制,支持多进程,应用之间内存隔离、相互不影响,提升系统的健壮性;②引入统一驱动框架HDF(HardwareDriverFoundation):统一驱动标准,提供了统一的接入方式,驱动更加容易移植,力求做到一次开发,多系统部署;③支持1200+标准POSIX接口:更全面的支持POSIX标准接口,使得应用软件易于开发和移植,为应用开发者提供友好的开发体验;④内核和硬件高解耦:内核与硬件高度解耦,新增单板,内核代码不用修改。1.2内核层基于OpenHarmony的嵌入式开发16安全边距[1.2.3]标准系统的内核内核类型:Linux特性:CPU、高性能应用、MMU、>128MBLinux内核版本分为稳定版本以及长期支持LTS版本。

稳定版本大约每三个月发布一个新版本,包含最新硬件支持、性能改进以及bug修复等;长期支持版本LTS对该版本内核的长期维护,一般维护周期达6年。OpenHarmony中的Linux内核从LTS版本中选择合适的版本作为内核的基础版本。完成对Linux-4.19及Linux-5.10的适配及支持(~2023年5月)。1.3驱动程序层基于OpenHarmony的嵌入式开发17安全边距[1.3]驱动程序框架HDF(HardwareDriverFoundation)HDI硬件设备统一接口:为系统提供统一、稳定的硬件设备操作接口。HDF驱动框架:提供统一的硬件资源管理等模块。统一的配置界面:硬件资源的抽象描述,屏蔽硬件差异,提升开发迁移效率。操作系统抽象层OSAL:提供统一封装的操作相关接口,屏蔽系统操作差异。平台驱动:为外设驱动提供Board硬件操作统一接口和适配接口抽象。外设驱动模型:提供标准化的器件驱动,提供驱动模型抽象。1.3驱动程序层基于OpenHarmony的嵌入式开发18安全边距[1.3]驱动程序框架HDF(HardwareDriverFoundation)(1)弹性化的框架能力:在传统的驱动框架能力的基础上,OpenHarmony驱动子系统通过构建弹性化的框架能力,可支持在百KB级别到百兆级容量的终端产品形态部署;(2)规范化的驱动接口:定义了常见驱动接口,为驱动开发者和使用者提供丰富、稳定接口,并和未来开放的面向手机、平板、智慧屏等设备驱动接口保持API兼容性;(3)组件化的驱动模型:支持组件化的驱动模型,为开发者提供更精细化的驱动管理,开发者可以对驱动进行组件化拆分,使得驱动开发者可以更多关注驱动与硬件交互部分。同时系统也预置了部分模板化的驱动模型组件,如网络设备模型等;(4)归一化的配置界面:提供统一的配置界面,构建跨平台的配置转换和生成工具,实现跨平台的无缝切换。1.4系统服务层基于OpenHarmony的嵌入式开发19安全边距[1.4]系统服务层(1)系统基本能力子系统集:为分布式应用在多设备上的运行、调度、迁移等操作提供了基础能力,由分布式软总线、分布式数据管理、分布式任务调度、公共基础库、多模输入、图形、安全和AI等子系统组成。(2)基础软件服务子系统集:提供公共的、通用的软件服务,由事件通知、电话、多媒体和DFX(DesignForX)等子系统组成。(3)增强软件服务子系统集:提供针对不同设备的、差异化的能力增强型软件服务,由智慧屏专有业务、穿戴专有业务和IoT专有业务等子系统组成。(4)硬件服务子系统集:提供硬件服务,由位置服务、用户IAM、穿戴专有硬件服务和IoT专有硬件服务等子系统组成。1.5框架层基于OpenHarmony的嵌入式开发20安全边距[1.5]框架层

为应用开发提供C/C++/JS等多语言的用户程序框架和Ability框架、适用于JS语言的ArkUI框架,以及各种软硬件服务对外开放的多语言框架API。(1)Ability框架实现了对Ability运行及生命周期的统一调度和管理,使应用进程能够支撑多个Ability,Ability具有跨应用进程间和同一进程内调用的能力。Ability是系统调度应用的最小单元,是能够完成一个独立功能的组件,一个应用可以包含一个或多个Ability;(2)JSArkUI框架采用类HTML和CSSWeb编程语言作为页面布局和页面样式的开发语言,页面业务逻辑则支持ECMAScript规范的JavaScript语言。框架提供的类Web编程范式,可以让开发者避免编写UI状态切换的代码,视图配置信息更加直观。1.6OpenHarmony

Shell基于OpenHarmony的嵌入式开发21安全边距[1.6.1]

OpenHarmonyShell的基本功能和特点

Shell的基本功能:

DOS

Shell:DOS

中带有基本图形用户界面(GUI)的文件管理程序;

PowerShell:PowerShell是Windows系统中的新式命令Shell,包括了其他常用Shell功能,PowerShell还能接受并返回.NET对象;

Linux

Shell:用户与Linux的交互桥梁。Shell既是命令语言,又是程序设计语言。Shell是一种应用程序,指这个应用程序提供了用户访问操作系统内核的服务;程序设计语言指可以构建脚本执行编程功能。

Shell是系统的用户界面,提供用户与内核进行交互操作的接口,接收用户输入的命令并将其送入内核执行,实现操作系统的文件管理、进程管理和内存管理等服务,并输出内核信息。常规意义上,Shell是基于纯文本(命令行模式)进行交互的。1.6OpenHarmony

Shell基于OpenHarmony的嵌入式开发22安全边距[1.6.1]

OpenHarmonyShell的基本功能和特点

OpenHarmony

Shell的特点:

支持使用exec命令来运行可执行文件;

默认为英文输入,输入的中文字符需要通过回退三次才能删除;

支持Shell命令、文件名及目录名的Tab键联想补全;

Shell端工作目录与系统工作目录是分开的,即通过Shell端cd和pwd等命令是对Shell端工作目录进行操作,通过chdir和getcwd等命令是对系统工作目录进行操作,两个工作目录相互之间没有联系;

在使用网络Shell指令前,需要先调用tcpip_init函数并完成telnet连接;

Shell功能不符合POSIX标准,仅供调试使用;

不建议使用Shell命令对/dev目录下的设备文件进行操作。1.6OpenHarmony

Shell基于OpenHarmony的嵌入式开发23安全边距[1.6.2]

OpenHarmonyShell命令类别1:系统命令

cpup、date、dmesg、exec、free、help、hwi、kill、log、memcheck、reset、sem、stack、su、swtmr、systeminfo、task、uname、watch、reboot、top、……类别2:文件命令

cat、cd、chgrp、chmod、chown、cp、format、ls、lsfd、mkdir、mount、pwd、rm、statfs、sync、touch、writeproc、umount、du、mv、……类别3:网络命令

arp、dhclient、ifconfig、netstat、ntpdate、ping、ping6、telnet、tftp、……与LinuxShell命令大部分名字相同,但OpenHarmony有裁剪和调整,参阅教材等资料

1.7系统编译与构建基于OpenHarmony的嵌入式开发24安全边距[1.7.1]

OpenHarmony开发环境配置方式1:安装包方式通过命令行模式下载、安装和编译,通过IDE烧录,有Docker环境。方式2:IDE方式通过IDE进行开发工具的安装及系统的编译、烧录和运行控制等操作。

IDE:DevEcoDeviceTool

支持代码查找、代码高亮、代码自动补齐、代码输入提示、代码检查等;

支持丰富的芯片和开发板,包括Hi3861V100和BearPi-HMNano等;

自动检测各芯片/开发板依赖的工具链是否完备,一键下载和自动安装;

支持多人共享开发模式,多人共享远程开发,单台服务器的编译烧录;

源码级调试,支持查看内存、变量、调用栈、寄存器和反汇编等功能。1.7系统编译与构建基于OpenHarmony的嵌入式开发25安全边距[1.7.1]

OpenHarmony开发环境配置

IDE方式:(1/4)DevEcoDeviceTool安装提供编辑、开发和调试的图形环境Windows1064,与Ubuntu系统上的IDE的版本号必须相同。①下载并解压缩DevEcoDeviceTool软件包;②卸载早期安装的其他版本的软件;③选择自动安装VSCode软件();④下载安装相关Python和其他插件。提供OpenHarmony系统的编译环境Ubuntu18.04~21.10,推荐20.04,建议内存不小于16GB,用户名不能包含中文字符,与Windows系统上IDE版本号相同。①设置Ubuntu的默认Shell为bash;②下载DevEcoDeviceTool的Linux版本安装包并安装;③安装过程中可能需要更新系统的Python版本。DevEco

Device

Tool支持C/C++语言,以插件的形式部署在Windows和Ubunut的VisualStudioCode(简称VSCode)上。1.7系统编译与构建基于OpenHarmony的嵌入式开发26安全边距[1.7.1]

OpenHarmony开发环境配置

IDE方式:(2/4)远程访问Ubuntu系统Ubuntu端:主要的系统编译环境,被Windows连接控制①安装并启动SSH服务(openssh-server);②查看Ubuntu系统的IP地址(ifconfig)。Windows端:连接Ubuntu端、控制编译过程①启动VSCode,点击插件(Extensions)按钮;②在插件市场搜索并安装Remote-SSH;③在RemoteExplorer中增加配置。输入Ubuntu的IP地址和用户名,其他使用默认项即可;④首次连接需要等待VSCode在Ubuntu系统的.vscode-server文件夹下自动安装插件;

⑤使用时,点击对应地址输入密码即可连接;⑥还可以在VSCode中使用SSH公钥替代密码。202304起,Hi3861开发仅需Windows环境1.7系统编译与构建基于OpenHarmony的嵌入式开发27安全边距[1.7.1]

OpenHarmony开发环境配置

IDE方式:(3/4)获取OpenHarmony源码

从码云Gitee网站获取OpenHarmony系统的源码,相关准备工作包括注册Gitee账号、注册Gitee的SSH公钥、安装git客户端和git-lfs、配置用户信息和安装Gitee的repo工具等;本书使用的版本为OpenHarmony3.1.1Release;

还可以DevEcoMarketplace、华为云等或者GitHub镜像仓库获取。

IDE方式:(4/4)安装编译工具

OpenHarmony的编译工具主要是命令行工具hb;

hb的主要安装步骤包括安装、设置并更新环境变量和测试过程。获取源码和安装编译工具的详细步骤请参阅教材完成。1.7系统编译与构建基于OpenHarmony的嵌入式开发28安全边距[1.7.1]

OpenHarmony开发环境配置

OpenHarmony源码存储结构存储位置内容功能applications应用程序样例,包括camera等base基础软件服务子系统集&硬件服务子系统集build组件化编译、构建和配置脚本docs说明文档domains增强软件服务子系统集drivers驱动子系统foundation系统基础能力子系统集存储位置内容功能kernel内核子系统prebuilts编译器及工具链子系统test测试子系统third_party开源第三方组件utils常用的工具集vendor厂商提供的软件build.py编译脚本文件1.7系统编译与构建基于OpenHarmony的嵌入式开发29安全边距[1.7.2]系统编译构建过程

OpenHarmony编译构建系统编译子系统的构建:主要是基于GN和Ninja搭建;

Ninja是一个注重速度的小型编译系统,其输入文件是由高级别的编译系统生成而来的,使编译尽可能快速完成。Ninja的默认文件名是build.ninja,其它文件也以.ninja为后缀,编译时使用ninja命令。

GN(GenerateNinja)是一种元构建系统,是ninja的前端,用于生成Ninja构建文件,目前支持Chromium,Fuchsia和OpenHarmony系统。支持功能:①以部件为最小粒度拼装产品和独立编译;②支持轻量、小型、标准三种系统构建,支持SDK开发套件的构建;③支持芯片解决方案厂商的灵活定制和独立编译。

OpenHarmony3.1仍有部分组件需make构建,因此还需要Python、CMake、Makefile和Menuconfig,以及Bash等软件和工具支撑。1.7系统编译与构建基于OpenHarmony的嵌入式开发30安全边距[1.7.2]系统编译构建过程

OpenHarmony系统的包含关系产品A产品B子系统1部件(1)部件(2)子系统2部件(3)部件(7)子系统3部件(4)部件(5)部件(6)模块①模块②模块③模块④模块⑤模块⑥模块⑦模块⑧模块⑨①平台:开发板和内核的组合,不同的平台支持的子系统和部件不同;②产品:产品是包含一系列部件的集合,编译后产品的镜像包可以运行在不同的开发板上;③子系统:系统功能按照“系统>子系统>部件”逐级展开,子系统是一个逻辑概念,具体由对应的部件构成;④部件:对子系统的进一步拆分,包括可复用的软件单元。能独立构建,以二进制方式集成,具备独立验证能力的二进制单元。⑤模块:模块就是编译子系统的一个编译目标,部件也可以是编译目标。1.7系统编译与构建基于OpenHarmony的嵌入式开发31安全边距[1.7.2]系统编译构建过程

OpenHarmony系统的包含关系产品B子系统1部件(1)部件(2)子系统3部件(4)部件(5)部件(6)模块①模块②模块③模块④模块⑤模块⑥模块⑦模块⑧模块⑨子系统是某个路径下所有部件的集合,一个部件只能属于一个子系统。部件是模块的集合,一个模块只能归属于一个部件。模块就是编译子系统的一个编译目标,部件也可以是编译目标。产品A子系统2部件(3)部件(6)部件可以在不同的产品中实现有差异,通过变体或者特性feature实现。特性,部件用于体现不同产品之间的差异。编译构建能编译什么?不能编译什么?1.7系统编译与构建基于OpenHarmony的嵌入式开发32安全边距[1.7.2]系统编译构建过程

OpenHarmony的编译构建流程否是开始选择产品类型是开发板目录编译芯片解决方案选择编译类型编译产品编译部件编译模块结束hb

set用于设置要编译的产品hb

build①读取编译配置:根据产品选择的开发板,读取开发板config.gni文件内容;②调用GN:调用gngen,读取产品配置生成产品解决方案out目录和Ninja文件;③调用Ninja:调用ninja-Cout/board/product编译;④系统镜像打包:将部件编译产物打包,设置文件属性和权限,制作文件系统镜像。1.7系统编译与构建基于OpenHarmony的嵌入式开发33安全边距[1.7.2]系统编译构建过程

OpenHarmony的编译配置规则:(1/7)产品配置规则

OpenHarmony的源码存储结构产品编译脚本产品配置文件文件系统打包的配置产品解决方案的OS适配HDF层的适配配置/驱动init进程启动配置系统服务启动配置产品解决方案厂商:华为海思产品名称1.7系统编译与构建基于OpenHarmony的嵌入式开发34安全边距[1.7.2]系统编译构建过程

OpenHarmony的编译配置规则:(1/7)产品配置规则①vendor/company/product/init_configs/etc/Linux系统必备。包含rcS脚本,Sxxx脚本和fstab脚本。Sxxx脚本中的内容与开发板和产品需要有关,主要包括设备节点的创建、创建目录、扫描设备节点、修改文件权限等。相关文件在产品编译的BUILD.gn中按需拷贝到产品out目录中,最终打包到rootfs镜像中。②vendor/company/product/init_configs/hals/解决方案厂商对OS的适配,需要实现的接口需要查阅各个部件的readme说明文档。③vendor/company/product/init_configs/init.cfginit进程启动服务的配置文件,仅支持start(启动某个服务)、mkdir(创建文件夹)、chmod(修改指定路径/文件的权限)、chown(修改指定路径/文件的属组)和mount(挂载命令)。1.7系统编译与构建基于OpenHarmony的嵌入式开发35安全边距[1.7.2]系统编译构建过程

OpenHarmony的编译配置规则:(1/7)产品配置规则

④vendor/company/product/config.json:编译构建的主入口产品名称config.json的版本号,固定"3.0”系统类型,mini/small/standardOH系统版本芯片厂商开发板名称内核类型内核版本号子系统子系统部件1.7系统编译与构建基于OpenHarmony的嵌入式开发36安全边距[1.7.2]系统编译构建过程

OpenHarmony的编译配置规则:(1/7)产品配置规则⑤vendor/company/product/fs.yml用于配置文件系统镜像制作过程。将编译产物打包成文件系统镜像,比如用户态根文件系统rootfs.img和可读写的userfs.img文件。fs.yml文件是一个可选文件,无文件系统的设备可以不配置该文件。文件由多个列表组成,每个列表对应一个文件系统。1.7系统编译与构建基于OpenHarmony的嵌入式开发37安全边距[1.7.2]系统编译构建过程

OpenHarmony的编译配置规则:(1/7)产品配置规则⑥vendor/company/product/BUILD.gn产品编译的入口,用于编译解决方案厂商源码和拷贝启动配置文件。编译目标产品的目录下的BUILD.gn会被使用。与产品名称保持一致复制init配置其他■新增产品并编译的主要步骤①创建产品目录,按照产品配置规则创建产品目录;②拼装产品,在产品文件夹下创建并编辑config.json文件;③适配OS接口,在产品目录下创建hals目录,放入解决方案对OS适配的源码和编译脚本;④配置系统服务,在产品目录下创建init_configs目录,在其中创建并编辑init.cfg文件;⑤Linux内核,还需在init_configs目录下创建etc目录、创建并编辑rcS文件、Sxxx等;⑥配置文件系统镜像,在产品目录下创建fs.yml文件并设定文件系统规则;⑦按需配置产品Patch,在产品目录下创建patch.yml文件;⑧编写编译脚本,在产品目录下创建BUILD.gn文件并按需设定内容;⑨编译产品,主要主要有命令行和hb两种方式方式1.7系统编译与构建基于OpenHarmony的嵌入式开发38安全边距[1.7.2]系统编译构建过程

OpenHarmony的编译配置规则:(2/7)子系统配置规则子系统的配置规则主要是在build/subsystem_config.json文件中指定的子系统的路径和子系统名称路径子系统名1.7系统编译与构建基于OpenHarmony的嵌入式开发39安全边距[1.7.2]系统编译构建过程

OpenHarmony的编译配置规则:(3/7)部件配置规则部件的bundle.json放在部件源码的根目录下。以泛sensor子系统的sensor服务部件为例,部件属性定义描述文件字段说明如图所示。部件配置中需要配置部件的名称、源码路径、功能简介、是否必选、编译目标、RAM、ROM、编译输出、已适配的内核、可配置的特性和依赖等属性定义。新增部件时必须在对应子系统json文件中添加部件定义,产品所配置的部件必须在某个子系统中被定义过。①添加部件;②拼装产品将部件添加到产品配置中;③编译,命令行方式活着hb方式;④编译输出。1.7系统编译与构建基于OpenHarmony的嵌入式开发40安全边距[1.7.2]系统编译构建过程

OpenHarmony的编译配置规则:(4/7)模块配置规则编译子系统通过模块、部件和产品三层配置实现目标系统思维编译和打包。模块是编译子系统的一个目标,包括动态库、静态库、配置文件和预编译模块等,模块必须要确定属于特定的部件,一个模块只能归属于一个部件。OpenHarmony使用定制化的Gn模板来配置模块规则。产品A子系统2部件(3)部件(7)模块⑩模块⑪■常用的四类模块配置规则①C/C++模板,包括ohos_shared_library、ohos_static_library、ohos_executable和ohos_source_set,代码在源码仓/build/templates/cxx/cxx.gni文件中;②预编译模板,包括ohos_prebuilt_executable、ohos_prebuilt_shared_library和ohos_prebuilt_static_library,代码在prebuilt.gni文件中;③Hap模板,包括ohos_hap、ohos_app_scope、ohos_js_assets和ohos_resources;④其他常用模板,包括配置文件模板ohos_prebuild_etc和sa配置模板ohos_sa_profile等。1.7系统编译与构建基于OpenHarmony的嵌入式开发41安全边距[1.7.2]系统编译构建过程

OpenHarmony的编译配置规则:(4/7)模块配置规则否是开始新建子系统并添加json文件添加部件bundle.json有芯片解决方案有子系统有部件新建模块BUILD.gn结束添加芯片解决方案修改产品配置是否修改产品配置否是新建并编译模块:编译子系统通过模块、部件和产品三层配置实现目标系统思维编译和打包。1.7系统编译与构建基于OpenHarmony的嵌入式开发42安全边距[1.7.2]系统编译构建过程

OpenHarmony的编译配置规则:(5/7)芯片解决方案配置规则芯片解决方案是指基于某款开发板的完整解决方案,包含驱动、设备侧接口适配、开发板sdk等。kernel_type:开发板使用的内核类型;kernel_version:开发使用的内核版本;board_cpu:开发板CPU类型;board_arch:开发芯片arch;board_toolchain:开发板编译工具链名称;board_toolchain_prefix:编译工具链前缀;board_toolchain_type:编译工具链类型;board_cflags:开发板的c文件编译选项;board_cxx_flags:开发板的cpp文件编译选项;board_ld_flags:开发板配置的链接选项。设备文件路径开发板路径芯片解决方案厂商开发板名称LiteOS-A内核开发板编译的配置1.7系统编译与构建基于OpenHarmony的嵌入式开发43安全边距[1.7.2]系统编译构建过程

OpenHarmony的编译配置规则:(7/7)系统能力配置规则

SysCap(SystemCapability,系统能力)是部件向开发者提供的接口的集合,有部件配置系统能力和产品配置系统能力两类。部件目录下的bundle.json文件component下关键字syscap,对内部配置相应的系统能力。系统能力若无赋值默认为true,若值为true则表示该部件默认开启此系统能力,若值为false则表明该部件默认关闭此系统能力。vender/{company}/{product}/config.json若无配置,则以部件侧的配置为准。产品侧的配置优先级大于部件系统能力默认配置,若部件侧默认配置为false,在产品侧配置为true,则最终配置为true。1.7系统编译与构建基于OpenHarmony的嵌入式开发44安全边距[1.7.3]

系统的编译命令通过编译命令编译产品:(1/2)命令行方式在源码根目录下执行prebuilts脚本,预编译、安装编译器及工具

在代码根目录下执行全量版本的编译命令,Release版本为:

如果要编译Debug版本,则要添加参数,构成命令:编译结果输出镜像保存在如下:

bashbuild/prebuilts_download.sh

./build.sh--product-name{product_name}

./build.sh--product-name{product_name}--gn-argsis_debug=true

out/{device_name}/packages/phone/images/

1.7系统编译与构建基于OpenHarmony的嵌入式开发45安全边距[1.7.3]

系统的编译命令通过编译命令编译产品:(2/2)hb方式

设置要编译的产品使用如下命令:

查看当前设置信息使用如下命令:

编译产品、部件、模块或芯片解决方案使用如下命令:

清除out目录对应产品的编译产物使用如下命令:

hb

set

hb

env

hb

build

hb

clean1.7系统编译与构建基于OpenHarmony的嵌入式开发46安全边距[1.7.4]

Docker编译环境

Docker环境镜像极大程度的简化了配置环境的工作,开发者只需要从HuaweiCloudSWR下载镜像、通过Docker加载镜像即可。轻量系统、小型系统和标准系统的下载链接不同,请查阅官网。

HPM(HarmonyPackageManager,鸿蒙包管理器)系统中提供了docker_dist模板组建帮助开发者快速初始化HPM工程,利用Docker镜像快速编译OpenHarmony系统,很大程度上简化了编译前的环境配置工作。开发者只需要配置好Ubuntu和hpm-cli开发环境即可。该过程可参阅HPM相关文档,不再介绍。1.8课程习题基于OpenHarmony的嵌入式开发47安全边距

1.OpenHarmony作为一款嵌入式操作系统,除了具备常规的可装卸性、实时性强、稳定性好等特点之外,还具备哪些主要的技术特点?相关内容在1.1.2小节

2.OpenHarmony能够以分级的形式,兼容具有不同运算与处理性能的硬件平台,主要包括哪三类?相关内容在1.1.3小节

3.OpenHarmony内核的Shell主要支持哪三类命令,请说出几个具体命令名称。相关内容在1.6.2小节受排版影响,本演示文稿所列代码的规范性可能存在问题,以实际源码为准基于OpenHarmony的嵌入式开发

第二章OpenHarmony的内核基础大连理工大学-朱明安全边距2.1芯片适配类型[2.1]OpenHarmony芯片类型适配问题:OpenHarmony设备分类的依据是什么?哪三种设备分类?三种分类的内核是什么?分别有哪些特性?

LiteOS面向IoT领域构建的轻量级物联网操作系统内核面向智能家居、个人穿戴、车联网、城市公共服务、制造业等领域;

内核轻快易用、实时性好、稳定性高、内核体积小、功耗低等特点;

具备有进程和线程调度、内存管理、IPC机制、Timer管理等功能;

支持ARM64、ARMCortex-A、ARMCortex-M0,Cortex-M3,Cortex-M4和Cortex-M7等芯片架构;

LiteOS也支持UP与SMP模式,在单核或者多核的环境上运行。基于OpenHarmony的嵌入式开发49[2.1]关于HarmonyOS的LitOS内核安全边距2.1芯片适配类型基于OpenHarmony的嵌入式开发50①基础内核:包括不可裁剪的极小内核和可裁剪的其他模块。极小内核包含有任务管理、内存管理、中断管理、异常管理和系统时钟等。可裁剪的模块包括信号量、互斥锁、队列管理、事件管理、软件定时器等。②内核增强:在内核基础功能之上,进一步提供增强功能,包括C++支持和调测组件等。调测组件提供了强大的问题定位及调测能力,包括shell命令、Trace事件跟踪、获取CPU占用率和LMS等。③文件系统:提供一套轻量级的文件系统接口以支持文件系统的基本功能,支持的文件系统类型包括vfs、ramfs、fatfs等。④系统库接口:提供一系列系统库接口,提升操作系统的可移植性及兼容性,包括Libc/Libm/POSIX以及CMSIS适配层等接口。安全边距2.1芯片适配类型基于OpenHarmony的嵌入式开发51[2.1]关于HarmonyOS的LitOS内核⑤网络协议栈:提供丰富的网络协议栈以支持多种网络功能。包括资源受限的Web传输协议(CoAP,ConstrainedApplicationProtocol)、轻量级物联网设备管理协议(LwM2M,LightweightM2M)、消息队列遥测传输协议(MQTT,MessageQueuingTelemetryTransport)、数据报传输层安全协议(DTLS,DatagramTransportLayerSecurity)和轻量级IP协议(LwIP,LightWeightInternetProtocol)等。⑥业务组件:构建于上述组件之上的一系列业务组件或框架,以支持更丰富的用户场景,包括OTA、GUI、AI和传感框架等。⑦IDE(HuaweiLiteOSStudio):基于LiteOS操作系统定制开发的工具,提供了界面化的代码编辑、编译、烧录、调试等功能。安全边距2.2LiteOS-M内核基于OpenHarmony的嵌入式开发52[2.2]面向IoT领域的轻量级物联网操作系统内核①内核特性上接近RTOS,对标FreeFTOS、RT-Thread和uc/OS操作系统,。②目前只能运行在Cortex-M3、Cortex-M33、Cortex-M4、Cortex-M55、Cortex-M7、RISC-V、XtensaLX6和CSKYv2芯片和架构上。③上述处理器都属于MCU,不支持MMU。④内核空间和APP空间不能隔离,APP一旦出错会导致整个系统就会崩溃。硬件相关层提供统一的HAL接口,提升硬件易适配性安全边距2.3LiteOS-A内核基于OpenHarmony的嵌入式开发53[2.3]

构建小体积、低功耗、高性能的统一生态框架更丰富的内核机制,更加全面的POSIX标准接口以及统一驱动框架HDF(OpenHarmonyDriverFoundation)等特性。

①支持MMU,实现内核态和用户态分离,支持虚拟内存等;②支持独立进程,调度对象为进程和线程,更好的兼容软件和开发者体验,新增支持多进程,使得应用之间内存隔离、相互不影响,提升系统的健壮性;③支持文件系统,包括虚拟文件系统和块设备等;④支持复杂的IPC,包括LiteIPC和VDSO(VirtualDynamically-linkedSharedObject)等;安全边距2.3LiteOS-A内核基于OpenHarmony的嵌入式开发54[2.3]

构建小体积、低功耗、高性能的统一生态框架更丰富的内核机制,更加全面的POSIX标准接口以及统一驱动框架HDF(OpenHarmonyDriverFoundation)等特性。

⑤支持多核调度,支持双核微处理器和双核调度;⑥支持POSIX接口,支持超过1200个标准POSIX接口,更加全面的支持POSIX标准接口,使得应用软件易于开发和移植;⑦引入统一驱动框架HDF,为设备厂商提供了更统一的接入方式,使驱动更加容易移植。安全边距2.3LiteOS-A内核基于OpenHarmony的嵌入式开发55[表2.1]

LiteOS-M和LiteOS-A的对比特性LiteOS-MLiteOS-A处理器类型Cortex-M、RISC-V等,单核Cortex-A,多核RAM容量128KB~1MB1MB~128MB任务调度抢占式多任务调度抢占式多进程、多线程调度,支持轮询调度和FIFO调度虚拟内存不支持支持内存加载bestfitbestfit和bestfit_littleIPC通信类型事件、互斥锁、信号量、队列事件、互斥锁、信号量、队列、信号、用户态快速互斥锁、自旋锁、轻量级进程间通信VFS不支持支持Shell不支持支持标准库类型不支持支持安全边距2.4内核抽象层KAL基于OpenHarmony的嵌入式开发56[2.4]

构建小体积、低功耗、高性能的统一生态框架问题:OpenHarmony的技术架构,按照功能进行分层,有哪些层?LiteOS-M所基于的Cortex-M和RISCV等构架的微处理器提供的IPC等接口并不相同,为了屏蔽硬件差异,实现对外统一的IPC等接口。LiteOS-M内核中构建了KAL(内核抽象层),对外提供统一CMSIS和部分的POSIX接口,规范与内核的对接,如CMSIS采用的就是CMSIS-RTOSv2规范来约束的,而部分标准的POSIX接口则是基于musllibc库以及自研接口实现的。LiteOS-M所支持的硬件设备较为简单,集中于UART、I2C和GPIO等功能简单的功能模块,其驱动和功能简单,无需复杂的初始化和驱动设定,不需要动态加载卸载驱动。Cortex-M和RISCV等构架的微处理器性能不强,也难以支持上述高级功能的实现。因此,只需要使用KAL屏蔽硬件差异即可。LiteOS-A内核则直接通过musllibc库实现了更为完整的POSIX接口。LiteOS-A为了实现硬件设备驱动程序的动态加载和卸载功能,使用了HDF等功能替代了KAL,在性能强大的处理器的支持下,可以实现更丰富的内核功能。安全边距2.5中断与异常处理机制基于OpenHarmony的嵌入式开发57[2.5.1]中断的基本概念CPU执行主程序低级中断请求响应低级中断请求响应高级中断请求高级中断请求CPU执行低级中断服务程序CPU执行高级中断服务程序返回低级中断请求返回主程序解释:

指在程序运行过程中,出现需要由微处理器中的CPU立即处理的事务时,CPU需要暂停执行当前程序,转而执行新程序,以及在新程序执行完,返回继续执行原有程序的过程。目标:避免CPU把大量时间耗费在等待和查询外设状态的操作上,大大提高系统实时性以及执行效率,且中断是可以有条件嵌套的。场景:通过中断机制,外部设备在不需要CPU介入时,CPU可以执行其它任务;当外设需要CPU处理外设数据或者其他请求时,就会产生中断信号,CPU会根据当前任务情况,响应外设的中断请求。安全边距2.5中断与异常处理机制基于OpenHarmony的嵌入式开发58[2.5.1]中断的基本概念CPU执行主程序低级中断请求响应低级中断请求响应高级中断请求高级中断请求CPU执行低级中断服务程序CPU执行高级中断服务程序返回低级中断请求返回主程序中断的请求和处理过程,主要涉及到的概念包括:①中断号。中断号是中断请求信号特定的标志,CPU根据中断号判断才能够判定出是哪个设备提出的中断请求;②中断请求。中断请求实际上是一类特定的信号,是外设由于特定事件向CPU发送的信号。该信号将请求CPU中断当前任务,需要CPU处理该外设事件,这一过程称为中断请求;③中断优先级。当外设所产生的中断,是可能会发生叠加的,新产生的中断能够打断正在处理的中断事件是一个重要问题。为使系统能够及时响应并合理处理所有的中断事件,系统需要根据中断事件的重要性和紧迫程度,将中断源分为若干个级别,这种中断响应的级别称为是中断优先级。在微处理器内部,中断请求并非直接发送给CPU,而是发送给中断控制器的,由中断控制器对中断请求进行预处理后,再发送给CPU;安全边距2.5中断与异常处理机制基于OpenHarmony的嵌入式开发59[2.5.1]中断的基本概念CPU执行主程序低级中断请求响应低级中断请求响应高级中断请求高级中断请求CPU执行低级中断服务程序CPU执行高级中断服务程序返回低级中断请求返回主程序中断的请求和处理过程,主要涉及到的概念包括:④中断处理程序,又称中断服务程序。当外设发出中断请求后,CPU暂停当前的任务,转而去响应中断请求。这种响应就是通过执行中断处理程序实现的,产生中断的每个外设都必须有唯一对应的中断处理程序;⑤中断触发。中断源向中断控制器发送中断信号,中断控制器对中断进行仲裁,确定优先级,将中断信号发送给CPU。中断源产生中断信号的时候,会将中断触发器的对应位置位,表明该中断源产生了中断。CPU在响应该中断后,会自动或在中断处理程序中将该位复位;⑥中断向量。中断处理程序的入口地址;⑦中断向量表。存储中断向量的内存区域,某个外设的中断向量与其中断号必须是一一对应的,中断向量在中断向量表中按照中断号的顺序进行存储。安全边距2.5中断与异常处理机制基于OpenHarmony的嵌入式开发60[2.5.1]中断的基本概念CPU执行主程序低级中断请求响应低级中断请求响应高级中断请求高级中断请求CPU执行低级中断服务程序CPU执行高级中断服务程序返回低级中断请求返回主程序普适问题:从用户角度使用需要控制中断的哪些功能?①创建中断(Create);②删除中断(Delete);③打开中断(Unlock);④关闭中断(Lock);⑤使能中断(Enable);⑥禁用中断(Disable);⑦设置中断的优先级(SetPriority);⑧触发中断(Trigger);⑨清除中断(Clear);⑩其他相关控制功能或高阶控制功能。LiteOS-M和LiteOS-A由于系统性能和硬件构架不同,中断的执行也有所不同对硬件的初始化,必须要充分考虑初始化成功之后的后果,防止未知状态的发生安全边距2.5中断与异常处理机制基于OpenHarmony的嵌入式开发61[2.5.2]

LiteOS-M内核中断(以Cortex-M7为例)

创建/删除/打开/关闭/禁用/使能/触发/清除中断+设置优先级LOS_HwiCreate()ArchHwiCreate()

/arch/arm/cortex-m7/gcc/los_interrupt.c实现:LITE_OS_SEC_TEXT_INITUINT32ArchHwiCreate(HWI_HANDLE_ThwiNum,HWI_PRIOR_ThwiPrio,HWI_MODE_ThwiMode,HWI_PROC_FUNChwiHandler,HwiIrqParam*irqParam)hwiNum:硬件的中断号;hwiPrio:硬件的中断优先级;hwiMode:硬件的中断模式,暂时没有功能;hwiHandler:要注册的中断处理程序;irqParam:传递给中断处理程序的参数。/kernel/liteos_m/arch/include/los_interrupt.h文件中:#defineLOS_HwiCreateArchHwiCreate

必要的安全检查hwiHandler

==

NULLhwiNum>=OS_HWI_MAX_NUMhwiPrio>OS_HWI_PRIO_LOWESTg_hwiForm[hwiNum+OS_SYS_VECTOR_CNT]!=(HWI_PROC_FUNC)HalHwiDefaultHandler安全边距2.5中断与异常处理机制基于OpenHarmony的嵌入式开发62[2.5.2]

LiteOS-M内核中断(以Cortex-M7为例)

创建/删除/打开/关闭/禁用/使能/触发/清除中断+设置优先级LOS_HwiCreate()ArchHwiCreate()

必要的安全检查intSave=LOS_IntLock()OsSetVector()if(irqParam!=NULL){OsSetVector(hwiNum,hwiHandler,irqParam->pDevId);}else{OsSetVector(hwiNum,hwiHandler,NULL);}VOIDOsSetVector(UINT32num,HWI_PROC_FUNCvector)

{if((num+OS_SYS_VECTOR_CNT)<OS_VECTOR_CNT){

g_hwiForm[num+OS_SYS_VECTOR_CNT]=HalInterrupt;

g_hwiHandlerForm[num+OS_SYS_VECTOR_CNT]=vector;}}//CountofM-Coresysteminterruptvector.#defineOS_SYS_VECTOR_CNT16#defineOS_VECTOR_CNT

(OS_SYS_VECTOR_CNT+OS_HWI_MAX_NUM)安全边距2.5中断与异常处理机制基于OpenHarmony的嵌入式开发63[2.5.2]

LiteOS-M内核中断(以Cortex-M7为例)

创建/删除/打开/关闭/禁用/使能/触发/清除中断+设置优先级LOS_HwiCreate()ArchHwiCreate()

必要的安全检查intSave=LOS_IntLock()OsSetVector()①g_hwiForm,中断向量表,定义如下:STATICHWI_PROC_FUNC…

g_hwiForm[OS_VECTOR_CNT]={0};-5和16,系统的向下减,用户的向上增对于中断号hwiNum,g_hwiForm[hwiNum]表示该中断对应的中断入口程序安全边距2.5中断与异常处理机制基于OpenHarmony的嵌入式开发64[2.5.2]

LiteOS-M内核中断(以Cortex-M7为例)

创建/删除/打开/关闭/禁用/使能/触发/清除中断+设置优先级LOS_HwiCreate()ArchHwiCreate()

必要的安全检查intSave=LOS_IntLock()OsSetVector()②g_hwiHandlerForm,中断处理程序,定义如下:STATIC

g_hwiHandlerForm[OS_VECTOR_CNT]={{0,0}};HwiUnmask()设定中断屏蔽触发器HwiUnmask()

->NVIC_EnableIRQ((IRQn_Type)hwiNum)Description:EnableInterruptinNVICInterruptController.Parameter:IRQn_TypeIRQnspecifiesthepositiveinterruptnumber.Itcannotbesystemexception.

Return:NoneHwiSetPriority()HwiSetPriority((IRQn_Type)hwiNum,hwiPrio);

-> NVIC_SetPriority((IRQn_Type)hwiNum,priority);Description:SetthePriorityGroupinginNVICInterruptController.Parameter:Priority_groupingisprioritygroupingfield

Return:NoneLOS_IntRestore(intSave)保存恢复returnLOS_OK恢复到LOS_Lock之前的状态安全边距2.5中断与异常处理机制基于OpenHarmony的嵌入式开发65[2.5.2]

LiteOS-M内核中断(以Cortex-M7为例)

创建/删除/打开/关闭/禁用/使能/触发/清除中断+设置优先级LOS_HwiDelete()ArchHwiDelete()

/arch/arm/cortex-m7/gcc/los_interrupt.c实现:LITE_OS_SEC_TEXT_INITUINT32ArchHwiDelete(HWI_HANDLE_ThwiNum,HwiIrqParam*irqParam)hwiNum:硬件的中断号;irqParam:传递给中断处理程序的参数。/kernel/liteos_m/arch/include/los_interrupt.h文件中:#defineLOS_HwiDeleteArchHwiDelete必要的安全检查hwiNum>=OS_HWI_MAX_NUMNVIC_DisableIRQ()NVIC_DisableIRQ((IRQn_Type)hwiNum);Description:DisableInterruptinNVICInterruptController.Parameter:IRQn_TypeIRQnisthepositivenumberoftheexternalinterrupt.Itcannotbesystemexception.

Return:Noneg_hwiForm[hwiNum+OS_SYS_VECTOR_CNT]=(HWI_PROC_FUNC)HalHwiDefaultHandler;intSave=LOS_IntLock()…恢复到默认的中断处理程序安全边距2.5中断与异常处理机制基于OpenHarmony的嵌入式开发66[2.5.2]

LiteOS-M内核中断(以Cortex-M7为例)

创建/删除/关闭/打开/禁用/使能/触发/清除中断+设置优先级LOS_IntLock()ArchIntLock()

/arch/arm/cortex-m7/gcc/los_dispatch.S实现:/kernel/liteos_m/arch/include/los_interrupt.h文件中:#defineLOS_IntLockArchIntLockArchIntUnLock:.fnstart.cantunwindMRSR0,PRIMASK

CPSIDIBXLR.fnendMarksthestartofafunctionwithanunwindtableentry.Preventsunwindingthroughthecurrentfunction.读取PRIMASK到R0,R0为返回值。PRIMASK是单一比特寄存器PRIMASK=1时屏蔽所有可屏蔽(

温馨提示

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

评论

0/150

提交评论