嵌入式操作系统启动流程

合集下载

嵌入式启动流程 汇编代码解析

嵌入式启动流程 汇编代码解析

嵌入式启动流程:汇编代码解析1.加载引导程序嵌入式系统在加电后,第一个执行的程序通常是引导程序(Bootloader)。

它负责从存储设备中加载并执行后续的程序。

引导程序通常在启动时进行硬件设备的自检,然后从特定的存储位置(如闪存或RAM)加载后续程序。

引导程序通常使用汇编语言编写,因为它需要在硬件级别进行操作。

它负责初始化CPU、内存、硬盘等硬件设备,并确保系统环境满足后续程序的要求。

2.初始化硬件设备在引导程序之后,接下来的任务是初始化硬件设备。

这包括初始化CPU、内存、硬盘、显示器等设备。

初始化硬件设备的过程包括设置设备的寄存器、配置设备的接口等。

在这个过程中,硬件设备被配置为适合后续程序运行的状态。

3.设置内存管理器在硬件设备初始化完成后,接下来需要设置内存管理器。

内存管理器负责管理系统的内存资源,包括内存的分配、释放和保护。

内存管理器通常由操作系统内核提供,因此在加载操作系统内核之前,需要先初始化内存管理器。

4.加载操作系统内核在内存管理器初始化完成后,可以加载操作系统内核。

操作系统内核是系统的核心部分,负责管理系统资源、调度应用程序的运行等。

操作系统内核通常被压缩并保存在存储设备中,因此需要先解压缩并加载到内存中。

然后,内核会进行自身的初始化,包括设置系统时钟、配置设备驱动等。

5.启动内核并初始化系统服务在操作系统内核加载并初始化完成后,可以启动内核并初始化系统服务。

系统服务是指为应用程序提供支持的底层服务,如文件系统、网络服务等。

启动内核后,会执行一系列的系统初始化过程,包括设置系统环境变量、加载系统服务等。

这些过程完成后,系统就可以接受应用程序的请求并为其提供服务。

6.加载文件系统和应用程序在系统服务初始化完成后,可以加载文件系统和应用程序。

文件系统是存储和管理文件数据的系统,应用程序则是为用户提供服务的程序。

文件系统通常被加载到内存中,并初始化为可用的状态。

然后,可以按需加载应用程序到内存中并执行。

ARM开发教程之ARM体系的嵌入式系统BSP的程序设计

ARM开发教程之ARM体系的嵌入式系统BSP的程序设计

ARM开发教程之ARM体系的嵌入式系统BSP的程序设计简介:ARM公司在32位RISC的CPU开发领域不断取得突破,其结构已经从V3发展到V6。

BSP(Board Support Package)板级支持包介于主板硬件和操作系统之间,其功能与PC 机上的BIOS相类似,主要完成硬件初始化并切换到相应的操作系统。

BSP是相对于操作系统而言的,不同的操作系统对应于不同定义形式的BSP,例如VxWorks的BSP和Linux的BSP相对于某一CPU来说,尽管实现的功能一样,可是写法和接口定义是完全不同的。

另外,仔细研究所用的芯片资料也十分重要,例如尽管ARM在内核上兼容,但每家芯片都有自己的特色。

所以这就要求BSP程序员对硬件、软件和操作系统都要有一定的了解。

本文介绍基于ARM体系的嵌入式应用系统初始化部分BSP的程序设计。

本文引用的源码全部是基于HMS320C7202芯片设计,并已成功运行。

1 ARM开发教程之初始化过程尽管各种嵌入式应用系统的结构及功能差别很大,但其系统初始化部分完成的操作有很大一部分是相似的。

嵌入式系统的启动流程如图1所示。

1.1 设置入口指针启动程序首先必须定义指针,而且整个应用程序只有一个入口指针。

一般地,程序在编译链接时将异常中断向量表链接在0地址处,并且作为整个程序入口点。

入口点代码如下:ENTRY(_start);开始1.2 ARM开发教程之设置异常中断向量表ARM要求中断向量表必须放置在从0开始、连续8×4字节的空间内。

各异常中断向量地址以及中断的算是优先级如表1:表1 各异常中断的中断向量地址以及中断的处理优先级中断向量地址异常中断类型异常中断模式优先级(6最低)0x0 复位特权模式(SVC)10x4 未定义中断未定义指令中止模式(Undef) 60x8 软件中断(SWI)特权模式(SVC)60x0c 指令预取中止中止模式50x10 数据访问中止中止模式20x14 保留未使用未使用0x18 外部中断请求(IRQ)外部中断(IRQ)模式40x1c 快速中断请求(FIQ)快速中断(FIQ)模式 3每当一个中断发生后,ARM处理器便强制把程序计数器(PC)指针置为向量表中对应中断类型的地址值。

嵌入式linux系统的启动流程

嵌入式linux系统的启动流程

嵌入式linux系统的启动流程
嵌入式Linux系统的启动流程一般包括以下几个步骤:
1.硬件初始化:首先会对硬件进行初始化,例如设置时钟、中
断控制等。

这一步骤通常是由硬件自身进行初始化,也受到系统的BIOS或Bootloader的控制。

2.Bootloader引导:接下来,系统会从存储介质(如闪存、SD
卡等)的Bootloader区域读取引导程序。

Bootloader是一段程序,可以从存储介质中加载内核镜像和根文件系统,它负责进行硬件初始化、进行引导选项的选择,以及加载内核到内存中。

3.Linux内核加载:Bootloader会将内核镜像从存储介质中加载到系统内存中。

内核镜像是包含操作系统核心的一个二进制文件,它由开发者编译并与设备硬件特定的驱动程序进行连接。

4.内核初始化:一旦内核被加载到内存中,系统会进入内核初
始化阶段。

在这个阶段,内核会初始化设备驱动程序、文件系统、网络协议栈等系统核心。

5.启动用户空间:在内核初始化完毕后,系统将启动第一个用
户空间进程(init进程)。

init进程会读取并解析配置文件(如
/etc/inittab)来决定如何启动其他系统服务和应用程序。

6.启动其他系统服务和应用程序:在用户空间启动后,init进
程会根据配置文件启动其他系统服务和应用程序。

这些服务和应用程序通常运行在用户空间,提供各种功能和服务。

以上是嵌入式Linux系统的基本启动流程,不同的嵌入式系统可能会有一些差异。

同时,一些特定的系统也可以添加其他的启动流程步骤,如初始化设备树、加载设备固件文件等。

嵌入式操作系统启动流程

嵌入式操作系统启动流程

1嵌入式操作系统启动流程1.在通电后,初始化硬件(bootrom)2.支持VxWorks与硬件驱动通信(Image的底层驱动)3.本质上是硬件驱动、初始化的合集;2研究BSP内容:1.系统image的生成与image的种类2.image的download下载过程3.系统的启动顺序与过程4.调试环境的配置及远端调试的方式与方法5.相应BSP设置文件的修改(网络,串口..)6.BSP各文件的构成与作用.7.要对系统底层驱动清晰,也就是对CPU及有关的硬件有所熟悉.要紧是32微处理器(上电启动过程, download image的方式方法,读写ROM,地址空间分配,MMU,寄存器,中断定义,..).参照硬件资料,多读一些源码会有所帮助.3BSP要紧文件目录的构成及要紧文件的作用:3.1目录target/config/All:这个目录下的文件是所有BSP文件共享的,不是特别需要不要更换里面的任何文件.configAll.h:缺省定义了所有VxWorks的设置.假如不用缺省的设置,可在BSP目录下的config.h文件中用#define或者#undef方式来更换设置.bootInit.c:在romInit.s后,完成Boot ROM的第二步初始化.程序从romInit.s中的romInit()跳到这个文件中的romStart().来执行必要的解压与ROM image的放置.bootConfig.c:完成Boot ROM image的初始化与操纵.usrConfig.c: VxWorks image的初始化代码.3.2目录target/config/comps/src:涉及系统核心的components,要紧由target/config/All中usrConfig.c中函数调用3.3目录target/config/bspname:包含系统或者硬件有关的BSP文件.MakefileREADMEBSP公布纪录,版本,总的文档config.hconfigNet.h网络驱动的要紧设置文件,要紧对END驱动设置.romInit.ssysALib.s汇编语言文件,程序员能够把自己的汇编函数放在这个文件里,在上层调用.VxWorks image的入口点_sysInit在这个文件里,是在RAM中执行的第一个函数.sysLib.c包含一些系统有关的函数例程,提供了一个board-level的接口,VxWorks与应用程序能够以system-indepent的方式生成.这个文件还能包含目录target/config/comps/src的驱动.sysScsi.c可选文件用于Scsi设备设置与初始化.sysSerial.c可选文件用于所有的串口设置与初始化.bootrom.hexASIC文件包含VxWorks Boot ROM代码VxWorks运行在目标机上,完整的,连结后的VxWorks二进制文件.VxWorks.sym完全的,连结后带有符号表的VxWorks二进制文件VxWorks.st完全的,连结后,standalone,带有符号表的VxWorks二进制文件4VxWorks Image4.1VxWorks images consist of:•Text segment---executable instruction.•Data segment---Initilized global and static varibles.•BSS.4.2分类与工作机理:Bootrom不是VxWorks Image,不参与讨论它本质上是一段Boot program,最少的系统初始化,要紧用于启动装载VxWorks image.通常有压缩与不压缩两种形式,如bootrom与boot_uncmp.与VxWorks image的区别在于一个Bootrom调用bootConfig.c,而VxWorks调用usrConfig.c.VxWorks 本质上分为两大类:1.Vxworks分为两大类:1)Uploaded images(通过网口、串口、硬盘、软盘、DOC、ROM中加载到RAM中执行的)vxWorks - basic Tornado, shell 与symbol table 在主机端vxWorks.st(文件很大)- 独立的image,包含shell与symbol table 在目标板运行2)ROM based images(直接烧入ROM的VxWorks):VxWorks_Rom类的Vxworks又分了两类:1)驻留的resident 2)不住留的1.不住留的ROM – Based VxWorks Image2.驻留的VxWorks_rom_resident2.说的再具体点:1)可下载的Vxworks image2)ROM中烧制的Image1.vxWorks_rom - Tornado in ROM,非压缩, 在RAM 中运行2.vxWorks.res_rom_nosym - Tornado in ROM, 非压缩,在ROM 中运行3.vxWorks.st_rom - Stand-alone in ROM, 压缩, RAM 中运行4.vxWorks.res_rom - Stand-alone in ROM, 非压缩, ROM 中运行3.VxWorks在存储介质中的存放方式5启动5.1启动概述1.Bootrom 的启动最少的系统初始化,要紧用于启动装载VxWorks image.通常有压缩与不压缩两种形式,如bootrom与boot_uncmp.与VxWorks image的区别在于一个Bootrom 调用bootConfig.c,而VxWorks调用usrConfig.c.文件romInit.s中的romInit()---->文件bootInit.c中的romStart()---->文件bootConfig.c中的usrInit()----->sysHwInit()----->usrKernelInit()----->KernelInit(usrRo ot,...)其中 /target/config/all/bootConfig.c是Boot ROM设置模块.用于通过网络加载VxWorks image.usrRoot()---->bootCmdLoop(void)命令行选择,或者autobooting----->bootLoad(pLine, &entry)加载模块到内存(网络,TFFS,TSFS...)----->netifAttach()---->go(entry)----->(entry)()从入口开始执行,不返回.•各个函数的要紧作用romInit()-----power up,disable interrupt,put boot type on thestack,clears caches.romStart()-----load Image Segments into RAM.usrInit()-----Interrupt lock out,save imformation about boot type,handle all the Initialization before the kernel is actually started,then starts the kernel execution to create an initial task usrRoot().This task completes the start up.sysHwInit()-----Interrup locked,Initializeshardware,registers,activation kernelKernelInit(usrRoot,...)-----•Initializes and starts the kernel.•Defines system memory partition.•Activates a task tUsrRoot to complete initalization.•Unlocks inierrupts.•Uses usrInit()stack.usrRoot()•初始化内存分区表(memory partition library)•初始化系统系统时钟(system clock)•初始化输入输出系统(I/O system)----可选•Create devices----可选•设置网络(Configure network)--------可选•激活WDB目标通信(Activate WDB agent)---------可选•调用程序(Activate application)2.VxWorks的启动1)Loadable VxWorks的启动a)使用Bootrom进行最小系统起动b)加载程序段、数据段、BBS段c)跳转到RAM中运行的VxWorks的启动(详见下面)2)VxWork_ROM的VxWorks启动1.ROM中运行的VxWorks的启动VxWorks在ROM中运行,即写入ROM中的VxWorks是非压缩的,不需要解压,系统直接跳到ROM的首地址,运行VxWorks.注意:ROM运行的VxWorks并不支持所有的主扳,应以主扳手册为准.文件romInit.s中的romInit()---->文件bootInit.c中的romStart()---->文件usrConfig.c中的usrInit()----->sysHwInit()----->usrKernelInit()----->KernelInit(usrRo ot,...)VxWorks在ROM中运行要紧是为了节约RAM空间,以便应用程序有更大的空间运行.只把VxWorks image的data段复制到RAM的LOCAL_LOW_ADRS, text部分留在ROM并在ROM中执行.ROM中运行的VxWorks缺点是运行速度慢.2.RAM中运行的VxWorks的启动VxWorks在RAM中运行,即写入ROM中的Boot或者VxWorks Image是压缩的,需要先解压copy所有的text与data到RAM的LOCAL_LOW_ADRS中,下面sysInit()要紧是初始化RAM用的,系统直接跳到RAM的首地址,运行VxWorksusrInit()前面不压缩,即romInit(),romStart()不能压缩.文件romInit.s中的romInit()---->文件bootInit.c中的romStart()---->sysaLib.s中的sysInit()---->文件usrConfig.c中的usrInit()----->sysHwInit()----->usrKernelInit()----->KernelInit(usrRo ot,...)RAM运行的Boot或者VxWorks image的text段或者data段会从ROM复制到RAM,在RAM中运行.其中usrRoot()是VxWorks启动的第一个任务,由它来初始化 driver,network等描述:romInit.s first execute in flash,minal initiliz,then jump to romStart.romStart()开始装载与解压image到RAM,sysaLib.s是在RAM中执行的第一个函数.。

arm版本linux系统的启动流程

arm版本linux系统的启动流程

arm版本linux系统的启动流程ARM架构是一种常见的处理器架构,被广泛应用于嵌入式设备和移动设备中。

在ARM版本的Linux系统中,启动流程是非常重要的,它决定了系统如何从开机到正常运行。

本文将详细介绍ARM版本Linux系统的启动流程。

一、引导加载程序(Bootloader)引导加载程序是系统启动的第一阶段,它位于系统的固化存储器中,比如ROM或Flash。

在ARM版本的Linux系统中,常用的引导加载程序有U-Boot和GRUB等。

引导加载程序的主要功能是加载内核镜像到内存中,并将控制权转交给内核。

二、内核初始化引导加载程序将内核镜像加载到内存后,控制权被转交给内核。

内核初始化是系统启动的第二阶段,它主要完成以下几个步骤:1. 设置异常向量表:ARM架构中,异常是指硬件产生的中断或故障,比如系统调用、中断请求等。

内核需要设置异常向量表,以便正确处理异常。

2. 初始化处理器:内核对处理器进行初始化,包括设置页表、启用缓存、初始化中断控制器等。

3. 启动第一个进程:内核创建第一个用户进程(一般是init进程),并将控制权转交给它。

init进程是系统中所有其他进程的父进程,负责系统的初始化工作。

三、设备树(Device Tree)设备树是ARM版本Linux系统中的一种机制,用于描述硬件设备的相关信息。

在内核初始化过程中,内核会解析设备树,并建立设备树对象,以便后续的设备驱动程序使用。

设备树描述了硬件设备的类型、地址、中断等信息,以及设备之间的连接关系。

它使得内核能够在运行时自动识别和配置硬件设备,大大提高了系统的可移植性和灵活性。

四、启动初始化(Init)启动初始化是系统启动的第三阶段,它是用户空间的第一个进程(init进程)接管系统控制权后的操作。

启动初始化主要完成以下几个任务:1. 挂载根文件系统:启动初始化会挂载根文件系统,使得用户可以访问文件系统中的文件和目录。

2. 加载系统服务:启动初始化会加载并启动系统服务,比如网络服务、日志服务、时间同步服务等。

嵌入式系统第七讲 嵌入式Linux系统启动分析

嵌入式系统第七讲 嵌入式Linux系统启动分析

嵌入式LINUX内核的版本控制 (2)
嵌入式Linux的版本号后面还会加一个后缀,如 “rmk4-mx1bsp0.3.6” ,该后缀往往表示针对某 个开发平台的补丁。几个常用的后缀:
– – –

rmk:表示由Russell King维护的ARM Linux; np:表示由Nicolas Pitre维护的基于StrongARM和 Xscale的ARM Linux; ac:表示由Alan Cox(Alan Cox是仅次于Linus的 Linux维护人员,主要负责网络部分和OSS等的维护 工作)维护的Linux代码; hh : 表 示 由 网 站 发 布 的 ARM Linux代码,主要是基于Xscale的,它包括工具链 、内核补丁、嵌入式图形系统等。
Bootloader空间位置
在flash中的典型空间分配情况
BootLoader 的主要功能(1/2)
初始化系统在启动阶段必需的硬件设备; 准备后续软件系统(如操作系统)运行所需 的软件环境,如复制操作系统内核代码到 RAM中等。 向内核传递启动参数; [可选]配置系统各种参数;
BootLoader 的主要功能(2/2)
BootLoader的特点
BootLoader是操作系统内核运行前的核心程 序,它具有如下特点: 代码量大; 由C语言写成,大多数时候需要嵌入式汇编 语言; 运行于SDRAM等随机存储器 由于它是启动内核前运行的最后一个程序, 它必须把控制权交给内核,因此它最后是一 条跳转到系统内核的语句。
嵌入式LINUX的内核源代码结构 (1)


COPYING
– GPL版权申明。
CREDITS
– 光荣榜。对Linux做出过重大贡献的人员信息。

QNX实时操作系统学习笔记之嵌入式系统

QNX实时操作系统学习笔记之嵌入式系统

QNX实时操作系统学习笔记之嵌入式系统(一)(2011-03-21 08:31:28)转载一、开发嵌入式系统概述1.简介本节将从整体的角度来介绍开发一个完整的基于Neutrino嵌入式系统的步骤,首先,将会看运行一个Neutrino系统所需要的部件。

接下来会看这些部件和他们如何操作,最后,将会学习配置某些部分时要完成的步骤。

从软件的角度,当系统启动时下列流程将会发生:(1)处理器开始从复位向量执行代码。

初始化程序装载(IPL)会将OS镜像装载并传递控制到镜像中的startup程序。

(2)startup程序配置系统并传送控制到neutrino 微内核和进程管理器(procnto)。

(3)procnto模块装载附加的驱动和应用程序。

2.IPL的角色软件执行的第一步便是装载OS镜像。

这是由IPL来完成的。

IPL的初始化工作是以最简的方式配置硬件来产生一个允许startup,进而是neutrino微内核程序执行的环境。

特别地,这个工作至少包含以下几步:(1)从复位向量开始执行;(2)配置存储控制器,这可能会包含配置芯片选择和(或)PCI控制器(Peripheral Component Interconnect,一种由英特尔(Intel)公司1991年推出的用于定义局部总线的标准)。

(3)配置时钟。

(4)设置一个堆栈来允许IPL库执行OS认证和启动(镜像下载、扫描、启动、jump)3.IPL的热启动和冷启动IPL有两种类型:热启动和冷启动。

热启动IPL是由ROM监视器或BIOS激活,硬件和处理器配置的某些部分已经被启动。

另一方面,冷启动IPL则是在任何部分都没有被配置或初始化——CPU和硬件刚刚被复位。

一般来说,在热启动中需要完成的工作都是在冷启动IPL中的子集。

在最后我们将讨论IPL的责任,并描述在镜像的第一个部件启动前全部就绪的状态。

根据目标的设计,要完成的步骤可能从0(例如,在一个带有ROM监视器或BIOS的标准平台上运行,并且已经通过disk或network boot完成了IPL热启动;引导ROM已经完成了下面描述的工作)到很多步(例如,一个不带有firmware[泛指直接控制硬件的软件,也指固化在硬件中用来控制硬件的软件,比如BIOS]的嵌入式系统,镜像是在一个特定的硬件中存储)。

ARM的启动分析详解及应用

ARM的启动分析详解及应用

ARM的启动分析详解及应用ARM是一款广泛应用于嵌入式系统和移动设备的处理器架构。

在ARM的启动过程中,主要涉及到硬件初始化、加载引导程序和启动操作系统等步骤。

下面将对ARM的启动过程进行详细分析,并讨论其在实际应用中的应用。

硬件初始化:在ARM的启动过程中,首先需要对硬件进行初始化。

这包括对中央处理器(CPU)、存储器、外设等进行初始化操作。

例如,初始化CPU的控制和配置寄存器,设置存储器的访问模式和权限等。

硬件初始化的目的是确保系统处于一个稳定的状态,为后续的操作打下基础。

加载引导程序:引导程序是ARM启动的关键部分,它负责初始化系统环境和加载操作系统的镜像文件。

引导程序通常位于启动设备的引导扇区或者特定的存储器地址中。

在ARM中,引导程序可以是U-Boot、Das U-Boot或是其他自定义的引导程序。

加载引导程序的方式可以是通过串口、以太网或者其他类似的介质。

引导程序的主要功能是初始化设备和外设,配置内存和中断控制器等。

它会加载操作系统的镜像文件到内存中,并跳转到操作系统的起始地址,从而将控制权交给操作系统。

启动操作系统:在引导程序加载并跳转到操作系统的起始地址后,操作系统开始运行。

操作系统负责管理硬件资源、提供系统服务和支持应用程序的运行。

常见的ARM操作系统有Linux、Android等。

ARM的启动分析步骤在实际应用中具有重要的意义。

首先,通过硬件初始化可以确保系统处于一个稳定的状态,避免因为硬件问题导致系统崩溃或运行不正常。

其次,加载引导程序可以实现自定义的系统启动流程和初始化操作,满足特定应用需求。

最后,启动操作系统可以为用户提供高效、稳定的系统环境,并支持各种应用程序的运行。

在实际的应用中,ARM的启动分析步骤具有广泛的应用。

例如,嵌入式系统可以通过自定义的引导程序来实现特定的启动流程和初始化操作,以满足设备的需求。

移动设备则可以通过加载引导程序和启动操作系统来提供稳定的系统环境和良好的用户体验。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1 什么是BSP:1. 在通电后, 初始化硬件( bootrom )2. 支持VxWorks和硬件驱动通信(Image的底层驱动)3. 本质上是硬件驱动、初始化的合集;2 研究BSP内容:1. 系统image的生成和image的种类2. image的download 下载过程3. 系统的启动顺序和过程4. 调试环境的配置及远端调试的方式和方法5. 相应BSP设置文件的修改(网络,串口..)6. BSP各文件的组成和作用.7. 要对系统底层驱动清楚,也就是对CPU及相关的硬件有所了解•主要是32微处理器(上电启动过程,download image的方式方法,读写ROM地址空间分配,MMU寄存器,中断定义,..).参照硬件资料,多读一些源码会有所帮助.3 BSP主要文件目录的组成及主要文件的作用:3.1 目录target/config/All:这个目录下的文件是所有BSP文件共享的,不是特别需要不要更改里面的任何文件.configAll.h:缺省定义了所有VxWorks的设置.如果不用缺省的设置,可在BSP目录下的config.h文件中用#define或#口门def方式来更改设置.bootInit.c:在romlnit.s 后,完成Boot ROM的第二步初始化.程序从romlnit.s 中的romlnit() 跳到这个文件中的romStart().来执行必要的解压和ROM image的放置.bootConfig.c: 完成Boot ROM image的初始化和控制.usrConfig.c: VxWorks image 的初始化代码.3.2 目录target/config/comps/src:涉及系统核心的components, 主要由target/config/All 中usrConfig.c 中函数调用3.3 目录target/config/bspname:包含系统或硬件相关的BSP文件.一些命令行控制images 的生成, 参见READMEBSP发布纪录,版本,总的文档config.h包括所有涉及CPU主板的设置及定义(includes,definations), 参见configNet.h网络驱动的主要设置文件,主要对END驱动设置.romInit.s汇编语言文件,是VxWorks Boot ROM和ROM based image的入口,参见sysALib.s汇编语言文件,程序员可以把自己的汇编函数放在这个文件里,在上层调用.VxWorks image 的入口点_syslnit在这个文件里,是在RAM中执行的第一个函数.sysLib.c包含一些系统相关的函数例程, 提供了一个board-level 的接口,VxWorks 和应用程序可以以system-indepent 的方式生成. 这个文件还能包含目录target/config/comps/src 的驱动.sysScsi.c可选文件用于Scsi 设备设置和初始化.sysSerial.c可选文件用于所有的串口设置和初始化.bootrom.hexASIC文件包含VxWorks Boot ROM代码VxWorks运行在目标机上,完整的,连结后的VxWorks二进制文件.VxWorks.sym完全的,连结后带有符号表的VxWorks二进制文件完全的,连结后,standalone,带有符号表的VxWorks二进制文件4 VxWorks Image4.1 VxWorks images con sist of:« Text segment---executable instruction.« Data segment---In itilized global and static varibles.• BSS.4.2分类和工作机理:Bootrom不是VxWorks Image,不参与讨论它本质上是一段Boot program,最少的系统初始化,主要用于启动装载VxWorks image.一般有压缩和不压缩两种形式,如bootrom 和boot_uncmp.与VxWorks image 的区别在于一个Bootrom 调用bootConfig.c, 而VxWorks 调用usrConfig.c.VxWorks本质上分为两大类:1. Vxworks分为两大类:1)Uploaded images(通过网口、串口、硬盘、软盘、DOC、ROM中加载到RAM 中执行的)vxWorks - basic Torn ado, shell 和symbol table 在主机端vxWorks.st (文件很大)-独立的image,包含shell和symbol table在目标板运行2)ROM based images直接烧入ROM 的VxWorks):VxWorks_Rom类的Vxworks又分了两类:1)驻留的resident 2不住留的1. 不住留的ROM -Based VxWorks Image2. 驻留的VxWorks_rom_resident2. 说的再具体点:1)可下载的Vxworks image2) ROM中烧制的Image1. vxWorks_rom - Tornado in ROM,非压缩,在RAM 中运行2. vxWorks.res_rom_nosym - Tornado in ROM,非压缩,在ROM 中运行3. vxWorks.st_rom - Stand-alone in ROM,压缩,RAM 中运行4. vxWorks.res_rom - Stand-alone in ROM,非压缩,ROM 中运行3. VxWorks在存储介质中的存放方式5 启动5.1启动概述1. Bootrom的启动最少的系统初始化,主要用于启动装载VxWorksimage. —般有压缩和不压缩两种形式, 如bootrom 和boot_uncmp.与VxWorksimage 的区别在于一个Bootrom 调用bootConfig.c, 而VxWorks调用usrConfig.c.文件romInit.s 中的romInit()----> 文件bootlnit.c 中的romStart()----> 文件bootCo nfig.c 中的usrInit()——>sysHwlnit() >usrKernellnit()——>Ker nell nit(usrRoot,...)其中/target/config/all/bootConfig.c 是Boot ROM设置模块.用于通过网络加载VxWorks image.usrRoot()---->bootCmdLoop(void) 命令行选择,或autobooting——>bootLoad(pLine, &entry) 加载模块到内存(网络,TFFS,TSFS...)——>netifAttach()---->go(entry)——>(en try)() 从入口开始执行,不返回.•各个函数的主要作用romI nit() ——power up,disable in terrupt,put boot type on the stack,clears caches. romStart() ----- load Image Segments into RAM.usrInit() ——Interrupt lock out,save imformation about boot type,handle all the Initialization before the kernel is actually started,then starts the kernel execution to create an initial task usrRoot().This task completes the start up.sysHwInit() ------ Interrup locked,Initializes hardware,registers,activationkernelKernelInit(usrRoot,...) ---*In itializes and starts the kern el.« Defines system memory partiti on.*Activates a task tUsrRoot to complete initalization.*Uni ocks ini errupts.*Uses usrI nit()stack.usrRoot()*初始化内存分区表(memory partition library)*初始化系统系统时钟(system clock)*初始化输入输出系统(I/O system)---- 可选Create devices---- 可选设置网络(Configure network) -------- 可选激活WDE目标通信(Activate WDB agent) ------ 可选调用程序(Activate application)2.VxWorks 的启动1) Loadable VxWorks 的启动a) 使用Bootrom 进行最小系统起动b) 加载程序段、数据段、BBS 段c) 跳转到RAM 中运行的VxWorks 的启动(详见下面)2) VxWork_ROM 的VxWorks 启动1. ROM 中运行的VxWorks 的启动VxWorks在ROM中运行,即写入ROM中的VxWorks是非压缩的,不需要解压,系统直接跳到ROM勺首地址,运行VxWorks.注意:ROM运行的VxWorks并不支持所有的主扳,应以主扳手册为准.文件romInit.s 中的romInit() ----- > 文件bootInit.c 中的romStart() ----------- > 文件usrConfig.c 中的usrInit() ---- >sysHwInit() ---- >usrKernelInit() ---- >KernelInit(usrRoot,...)VxWorks在ROM中运行主要是为了节省RAM空间,以便应用程序有更大的空间运行. 只把VxWorksimage 的data 段复制到RAM勺LOCAL_LOW_ADR&t 部分留在ROM并在ROM 中执行.ROM中运行的VxWorks缺点是运行速度慢.2. RAM 中运行的VxWorks 的启动VxWorks在RAM中运行,即写入ROM中的Boot或VxWorksimage是压缩的,需要先解压copy 所有的text 和data 到RAM勺LOCAL_LOW_AD中S下面sysinit() 主要是初始化RAM 用的,系统直接跳到RAM勺首地址,运行VxWorksusrinit() 前面不压缩, 即rominit(),romStart() 不能压缩.文件rominit.s 中的rominit() ------ > 文件bootinit.c 中的romStart() ----------- >sysaLib.s 中的sysinit() -- > 文件usrConfig.c 中的usrinit() ---- >sysHwinit() ---- >usrKernelinit() ----- >Kernelinit(usrRoot,...)RAM运行的Boot 或VxWorks image 的text 段或data 段会从ROMS制到RAM在RAM 中运行.其中usrRoot()是VxWorks启动的第一个任务,由它来初始化driver,network 等描述: rominit.s first execute in flash,minal initiliz,then jump to romStart.romStart() 开始装载和解压image到RAM,sysaLib.s是在RAM中执行的第一个函数。

相关文档
最新文档