【学习笔记】小O带你掌握操作系统的心跳-OneOS内核启动

一、简介

内核启动介绍了整个系统从硬件上电如何一步步进入用户程序的过程。一般情况下,启动过程分为硬件上电,首先运行和体系架构相关的启动汇编文件,进行一些最基本硬件的初始化(例如CPU配置,时钟,栈地址,RAM等),为内核运行铺垫好环境,然后初始化内核各模块(例如调度器,定时器等),接着创建系统任务(例如空闲任务)和用户任务,最后启动调度和运行用户程序。

二、自动初始化  

 自动初始化是指初始化函数不需要被显式调用。

隐式调用(静态调用):将动态链接库和其它源程序文件(或者目标文件)一起参与链接; 在介绍内核启动之前,有必要介绍自动初始化的实现机制。

在介绍内核启动之前,有必要介绍自动初始化的实现机制

显式调用(动态调用):手动调用动态链接库中包含的资源,同时用完后要手动将资源释放。自动初始化的实现是利用编译器的段和段排序的特性,以GCC编译器为例具体如下:

在介绍内核启动之前,有必要介绍自动初始化的实现机制

自动初始化的实现是利用编译器的段和段排序的特性,以GCC编译器为例具体如下:

1、通过GCC的关键字__attribute__((section(x))),可以把定义的符号(函数地址或变量地址)放到段名为x的段中,段名x由用户指定。在自动初始化应用中,段名都包含.init_call字符串,若采用通配符的表示方法,段名为.init_call,表示任何一串其它一串字符串;

2、在GCC的链接脚本中,关键字KEEP((SORT(.init_call)))可以对段名符合.init_call*形式的段进行排序;

3、若把自动初始化函数的符号(即函数地址)放到符合.init_call*形式的段中,就可以间接实现函数符号排序,从而可以提供有顺序的执行自动初始化函数的方法。

自动初始化通过宏定义提供了注册初始化函数的接口,接口如下:

提供了段结构的宏定义,根据初始化优先级的不同,有如下宏定义

编译之后,初始化宏对应的段结构如下:

三、内核启动流程

下图展示了整个系统启动过程和内核启动过程,本节主要介绍内核启动部分

可见,内核启动主要有下面几个

步骤:

1、系统先从启动文件开始运行,然后进入 OneOS 的内核启动函数 os_kernel_init()和os_kernel_start()

2、os_kernel_init中调用_k_run_init_call函数执行OS_INIT_LEVEL_PRE_KERNEL_1,进行内核启动前的第一阶段的初始化

3、初始化内核各模块,如tick队列,调度器,定时器等

4、创建recycle,idle,timer,sys系统任务

5、启动调度器,最后会运行sys任务,sys任务调用_k_run_init_call函数依次执行其他自动化宏注册的函数,最后调用main函数进入用户程序入口

优秀的个人博客,低调大师

微信关注我们

原文链接:https://my.oschina.net/u/5443273/blog/10110295

转载内容版权归作者及来源网站所有!

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

相关文章

发表评论

资源下载

更多资源
Apache Tomcat7、8、9(Java Web服务器)

Apache Tomcat7、8、9(Java Web服务器)

Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。

Eclipse(集成开发环境)

Eclipse(集成开发环境)

Eclipse 是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括Java开发工具(Java Development Kit,JDK)。

Java Development Kit(Java开发工具)

Java Development Kit(Java开发工具)

JDK是 Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具。

Sublime Text 一个代码编辑器

Sublime Text 一个代码编辑器

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。