一种基于微内核操作系统的技术方案

技术编号:39750237 阅读:5 留言:0更新日期:2023-12-17 23:48
本发明专利技术公开一种基于微内核操作系统的

【技术实现步骤摘要】
一种基于微内核操作系统的ELF加载方法


[0001]本专利技术涉及计算机
,特别是涉及一种基于微内核操作系统的
ELF
加载方法


技术介绍

[0002]可执行与可链接格式
(Executable andLinkable Format

ELF)
文件,是一种常见的二进制文件格式,用于存储可执行程序

共享库和内核模块等,最初是由
UNIX
系统实验室
(UNIX System Laboratories

USL)
开发并发布的,作为应用程序二进制接口
(ApplicationBinary Interface

ABI)
的一部分
。ELF
文件格式主要包含三种类型,可重定位文件
(Relocatable File)
:包含适合于与其他目标文件链接来创建可执行文件或者共享目标文件的代码和数据;可执行文件
(Executable File)
:包含适合于执行的一个程序,此文件规定了如何创建一个程序的进程映像;共享目标文件
(Shared ObjectFile)
:包含可在两种上下文中链接的代码和数据

[0003]ELF
加载过程主要分为以下关键步骤:
[0004](1)
内核空间准备:在加载
ELF
文件之前,内核会为进程分配内核空

这包括为进程创建地址空间

设置内核栈以及其他必要的内核数据结构等

[0005](2)ELF
文件解析:内核会读取
ELF
文件的头部信息,包括程序头表
(Program HeaderTable)
和节头表
(Section HeaderTable)
,来了解
ELF
文件的布局和各节的属性

[0006](3)
内存空间分配:根据
ELF
文件的需求,内核会为进程分配适当的内存空间

它将根据程序头表中的段信息,如代码段
(Text Segment)、
数据段
(Data Segment)、

(Heap)
和栈
(Stack)
等,来确定这些段在内存中的位置和大小

[0007](4)
段加载:内核将根据程序头表的指示,将
ELF
文件中的各个段加载到相应的内存地址

这包括将代码段加载到可执行内存区域

将数据段加载到合适的内存位置,并为堆和栈分配相应的内存空间

[0008](5)
符号解析和重定位:在
ELF
文件的加载过程中,还会进行符号解析和重定位

这涉及到将代码段中的符号引用与实际的函数或变量地址进行关联,并进行必要的地址修正,以确保程序在正确的内存位置执行

[0009](6)
入口点设置等:在加载完
ELF
文件的各个段后,内核会根据
ELF
文件的入口点
(Entry Point)
信息设置程序的起始执行地址

这将引导进程从指定的入口点开始执行代码

[0010]整个
ELF
加载过程完成后,系统将控制权交给加载的
ELF
文件,从而启动相应的进程,该进程就可以开始执行其包含的代码和数据,完成相应的操作

由于
ELF
格式的广泛使用和工具支持,大多数嵌入式操作系统都会选择使用
ELF
作为默认的可执行文件格式,并提供相应的加载器或运行时环境来支持
ELF
文件的加载和执行,所以目前部分嵌入式操作系统都已经实现了
ELF
加载功能

[0011]小型实时操作系统内核
(FreeRTOS)

ELF
加载将可执行文件加载到内存并执行,
其加载过程包括:加载器初始化:加载器初始化为加载和执行的
ELF
文件做准备,包括初始化内存

寄存器等;
ELF
文件解析:加载器解析
ELF
文件的头部,以获取有关程序的基本信息,如程序入口地址

段的大小

段的位置等;内存分配:根据
ELF
文件指定的段大小和位置,加载器分配足够的内存空间来容纳程序的代码段

数据段和其他相关段;代码和数据复制:加载器将
ELF
文件中的代码段

数据段等复制到相应的内存地址,以执行其他必要的初始化操作;符号重定位:在
ELF
文件中,符号表描述了不同符号的地址信息,加载器通过符号表对程序进行符号重定位,即将符号的引用地址改为实际的内存地址;程序入口跳转:加载器将控制权转移到程序的入口地址,开始执行程序

[0012]MINIX、GNU Hurd、Fiasco.OC、Genode
等操作系统对于
ELF
的加载功能实现,虽然细节上会有略微的差异,但大致实现步骤都与标准的加载过程相似,通常包括如下步骤:
ELF
文件解析:加载器读取
ELF
文件头的信息,包括入口点地址

代码段和数据段的大小等;分配虚拟内存:加载器为可执行文件分配一块虚拟内存空间,以用于加载代码段和数据段:从
ELF
文件加载段:加载器根据
ELF
文件中的段表信息,将需要的程序段加载到先前分配的虚拟内存空间中,代码段将被加载到可执行代码区域,数据段将被加载到适当的数据区域;重定位处理:如果
ELF
文件包含重定位信息,加载器将执行重定位操作,根据重定位表中的符号信息,将相对地址转换为实际的内存地址,以正确定位各个部分;初始化和启动:加载器完成加载和重定位后,将初始化代码段的全局变量和静态变量,然后加载器设置适当的上下文环境,并将控制权传递给可执行文件的入口点,从而启动可执行程序的执行

[0013]FreeRTOS
操作系统是一个基于宏内核设计的实时操作系统,系统在实现
ELF
加载功能时,
ELF
解析过程会占用较大运存,造成资源的巨大浪费,同时在基于
ARM Cortex

M
系列硬件平台开发运行时,因硬件平台本身的资源受限,
FreeRTOS
在实现
ELF...

【技术保护点】

【技术特征摘要】
1.
一种基于微内核操作系统的
ELF
加载方法,其特征在于,包括:获取
ELF
加载任务线程上
ELF
文件的文件描述符;从所述文件描述符中读取
ELF
文件头;对所述
ELF
文件头进行检查,并当所述
ELF
文件头通过检查后,从所述
ELF
文件头中读取各段表信息和各节表信息;根据所述段表信息和所述节表信息,获取代码段在
ELF
文件中的位置和大小,以及数据段在
ELF
文件中位置和大小;根据代码段的大小确定需要的闪存的空间大小和代码段存放到所述闪存的起始地址;将代码段需要闪存的空间大小和代码段存放到所述闪存的起始地址存放到第一结构体;根据数据段的大小确定需要的静态随机存储器的空间大小和数据段存放到静态随机存储器的起始地址;将数据段需要静态随机存储器的空间大小和数据段存放到静态随机存储器的起始地址存放到第二结构体;根据数据段在
ELF
文件中位置和大小,申请动态内存读取数据段;根据
ELF
文件中动态段的信息对读取的数据段包含的数据对象的地址进行重定位;将重定位后的数据段,根据所述第二结构体存储的信息拷贝到静态随机存储器;根据所述第一结构体存储的信息,将所述代码段拷贝到闪存;设置所述
ELF
文件加载后的应用程序入口
。2.
根据权利要求1所述的基于微内核操作系统的
ELF
加载方法,其特征在于,所述
ELF
文件头通过检查的条件包括:
e_type

ET_DYN。3.
根据权利要求1所述的基于微内核操作系统的
ELF
加载方法,其特征在于,将重定位后的数据段,根据...

【专利技术属性】
技术研发人员:廖斌肖堃袁超王银涛
申请(专利权)人:四川赛纽斯科技有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1