[HarmonyOS][鸿蒙专栏开篇]快速入门OpenHarmony的LiteOS微内核
文章目录
- 1、获取源码
- 2、什么是LiteOS
- 3、LiteOS的目录介绍
- 4、LiteOS 中Make体系
- 5、LiteOS 中Kconfig的配置
- 5.1、顶层Kconfig
- 5.2、具体板级的deconfig文件
- 6、编译
- 7、顶层目录下的config.mk文件主要完成如下功能的配置:
1、获取源码
OpenHarmony
是HarmonyOS
的开源版,由华为捐赠给开放原子开源基金会(OpenAtom Foundation
)开源。第一个开源版本支持在128KB~128MB
设备上运行,欢迎参加开源社区一起持续演进。
代码仓库地址1:https://codechina.csdn.net/openharmony
代码仓库地址2:https://openharmony.gitee.com
本专栏主要分析OpenHarmony
内核的相关代码:
Cortex-A系列处理器内核:kernel_liteos_a
Cortex-M系列处理器内核:kernel_liteos_m
2、什么是LiteOS
Huawei LiteOS
是华为针对物联网领域推出的轻量级物联网操作系统,是华为物联网战略的重要组成部分,具备轻量级、低功耗、互联互通、组件丰富、快速开发等关键能力,基于物联网领域业务特征打造领域性技术栈,为开发者提供 “一站式” 完整软件平台,有效降低开发门槛、缩短开发周期,可广泛应用于可穿戴设备、智能家居、车联网、LPWA
等领域。
Huawei LiteOS
微内核在OpenHarmony
源码中所处的位置:
3、LiteOS的目录介绍
我们以Cortex-A
系列处理器内核为例:kernel_liteos_a
可以看到有12目录、4个文件。
- 目录的作用
名称 | 描述 |
---|---|
apps | 用户态的init和shell应用程序。 |
arch | 体系架构的目录,如arm等。 |
bsd | freebsd相关的驱动和适配层模块代码引入,例如USB等。 |
compat | 内核posix接口的兼容。 |
fs | 文件系统模块,主要来源于NuttX开源项目。 |
kernel | 进程、内存、IPC等模块。 |
lib | 内核的lib库。 |
net | 网络模块,主要来源于lwip开源项目。 |
platform | 支持不同的芯片平台代码,如Hi3516DV300等。 |
security | 安全特性相关的代码,包括进程权限管理和虚拟id映射管理。 |
syscall | 系统调用。 |
tools | 构建工具及相关配置和代码。 |
- 文件的作用
名称 | 描述 |
---|---|
Makefile | 存储了源码文件构建目标文件的规则,具体是否按着规则去执行还要看配置变量。 |
Kconfig | 配置变量 |
config.mk | 主要进行编译选项的设置、编译工具的定义、编译时包含的文件、编译的链接地址。 |
build.sh | 编译脚本 |
4、LiteOS 中Make体系
顶层 Makefile
在编译时是入口点,从整体上组织所有的 Makefile
文件,并定义终极目标,在这里还定义了与平台无关的很多核心变量与一些很重要的 make
目标。顶层 Makefile
位于内核源码的根目录,下面我们分析顶层 Makefile
的主要工作。
用户在内核目录中键入make menuconfig
之后 ,工作流程如下 :
- 顶 层
Makefile
调用解析顶层Kconfig
文件,获得待配置条目; - 判断是否有已配置好的
.config
文件,如果有则导入; - 用户在配置好后,将配置结果存入配置文件。
与Linux
类似LiteOS
的Make
体系顶层 makefile
会通过读取配置文件,递归编译内核代码树的相关目录。
/kernel_liteos_a/Makefile
##### make menuconfig #####
export CONFIG_=LOSCFG_
MENUCONFIG_PATH = $(LITEOSTOPDIR)/tools/menuconfig
KCONFIG_FILE_PATH = $(LITEOSTOPDIR)/Kconfig
5、LiteOS 中Kconfig的配置
无论在什么平台上,软件配置是用户接触程序的第一步,我们这里是内核配置,那么入口就是Kconfig
文件。
5.1、顶层Kconfig
通过顶层的Kconfig
我们可以看见内核所以支持的功能,类似说明书一样,等待你去打开功能。
例如:
kernel_liteos_a/Kconfig
//包含其他的Kconfig
source "../../vendor/hisi/hi35xx/platform/hiedmac/Kconfig"
source "../../kernel/liteos_a/bsd/dev/usb/Kconfig"
source "../../drivers/hdf/lite/Kconfig"config USB_DEBUGbool "Enable USB Debug"default ndepends on SHELL && DRIVERS_USB && DEBUG_VERSIONhelpAnswer Y to enable LiteOS support usb debug.use shell command to open the specified debug level print.config MEM_DEBUGbool "Enable MEM Debug"default ndepends on DEBUG_VERSIONhelpAnswer Y to enable LiteOS support mem debug.
通过source
加载其他的Kconfig
例如加载USB
相关配置
kernel_liteos_a/bsd/dev/usb/Kconfig:
config DRIVERS_USBbool "Enable USB"default ydepends on DRIVERS && COMPAT_BSDhelpAnswer Y to enable LiteOS support usb.config DRIVERS_USB_HOST_DRIVERbool "Enable USB HCD"default ydepends on DRIVERS_USB && DRIVERShelpAnswer Y to enable LiteOS to support usb host controller driver.
...
5.2、具体板级的deconfig文件
可配置说明书有了,我们也不能每次都重新配置一遍把,这个时候就有板级默认配置。
目前LiteOS中Cortex-A
系列处理器内核为例:kernel_liteos_a适配的开发板:hi3518
与hi3516
,并提供了已经配置好的.config
,下来我们以hi3518
为例子对其进行分析。
源文件为:tools/build/config/hi3516dv300_release.config
通过该文件我们可以知道内核配置包括了些什么?
CPU
、开发板、文件系统、驱动程序和调试等大量的待配置信息。
# Automatically generated file; DO NOT EDIT.
# Huawei LiteOS Configuration# Compiler
...
# Platform
...
# Extra Configurations
...
# Kernel
...
# Lib
...
# Compat
...
# FileSystem
...
# Net
...
# Debug
...
# Driver
LOSCFG_DRIVERS=y
LOSCFG_DRIVERS_USB=y
LOSCFG_DRIVERS_USB_HOST_DRIVER=y
# LOSCFG_DRIVERS_USB_HOST_EHCI is not set
LOSCFG_DRIVERS_USB_HOST_XHCI=y
LOSCFG_DRIVERS_USB_DEVICE_CLASS_DRIVERS=y
后面我们就将以LOSCFG_DRIVERS_USB
为切入点分析源码,但在这之前,我们配置有了,下来就是编译了。
6、编译
kernel_liteos_a/bsd/dev/usb/Makefile:
最后编译时候,会根据.config
编译相关的源代码:
例如下面这些代码都将会进行编译,生成了目标文件usb_bask
include $(LITEOSTOPDIR)/config.mkMODULE_NAME := usb_baseifeq ($(LOSCFG_DRIVERS_USB), y)
LOCAL_SRCS += $(CORE_SRC)/usb_dynamic.c \$(CORE_SRC)/usb_parse.c \$(CORE_SRC)/usb_error.c \$(CORE_SRC)/usb_handle_request.c \$(CORE_SRC)/usb_util.c \$(CORE_SRC)/usb_lookup.c \$(CONTROLLER_HOST_SRC)/usb_controller.c \$(QUIRK_SRC)/usb_quirk.c \$(CORE_SRC)/usb_device.c \$(CORE_SRC)/usb_process.c \$(CORE_SRC)/usb_hub.c \$(CORE_SRC)/usb_request.c \$(CORE_SRC)/usb_transfer.c \$(CORE_SRC)/usb_dev.c \$(CORE_SRC)/usb_mbuf.c \$(CORE_SRC)/usb_generic.c \$(CORE_SRC)/usb_if.c
endif
这里生成目标文件是如何链接的内核中,这个时候我们就要开始分析config.mk
的作用了:
7、顶层目录下的config.mk文件主要完成如下功能的配置:
1、确定生成可执行文件过程中需要的各种工具,如编译器(arm-linux-gcc
)、连接器(arm-linux-ld
)、反汇编器(arm-linux-objdump
等
2、确定CPU
、板相关的配置文件,存在于各个目录下的config.mk
3、确定编译、链接、转换等过程的操作选项
4、根据步骤3
确定的编译连接选项生成需要的文件
kernel_liteos_a/Makefile:
$(LD) $(LITEOS_LDFLAGS) $(LITEOS_TABLES_LDFLAGS) $(LITEOS_DYNLDFLAGS) -Map=$(OUT)/$@.map -o $(OUT)/$@ --start-group $(LITEOS_LIBDEP) --end-group
kernel_liteos_a\config.mk:
############### this is a makefile that you can config it ###############
-include $(LITEOSTOPDIR)/tools/build/mk/los_config.mk
...
LITEOS_LIBDEP := $(LITEOS_BASELIB)
目录:kernel_liteos_a\tools\build\mk\los_config.mk
############################# Platform Option Begin#################################
include $(LITEOSTOPDIR)/platform/bsp.mk
...
ifeq ($(LOSCFG_DRIVERS_USB), y)LITEOS_BASELIB += -lusb_baseLIB_SUBDIRS += $(LITEOSTOPDIR)/bsd/dev/usbLITEOS_USB_INCLUDE += -I $(LITEOSTOPDIR)/bsd/dev/usb
ifeq ($(LOSCFG_USB_DEBUG), y)LITEOS_CMACRO += -DLOSCFG_USB_DEBUG
endif
endif
...
看到这里,我相信大家对kernel_liteos_a整个代码框架有了整体的印象,后面我们就会深入到具体的驱动模块及子系统中看看,它是如何实现的。
我正在参加 CSDN 的鸿蒙技术征文活动,给我点赞支持,感谢。
[HarmonyOS][鸿蒙专栏开篇]快速入门OpenHarmony的LiteOS微内核相关推荐
- 华为云14天鸿蒙设备开发培训Day3:快速入门
目录 华为云14天鸿蒙设备开发培训Day3:快速入门 OpenHarmony快速入门:Hello_World 添加Hello_World源码文件 编写Hello_World业务代码 编写编译构建文件B ...
- PHP快速入门02-PHP语言基础
文章目录 前言 一. 数据类型 1.1 String(字符串) 1.2 Integer(整型) 1.3 Float(浮点型) 1.4 Boolean(布尔型) 1.5 Array(数组) 1.6 Ob ...
- PHP快速入门01-初识PHP语言
文章目录 前言 关于PHP语言 写这篇专栏的目的 文适合阅读的人群 本专栏演示环境 PHP快速入门之语言基础 1.1 PHP语言开发环境搭建 1.2 PHP开发工具推荐 1.3 初识PHP,第一个De ...
- HarmonyOS(一) 快速开始学习鸿蒙开发,官方文档学习路线解析
系列文章目录 HarmonyOS(一):快速开始学习鸿蒙开发,官方文档学习路线解析 HarmonyOS(二):应用开发环境搭建准备 HarmonyOS(三):创建你的第一个HelloWorld应用 文 ...
- OpenHarmony开源社区快速入门(一)
OpenHarmony开源社区快速入门(一) 本文主要介绍windows下基于命令行的方式搭建所需要的OpenHarmony开发环境: 开发环境准备 1.首先打开微软商店,搜索Ubuntu,下载ubu ...
- harmonyOS什么读,HarmonyOS鸿蒙入门篇
这几天鸿蒙系统起来了.开源,全场景. 鸿蒙系统又是什么,官网有: HarmonyOS是一款"面向未来".面向全场景(移动办公.运动健康.社交通信.媒体娱乐等)的分布式操作系统.在传 ...
- 2021最新HarmonyOS鸿蒙系统应用开发之基础入门教程到实战—持续更新(第二节:鸿蒙OS系统分布式操作)
老罗带你了解鸿蒙,专注于移动端领域技术的研发和推广,助力鸿蒙在国内技术推广和普及. 每篇内容都有视频讲解,可直接点击观看+关注,持续更新中 2021最新HarmonyOS鸿蒙系统应用开发之基础入门教程 ...
- 2021最新HarmonyOS鸿蒙系统应用开发之基础入门教程到实战—持续更新(第三节:鸿蒙的技术特征)
第三节:鸿蒙的技术特征 每篇内容都有视频讲解,可直接点击观看+关注,持续更新中 2021最新HarmonyOS鸿蒙系统应用开发之基础入门教程到实战-持续更新(第二节:鸿蒙OS系统分布式操作) 硬件互助 ...
- springboot创建parent_Spring Boot 开篇:快速入门
背景 想想之前搭建一个WEB项目,不管项目的功能简单或复杂,都需要哪些步骤: 配置 web.xml,加载 Spring 和 Spring mvc 配置数据库连接.配置 Spring 事务 配置加载配置 ...
最新文章
- python爬百度翻译-教大家用python爬取百度翻译,超简单
- 一文了解 ng-template, ng-content, ng-container, 和 *ngTemplateOutlet的区别
- 对于一个采用字符数组存放的字符串str,设计一个递归算法StrLength(char *str)求其字符个数(长度)。递归求字符串长度
- C++笔记——malloc基本用法
- 微软云Azure训练营 | 八城联动,全球盛会
- cocoa pods的安装与我遇到的问题
- springboot rabbitlistener注解_一文带你SpringBoot+RabbitMQ方式收发消息
- Bootstrap 流式布局
- ubuntu中提示找到make命令的解决方案
- c# 如何调用非托管函数 (转)
- java二分查找算法字符串数组_Java 算法——二分查找数组集合关键元素
- 3d max插件的基本知识和安装方法
- Mac OS X的入门文档
- HL7 v2.5 入门
- 09年国内外免费杀毒软件大收罗
- Python输入关键词批量得到电商商品信息
- weblogic反序列化漏洞修复
- Maven Docker几个插件打包+推送到镜像仓库或者私服(Harbor)的方法
- Mybatis配置文件http://mybatis.org/dtd/mybatis-3-config.dtd报错
- 【字节(北京)AML图计算算法实习生】面试经历