QNX是加拿大黑莓公司的一款商业版的微内核实时操作系统。因此首先要清楚知道QNX的任务调度机制,一种优先级抢占的任务调度机制,在同优先级的情况下又有三种调度机制可供灵活选择:1.FIFO 2.时间片轮询调度 3.适应式调度。除此之外,还需要了解QNX的一个特色:动态时间分区(Adaptive Partitioning).
知道微内核的概念就好理解QNX了:除了Microkernel做内核存在外,其他任何功能模块(包括进程管理)都作为程序存在。
因此QNX启动时,先加载IPL(Initial Program Loader),完成必要的硬件初始化(CPU存储控制器、存储芯片、),然后复制拷贝系统镜像,引导系统启动。
然后QNX进入 startup程序,完成所有硬件初始化配置,如定时器 、时钟频率、中断控制器、缓存控制器等,但不包括配置串口波特率之类的东西。它也不会初始化标准周边设备,例如以太网控制器或EIDE硬件disk控制器——这些都留给驱动稍后启动以后来完成。
startup程序完成系统初始化后,把系统信息存放在系统页,就把控制权交给内核,内核进而启动procnto程序,一个进程管理程序。
其中的关键是构建Buildfile。通常一个嵌入式系统需要一个可启动的操作系统映象文件(OS Image)。对于基于QNX的嵌入式一个应用系统,就是根据所选择的CPU类型以及应用程序所需要的操作系统模块来定制嵌入式系统。构建Buildfile的过程就是配置操作系统映象的过程。简单来说Buildfile是一个产生映象文件所需遵守的一组规则、准则。Buildfile由三部分组成,其结构如下:
l bootstrap script(启动引导脚本)
l startup script(启动脚本)
l file list(文件列表)
1.引导脚本
不同的CPU其启动的方式不同,相应的启动引导程序也就不同。启动引导脚本bootstrap script的作用就是配置和CPU相适应的微内核。一个典型的引导脚本如下:
[image=0x10800000]
[virtual=armle-v7,raw +compress] .bootstrap = {
startup-imx6x-smart-device -v -W
PATH=/proc/boot procnto-smp-instr -ae
}
在这个例子中:
image=0x10800000-------->Imaged的加载地址;
virtual=armle-v7 -------->CPU类型
raw -------->产生Image的格式,我这里最后生成的就是 ifs-mx6q-sabresmart.raw
+compress -------->Image是否压缩
.bootstrap -------->固定名称,说明是一个启动脚本
startup-imx6x-smart-device-------->启动startup程序
PATH=/proc/boot --------&