QNX如何构建嵌入式系统概述

QNX系统启动过程:

1.处理器从复位向量开始执行,然后内部程序加载器(IPL)加载系统镜像,并且把控制权交给镜像中的startup启动程序。

2.startup启动程序配置系统,并把控制权交给微内核和进程管理模块。

3.进程管理模块加载其他驱动和应用程序。

 

IPL的作用:

IPL主要负责加载系统镜像,首先简单配置硬件环境以便运行启动程序和微内核,这个过程至少包含以下步骤:

1、从复位向量启动执行

2、配置内存控制器,可能包含片选和PCI控制器

3、配置时钟

4、设置栈以便执行系统验证和设置(镜像下载,扫描启动和跳转)

        一般来说IPL分为冷启动IPL和热启动IPL两种通用类型,对于热启动IPL一些系统配置已经完成,而冷启动IPL需要从头进行

所有的配置,所以热启动IPL的操作是冷启动IPL操作的子集。

 

Startup启动程序的作用:

        系统启动的第二部是配置处理器和硬件,加载系统资源并且启动操作系统,这一部是由startup启动程序完成的。当IPL做了最小

的系统配置让startup启动程序可以工作后,startup启动程序完成所有的配置。为了保持Neutrino内核尽量可配置化,让启动程序可以

配置基本时钟、中断控制器、缓冲控制器等等, 也可以提供内核调用的代码片段来提供硬件相关的功能。例如当一个硬件中断被触发,一些代码必须判定中断源,而一些代码可以清除中断源。

          注意启动程序并不配置类似串口波特率,网络设备等一类设备,这些留给驱动自行解决。一旦西东代码完成初始化并且把系统信息放置在系统可以访问的页区域,启动代码将控制权交给内核和进程管理器,由它们进行下一步的加载。

归纳起来启动代码需要做如下事情:

1、根据需要拷贝和解压系统映像。

2、配置硬件

3、决定系统配置

4、启动内核

根据需要拷贝和解压系统映像

         如果映像不是所有都放在RAM中了,启动代码需要把它拷贝过来。如果镜像是压缩的,启动代码需要自动解压,但是压缩是可选的,你也可以不用压缩,那就免去了解压的过程。

配置硬件

        主要是进行最小化配置,并且决定系统配置,具体操作和硬件平台相关。

决定系统配置

        你可能想要在启动时动态决定配置信息,这部分信息需要启动程序存储在一个精心定义的结构中,以便操作系统启动后可以读取它,众所周知的时系统页区,这写数据结构包含以下信息:

内存配置  硬件设备配置  处理器类型  时间信息

 

建立标注

        为了使内核尽可能的具有可移植性,启动代码有必要建立一定数量的标注,当你写程序时候,不是所有标注都需要,这里通过库来提供其中的一些, Neutrino 可以提供下面标注的功能:

调试接口 时钟/定时器接口 中断控制接口 缓冲控制接口 电源管理 和杂项

 

启动系统

       启动代码的最后步骤是启动操作系统。

启动库

       上面描述了启动过程中的很多工作,QNX提供了一些通用启动程序的源码还创建了可以实现大部分功能的启动库。如果使用QNX已经支持的平台,就很容易了,这里的工作都已经做好。

可以通过下列途径找出QNX当前支持的处理器和开发板:

板级支持 bsp_working_dir/src/hardware/startup/boards

文档startup-* 入口

如果你用的不是标准系统,可以参考和你系统最接近的例子进行修改。

 

你可能感兴趣的:(QNX)