SylixOS 启动浅析

1、SylixOS启动概述

每个操作系统的启动都是多种多样,各有不同,SylixOS亦是如此,本文将浅析SylixOS启动层次和启动步骤两大方面。

2、SylixOS启动层次

在专用的嵌入式开发板上运行嵌入式操作系统(如SylixOS、Linux等)已经变得越来越流行,通常从一个嵌入式操作系统的软件角度来看,引导加载程序和操作系统内核便是两个重要的层次,下面就简单介绍关于SylixOS这两大层次的关键点。

2.1 层次一:Boot过程

一个裸机可执行程序的运行方法有两种:

1、 将程序代码入口放在处理器复位向量地址处,处理器上电可直接运行;

2、 使用bootloader将程序装载到指定的运行地址,再将cpu控制权交给需要运行的程序。

SylixOS支持以上任意一种的启动方法,两种方法区别如表 21所示。

表 21  启动方法


方法


第一种


第二种


优点


启动速度快(系统上电后,操作系统立即就开始初始化并运行);


灵活性强(bootloader可初始化基础性部件,根据配置以不同顺序启动系统);


缺点


灵活性不够(系统稍有动,就需要重新固化代码);

代码执行速度慢;


启动速度稍慢;

SylixOS推荐使用第二种方法启动系统,虽然SylixOS经过裁剪后也可以作为bootloader,但是为了移植的通用性和兼容性,故推荐使用u-boot这一类标准的bootloader。

SylixOS自己作为bootloader:

1、可以生成两个SylixOS可执行镜像,一个用来做bootloader使用第一种方法启动;

2、从存储介质或通信煤质获取另一个SylixOS系统可执行代码镜像;

3、把系统镜像拷贝到需要运行的地址处,将cpu控制权交给系统镜像,完成boot过程。

2.2 层次二:Image文件

在RealEvo-IDE开发工具编译下,新建的bsp工程Debug目录下会生成一个.bin或.elf可执行镜像文件,故SylixOS系统本身就是一个执行镜像。

一个程序的执行镜像大致可以分为3个区域:text、data、bss,SylixOS编译链接后也分为这3个区域,如表 22所示。

表 22 镜像划分区域

区域 段名 备注
text 文字池段
一般由代码、表格常量组成,运行时不可修改

data 数据段
需要初始化的全局变量,在C代码运行前需赋初值

bss 清零段
需要清零的全局数据区,在C代码运行前需清零

SylixOS可执行文件分为两类,纯程序运行代码和带有格式的镜像文件,这两类分别代表bin和elf文件。

bin文件仅包含连续的数据,他可以是代码, 也可以是数据,一般在运行bin文件时:1、预先知道代码运行的入口地址;2、将bin文件拷贝或烧录到该地址以后的存储区。elf文件与bin文件完全不同,elf 并不是单纯的无格式数据文件, elf 是一种较复杂的程序文件, 分为多种类型, 这里所说的是个执行文件.elf 文件内部包含有对程序运行信息的描述, 数据的存放, 调试信息等等。

elf 内部程序代码一般不包含有对 .data 段初始化的代码, 所以切记, 仅仅拷贝 elf 内部的代码, 是不能正确运行程序的,lf 内部一般由多分段组成, 每个分段都有物理地址(装载域)和虚拟地址(运行域)。当 .text 与 .data 连续时, 一般分段物理地址与虚拟地址相同, 所以只要根据文件信息将相关的数据拷贝入指定的内存即可。当 .text 与 .data 不连续时, 有些段的物理地址与虚拟地址将不再相同, 这时注意, 需要将文件数据拷贝入物理地址(装载域)指定的内存中,程序启动时会自动将物理地址(装载域)内的相关数据, 拷贝入虚拟地址(运行域). 这样完成对某些段(例如:.data)的初始化.

所以说.text 与 .data 连续的可执行文件, 是不能轻易重启的, 必须由 bootloader 从新装载完成重启(推荐).在生成 bootloader 时, (即使用一个 sylixos 启动另一个系统), 推荐不要开启 MMU 和 DCACHE, 因为如果启动镜像小, 建立 MMU 页表的时间反而远远超过装载镜像的时间。

注:RealEvo-Simulator模拟器类似于解析器,故使用的都是.elf文件。

3、SylixOS启动步骤

SylixOS启动总体分为3个步骤:

1、 系统复位,程序从复位向量处开始运行,此时运行的为启动代码startup.s;

2、 初始化C程序运行环境,如堆栈、中断、总线等;

3、 进入bspinit函数做一些必要的处理,完成SylixOS初始化工作。

3.1 步骤源码文件总结

SylixOS启动主要有startup.s和bspinit.c两大源码文件。

1、startup.s文件位于bsp工程/SylixOS/bsp目录下,主要负责初始化关键性运行环境,承担SylixOS启动的前两大步骤,如图 31所示。

图 31 startup.s的初始化

2、bspInit.c文件同样位于bsp工程/SylixOS/bsp目录下,其bspinit函数为SylixOS启动最后一大步骤,函数为C函数跳转入口,在bspInit函数中主要分为几个部分:

  • 启动内核,关键性运行环境数据搭建(API_KernelStart函数);
  • SylixOS将控制权转交usrStartup函数进行回调,用户初始化相关功能;
  • 创建第一个任务(halBootThread函数),负责初始化所有系统资源,将SylixOS控制权转交给用户。

3.2 步骤部分函数总结

1、 API_KernelStart函数为SylixOS启动内核函数。

API_KernelStart函数原型:

#include  < k_kernel.h >

VOID  API_KernelPrimaryStart (PKERNEL_START_ROUTINE  pfuncStartHook,

PVOID             pvKernelHeapMem,

size_t            stKernelHeapSize,

PVOID             pvSystemHeapMem,

size_t             stSystemHeapSize)

API_KernelStart函数原型分析:

  • 该函数为系统内核入口,只允许系统逻辑主核调用,一般cpu为0,当前为关中断状态;
  • 参数pfuncStartHook为系统启动中的用户回调;
  • 参数pvKernelHeapMem为内核堆内存首地址;
  • 参数stKernelHeapSize为内核堆大小;
  • 参数pvSystemHeapMem为系统堆内存首地址;
  • 参数stSystemHeapSize为系统堆大小;

usrStartup函数作为参数pfuncStartHook传入API_KernelStart函数,用来初始化应用相关组件,创建操作系统的第一个任务。

2、halBootThread函数负责初始化所有系统资源,如图 32所示。

图 32 halBootThread函数的初始化

halBootThread函数原型:

static  PVOID  halBootThread (PVOID  pvBootArg)

halBootThread函数原型分析:

halBootThread函数是usrStartup函数创建的t_boot线程下,用来多任务状态下的初始化启动任务函数。

4、参考资料

时间: 2024-08-11 09:55:28

SylixOS 启动浅析的相关文章

SylixOS启动读取配置文件

1 概述 SylixOS启动时会加载环境变量配置文件profile,网络配置文件ifparam.ini以及系统启动脚本startup.sh. 2 环境变量配置文件profile SylixOS启动时会执行varload命令,该命令的作用是从系统/etc/profile文件中读取环境变量配置信息,加载到系统运行环境中,如果系统/etc路径下没有profile文件,系统启动则会有如图 21所示提示信息. 图21  加载profile失败 如果没有profile文件,可执行varsave命令将当前系统

PowerPC P2010 SylixOS启动方式分析

1. QorIQ P系列处理器简介 QorIQ P系列处理器基于Power Architecture e500系列内核.其中P10xx系列.P2010和P2020基于e500v2内核,P204x.P30xx和P40xx基于e500mc内核,P50xx基于e5500内核. 其中,P2系列专为网络.电信.军工等各种市场提供高品质部件.P2010包含一个1.2GHz内核,512KB二级高速缓存等等. 2. mkimage工具介绍  mkimage工具可以用来制作不压缩或者压缩的多种可启动镜像文件. m

SylixOS DNS浅析

1. DNS 概述 网络通讯大部分是基于TCP/IP,而TCP/IP又基于IP地址.故计算机在网络上进行通讯时只能识别如"192.168.2.1"之类的IP地址,而无法识别域名.在访问网站时,更多的是在浏览器地址栏中输入域名,就能看到所需的页面,这是因为有一个叫"DNS服务器"的计算机自动把域名"翻译"成了相应的IP地址. DNS(Domain Name System)是"域名系统"的英文缩写,是一种组织成域层次结构的计算机和

SylixOS的RMS浅析

目 录 1. 知识简介    1 1.1 嵌入式实时操作系统    1 1.2 优先级调度算法    1 2. 技术实现    2 2.1 函数原型分析    2 2.2 使用流程    2 2.3 源码分析    3 2.4 示例演示    4 3. 参考资料    5 知识简介 嵌入式实时操作系统 SylixOS操作系统是实时多任务嵌入式操作系统,所谓实时,是指系统的正确性不仅仅依赖于计算机的逻辑结果而且依赖于结果产生的时间.结果产生的时间就是通常所说的截止期限,描述系统实时性的指标主要有:

SylixOS PMON下启动方式

1. 适用范围 此文档适用于指导用户在PMON下设置SylixOS启动方式. 2. 系统启动方式 PMON是一个兼有BIOS和boot loader部分功能的开放源码软件,多用于嵌入式系统.基于龙芯的系统采用PMON作为类BIOS兼boot loader,并在其基础上做了很多完善的工作,支持网络引导(TFTP.HTTP.NFS).磁盘引导和Flash引导. PMON默认从al设置的指示来启动内核(目前龙芯2K1000的开发板从al1环境变量启动).若需要修改启动参数,可在系统启动后按任意的非回车

SylixOS龙芯1C适配总结

1.龙芯1C简介 1.1龙芯1C简介 龙芯 1C300(以下简称 1C)芯片是基于 LS232 处理器核的高性价比单芯片系统,可应用于指纹生物识别.物联传感等领域.1C 包含浮点处理单元,可以有效增强系统浮点数据处理能力.支持 8-bit SLC NAND 或 MLC NAND FLASH,提供高容量的存储扩展接口. 1C 为开发者提供了丰富的外设接口及片上模块,包括 Camera 控制器, USB OTG 2.0 及 USB HOST 2.0 接口, AC97/I2S 控制器, LCD 控制器

x86下SylixOS引导过程分析

1. 上电启动流程 当x86电源打开后,CPU将自动进入实模式,并从地址0xFFFF0(CS:0xFFFF,IP:0x0)开始自动运行程序代码,此地址一般是BIOS的地址.BIOS启动后,将启动设备的主引导记录.主引导记录位于第0磁道的第1个扇区,它的大小是512字节,里面存放了用汇编语言编写的预启动信息.分区表信息.魔数0x55AA等.BIOS将主引导记录读入内存绝对地址0x7C00处,并跳转到此地址运行.在SylixOS平台中,事实上被拷贝到物理内存0x7C00处的内容就是GRUB. 2.

SylixOS中ROOTFS介绍

ROOTFS简介ROOTFS(根文件系统)是一种特殊的文件系统,根文件系统是内核启动时挂载的第一个文件系统,因此根文件系统包括了SylixOS启动时所必须的目录和关键性的文件,例如内核启动时所必需的etc目录,以及系统命令bin目录等,任何包括这些SylixOS启动所必须的文件都可以成为根文件系统.SylixOS的ROOTFS属于虚拟类型的根文件系统,因为此文件系统并不存在于具体的物理磁盘中,而是系统启动后动态创建的,并将此系统保存于内存中. 根目录文件系统映射配置参数系统内核启动参数函数API

X86工控机安装SylixOS

目 录 安装方式介绍 1 SylixOS启动盘安装 12.1 启动盘启动SylixOS 12.2 挂载硬盘 1 安装方式介绍通过RealEvo-SylixOS-Installer安装x86平台的SylixOS操作系统.通过简单的配置可以很方便地将SylixOS安装到指定的移动磁盘或者固定的磁盘,这极大地方便了SylixOS操作系统在x86平台的安装.SylixOS在x86平台上的安装方式有两种:1) 硬盘安装SylixOS在RealEvo-IDE中的Tools→RealEvo-SylixOS-I