0x05 LiteOS内核详解--如何知道LiteOS中调用了哪些文件?

举报
樊心昊 发表于 2020/06/22 15:38:19 2020/06/22
【摘要】 摘要:如何知道LiteOS中使用了哪些文件?当然是看Makefile文件咯,因为在LiteOS工程中使用Makefile来控制编译的,我们只要阅读其Makefile即可知道哪些文件参与了编译,有关Makefile的学习,请参考我的帖子“分享几个彻底学习LiteOS_Lab需要具备的知识”。本贴以armv7-m内核为例,带领大家阅读OS组件中LiteOS的Makefile。一、LiteOS_L...

摘要:如何知道LiteOS中使用了哪些文件?当然是看Makefile文件咯,因为在LiteOS工程中使用Makefile来控制编译的,我们只要阅读其Makefile即可知道哪些文件参与了编译,有关Makefile的学习,请参考我的帖子“分享几个彻底学习LiteOS_Lab需要具备的知识”。本贴以armv7-m内核为例,带领大家阅读OS组件中LiteOS的Makefile。


一、LiteOS_Lab中Makefile之间的关系

首先我们可以看到在LiteOS_Lab/targets/xxxxx(替换为开发板名称)/GCC目录下有一个Makefile,这个Makefile就是主Makefile,当我们在GCC目录下执行make指令时,就会执行all作为目标的这条指令,

image.png

依次执行依赖文件需要的命令,并将include引用的makefile文件内容添加进来(说添加进来可能不准确,这是为了让大家好理解)。

image.png

这里的.config就是之前通过Kconfig图形化配置界面生成的配置信息,Makefile会根据.config中的信息来选择性的包含某些组件的Makefile。这里举两个例子:

例1:在.config中使能AT组件

我在Kconfig配置界面中使能了AT组件,

image.png

在.config文件中就会生成这么几条语句:

image.png

AT组件中的Makefile文件就会判断,因为CONFIG_AT_ENABLE被配置为了y,就将AT组件中的源文件添加进来编译,并将AT组件目录作为检索头文件的目录,并定义一个宏定义CONFIG_AT_ENABLE=1,如下图。

image.png


例2:在.config中使能OS组件并选择LiteOS作为OS

我在Kconfig配置界面中使能了AT组件,

image.png

在.config文件中就会生成这么一条语句:

image.png

在OS组件中的Makefile就会进行如下判断,因为CONFIG_LITEOS_ENABLE被设置为了y,就将os/liteos/liteos_imp.mk文件引用进来编译。

image.png

现在我们想知道LiteOS中调用了哪些文件直接看liteos_imp.mk文件即可。


二、根据liteos_imp.mk文件分析LiteOS中使用了哪些文件

liteos_imp.mk文件位于LiteOS_Lab-iot_link\iot_link\os\liteos目录下,大家可以边看我的帖子边看这个文件,这样有助于学习。

以下我将这个Makefile分为几个部分来向大家讲解:

1、armv7-m内核相关部分

从这里可以看出,目前LiteOS支持三类内核的单片机,由上到下“armv7-m”、“armv6-m”和“riscv32”

image.png

上面包含的这些文件都是与内核密切相关的文件,例如“起始文件”、“中断向量表”、“任务调度相关文件”,我们着重看一下armv7-m内核的文件

liteos/arch/arm/arm-m/armv7-m/*.c:添加liteos/arch/arm/arm-m/armv7-m/目录中的全部.c文件编译(los_exc.c文件该文件用于处理异常相关)

liteos/arch/arm/arm-m/armv7-m/gcc/*.c:添加了los_dispatch.c文件进行编译,该文件主要用于通过汇编语言快速完成一些系统相关操作,例如系统启动、任务调度等。

liteos/arch/arm/arm-m/armv7-m/gcc/los_startup.S:添加了启动代码,这个代码使用汇编写的主要处理复位中断,设置栈顶指针,清除bss段等初始化操作。

arch_inc = -I $(iot_link_root)/os/liteos/arch/arm/arm-m/armv7-m :表示以后寻找头文件可以到该目录下寻找


2、armv7-m和armv6-m内核公共代码部分

image.png

ifeq ($(CONFIG_ARCH_CPU_TYPE), $(filter $(CONFIG_ARCH_CPU_TYPE), "armv7-m" "armv6-m")):这句话的意思是CONFIG_ARCH_CPU_TYPE等于armv7-m或者armv6-m,那就将下面的文件和目录添加到编译列表中和头文件包含目录列表中。


3、所有架构内核的公共代码部分

image.png

image.png

这一部分就是所有架构的内核都能使用的的源码和寻找头文件的目录,根据目录意思,大概能得知,这一部分包含了内存管理、进程间通讯等模块。

 

其余Makfile文件大家可以以此类推,自行阅读,后面的内核部分就以该Makefile为索引来解读。


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。