今日看点

[HarmonyOS][鸿蒙专栏开篇]快速入门OpenHarmony的LiteOS微内核

发表于话题:HarmonyOS 2
发布时间:2021-06-02


文章目录

1、获取源码2、什么是LiteOS3、LiteOS的目录介绍4、LiteOS 中Make体系5、LiteOS 中Kconfig的配置5.1、顶层Kconfig5.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等。bsdfreebsd相关的驱动和适配层模块代码引入,例如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_DEBUG bool "Enable USB Debug" default n depends on SHELL && DRIVERS_USB && DEBUG_VERSION help Answer Y to enable LiteOS support usb debug. use shell command to open the specified debug level print. config MEM_DEBUG bool "Enable MEM Debug" default n depends on DEBUG_VERSION help Answer Y to enable LiteOS support mem debug.

通过source加载其他的Kconfig例如加载USB相关配置

kernel_liteos_a/bsd/dev/usb/Kconfig:

config DRIVERS_USB bool "Enable USB" default y depends on DRIVERS && COMPAT_BSD help Answer Y to enable LiteOS support usb. config DRIVERS_USB_HOST_DRIVER bool "Enable USB HCD" default y depends on DRIVERS_USB && DRIVERS help Answer 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.mk MODULE_NAME := usb_base ifeq ($(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_base LIB_SUBDIRS += $(LITEOSTOPDIR)/bsd/dev/usb LITEOS_USB_INCLUDE += -I $(LITEOSTOPDIR)/bsd/dev/usb ifeq ($(LOSCFG_USB_DEBUG), y) LITEOS_CMACRO += -DLOSCFG_USB_DEBUG endif endif ...

看到这里,我相信大家对kernel_liteos_a整个代码框架有了整体的印象,后面我们就会深入到具体的驱动模块及子系统中看看,它是如何实现的。

我正在参加 CSDN 的鸿蒙技术征文活动,给我点赞支持,感谢。

标签组:[文件目录] [linux编译] [编译程序] [config] [makefile

本文来源:https://www.kandian5.com/articles/24002.html

相关阅读

明朝后期皇帝几十年不上朝 明朝为何还能维持近三百年

今天历史网小编为大家带来明代皇帝,希望对你们能有所帮助。明代皇帝不上朝的长达几十之多,可以说皇帝昏庸无能,明代为什么还能维持近三百年之久?真相又是什么样的?元代末年,因为统治者的残暴昏聩,导致不少农民...

2025-06-16

明朝宦官汪直一生都经历过什么?他最后的结局如何

嘉靖二十六年(1547年)明朝政府为控制倭患猖獗的局面,朱纨采取了“革渡船,严保甲”等一系列措施,加强海禁。以上问题历史网小编将在下文为大家一一揭晓。嘉靖年间,一个名字和成化年间奸宦汪直相同的海上霸主...

2025-06-16

燕国名将秦开一生有何战绩?有多传奇?

历史上乐毅伐齐,几乎灭亡这个当时天下第一强国的齐国,不仅雪了数百年耻辱,更是燕国历史上在争霸过程中,唯一能拿出手的战勋。今天历史网小编给大家整理了相关内容,不知能否帮助大家拓展一些知识?然而鲜为人知的...

2025-06-16

历史上南梁的十三位帝王,分别是什么结局?

南朝梁是中国南北朝时期的南朝第三个朝代,由雍州刺史萧衍取代南齐称帝,定都建康。国号梁,以萧衍封地在古梁郡,故定国号为梁。因皇室姓萧,又称萧梁。历史网小编为大家带来相关内容,感兴趣的小伙伴快来看看吧南北...

2025-06-16

严世蕃被称为&“嘉靖第一鬼才&” 严世蕃到底聪明到什么地步

大家好,这里是历史网小编,今天给大家说说鬼才严世蕃的故事,欢迎关注哦。严世蕃到底是一个什么样的人?嘉靖时期能被人称为鬼才,严世蕃究竟有多聪明?这个称呼是怎么来的?严世蕃是明嘉靖一朝的重臣,洞察人心的本...

2025-06-16

明武宗朱厚照御驾亲征宁王的目的是什么?与王阳明有何关系

明朝不论是言官还是其他文官,都以顶撞皇上为荣,顶撞的越厉害名声越大,大家越认为你是个好官,越尊重你,而不是看你做了什么成绩。这是很多读者都比较关心的问题,接下来各位读者就和历史网小编一起来了解吧!明代...

2025-06-16

项羽为什么没成楚汉争霸的最后赢家?

项羽,西楚霸王。出生高,起点高,身边大将如云的大英雄怎么失败了?感兴趣的读者和历史网小编一起来看看吧!要我说,还是霸王自己太作。其一 性格决定命运楚霸王小时学读书,觉得读书无用。学剑术,没有耐心,半途...

2025-06-16

天启皇帝临死为何会传位给自己的弟弟 天启皇帝就没有更好的选择吗

对天启皇帝传位很感兴趣的小伙伴们,历史网小编带来详细的文章供大家参考。朱由校临死前为什么会传位给弟弟朱由检?天启皇帝就没有自己的儿子吗?天启皇帝又是怎么想的?有明一朝,一共存在过十六个皇帝。而在明代后...

2025-06-16

孙鲁班作为孙权的长女,为何会惨遭流放?

三国时代的女人是各具特色的,有的沉鱼落雁,有的才艺双绝,有的便如蛇蝎一生都在摆布男人。下面历史网小编就为大家带来详细解读,接着往下看吧~孙鲁班(生卒年不详),字大虎,吴郡富春(今浙江省杭州市富阳区一带...

2025-06-16

赛车手刘瑞祺出席品牌活动 分享极速体验的魅力

近日,为庆祝F1中国大奖赛的举办,天猫小黑盒联合《时尚芭莎》打造了一场沉浸式【芭莎F1极速开新派对】,这是一次融合了赛车文化、时尚潮流与娱乐元素的跨界活动。活动通过线上直播间与线下空间联动的形式,打...

2025-06-16