当前位置: 首页 > news >正文

QNX Neutrino 系统启动序列架构

概述

QNX Neutrino 的启动过程由一系列面向任务的阶段组成,每个阶段由特定的组件负责处理。

这些核心任务包括:

  1. 操作系统必须从非易失性存储器中加载。
  2. 操作系统必须初始化自身,以及所有设备驱动和外设。
  3. HMI(人机界面)必须加载、初始化并开始运行。
  4. 应用软件必须加载、初始化并开始运行。

为确保软硬件组件在需要时已初始化就绪,系统架构师或设计者需要仔细规划每个阶段。QNX 提供了多种机制来满足特定的启动需求。本文将逐步介绍整个启动序列,并提供各阶段的优化技术。

下图展示了 QNX Neutrino OS 启动序列的各个阶段:

系统通电后,PLLIPLStartup program依次运行,将基础系统启动起来。基础系统主要是内核或核心操作系统。随后,Boot script运行以加载设备驱动、启动服务和应用。最后,主系统启动,包括 HMI 等主要应用的启动。

各启动阶段按执行顺序描述如下。


1. PLL(锁相环)

PLL 指处理器上电后到第一条指令开始执行之间的等待时间。大多数 CPU 都有一个 PLL,将主晶振频率分频为芯片使用的所有定时器。PLL 稳定到所需频率的时间通常是芯片启动时间中最长的部分。

PLL 阶段与操作系统无关,因 CPU 而异;在某些情况下,最长可能达到32 毫秒。请查阅硬件平台用户手册获取精确时序。


2. IPL(初始程序加载器)

QNX 提供了一个标准的最小化 IPL,执行配置内存控制器、初始化片选和/或 PCI 控制器、配置其他必要的 CPU 设置等最少步骤。这些步骤完成后,IPL 将Startup program从 IFS(Image Filesystem,镜像文件系统)复制到 RAM 中,并跳转过去继续执行。

IFS 包含 OS 镜像,由 startup program、内核、boot script 以及系统所需的其他驱动、应用程序和二进制文件组成。由于你可以控制 IFS 的内容,复制阶段的时间会有所不同,但它通常是内核启动过程中最长的部分。在极端情况下,如果系统包含非常大的镜像且没有 IFS 之外的文件系统,此阶段可能耗时较长(10 秒或更长)。

不过,你可以通过减小 IFS 体积来间接控制此阶段的长度。要添加、删除或配置 IFS 中存储的文件,可以编辑 buildfile 中的script块,或在 IDE 中使用 QNX System Builder。你还可以压缩镜像以减小 IFS 体积(代价是额外的解压缩开销,可以通过在 IPL 中启用缓存来加速)。

通常,bootloader 至少执行6 毫秒后才开始加载 OS 镜像。实际时间取决于 CPU 架构、板卡最小配置需求以及 bootloader 将控制权移交给 startup program 之前所做的操作。

某些板卡使用其他 bootloader(如 U-Boot)。这些 bootloader 不如 QNX IPL 快,因为 IPL 专门针对 QNX 系统进行了优化。建议用 IPL 替换你的 bootloader。

更多信息请参阅《Building Embedded Systems》中的 Initial Program Loaders (IPLs) 章节。


3. Startup Program(启动程序)

可引导 OS 镜像中的第一个程序是 startup program,其目的是:

  1. 初始化硬件
  2. 初始化系统页面(System Page)
  3. 初始化 callouts
  4. 加载内核(procntoprocnto-smp)并将控制权转交给它

如果 OS 镜像尚未到达其在 RAM 中的最终位置,startup program 会将其复制过去,并在需要时进行解压缩。

启动过程中,内核会初始化 MMU(内存管理单元),创建用于处理分页、进程和异常的数据结构,并使能中断。此阶段完成后,内核完全可用,可以开始从 boot script 加载和运行用户进程。


4. Boot Script(启动脚本)

每块板卡都有一组不同的脚本来支持不同的配置。buildfile 中的script块可让你指定要启动的驱动和应用及其启动顺序。

你可以使用 boot script 启动需要在早期运行的服务和工具(例如,播放提示音、显示闪屏或显示摄像头的视频流),或者需要额外加载时间的服务(例如,磁盘驱动)。在可能的情况下,这些进程应以后台方式启动,以优化并行性并在系统所有组件启动完成前保持 CPU 的最高利用率。

限制 boot script 的内容也很重要,因为它包含在 IFS 中,添加的内容会增加 IFS 体积和加载时间。以下是一些可能需要在 boot script 中加载的内容:

  • Screen 和摄像头服务
  • 音频服务和早期提示音工具
  • 磁盘驱动(然后挂载磁盘)
  • 调试工具,如slogger2dumper
  • BSP 驱动,如串口驱动、实时时钟和其他硬件工具
  • SLM和系统调试控制台

启动脚本最佳实践

  • 尽量使用后台启动(&)以利用 CPU 并行性
  • 避免在 boot script 中包含过多内容,防止 IFS 膨胀
  • 需要快速响应的服务优先启动

5. SLM(系统启动与监视器)

SLM 是一个用于启动系统所需进程的服务。通常,某些进程和应用不需要立即启动,例如网络连接(io-pkt),或者某些进程需要在主应用之前启动,例如 HMI。

在此阶段,SLM 会等待进一步的指令。SLM 由一组配置文件控制:

  • slm-config-all.xml— 全局配置
  • slm-config-platform.xml— 平台特定配置

这些文件告诉 SLM 要启动哪些模块,以及模块内部或模块之间是否存在依赖关系。

更多信息请参阅 Utilities Reference 中的 System launch and monitor (SLM) 章节。


启动时间线总结

PLL → IPL → Startup Program → Boot Script → SLM │ │ │ │ │ │ 配置 │ 加载 │ 初始化硬件 │ 启动驱动 │ 启动应用 │ 时钟 │ 镜像 │ 加载内核 │ 和服务 │ 和 HMI
阶段主要工作关键优化点
PLLCPU 时钟稳定CPU 硬件决定,不可控
IPL配置内存/PCI,复制 IFS 到 RAM减小 IFS 体积,启用压缩
Startup硬件初始化,加载内核体积已很小(~45KB),优化空间有限
Boot Script启动驱动和服务后台启动,限制内容
SLM启动应用和 HMI配置文件管理依赖关系
http://www.jsqmd.com/news/945959/

相关文章:

  • 毕业设计救星:手把手教你用Verilog点亮0.96寸OLED(附完整代码与调试心得)
  • 告别‘狼来了’:用Python模拟AWGN信道下的隐蔽通信与能量检测(附代码)
  • Windows系统优化神器:Chris Titus Tech WinUtil完全指南,告别繁琐配置!
  • 别再到处找教程了!JavaCV音视频开发保姆级避坑指南(附完整依赖配置)
  • 从流水灯代码反推学习:51单片机中C语言的位操作(左移、右移、取反)到底怎么用?
  • Surface Pro4拆机换SSD实战:避开单/双面固态的坑,附无损数据迁移教程
  • 从流水灯理解C51变量与位操作:为什么`P0 = ~(0x01 << cnt)`能点亮LED?
  • 基于业务设计的人才盘点落地与实操
  • 免费FDTD电磁仿真软件Meep完全指南:从零基础到精通光子学模拟
  • 用STM32和阻抗分析搞定电子设计竞赛C题:手把手教你做线路故障检测装置
  • 给某一个应用程序开发插件有什么统一的规律可循吗?
  • 利用快马ai平台,十分钟快速生成windows桌面应用原型
  • 【RocketMQ】阿里万亿级消息中间件MQ保姆级教程
  • 2026年现阶段南京耐磨胶粘石生产厂家联系方式与综合选型指南 - 2026年企业资讯
  • FPGA驱动0.96寸OLED屏:从SPI时序到状态机设计的避坑指南
  • 从STEP到STL:搞3D打印和模型分享,你真的懂这些CAD格式的‘潜规则’吗?
  • OpenCV-Python实战:手把手教你用滚动条做一个RGB调色板,理解颜色混合原理
  • SX1261/1262 LoRa模块功耗实测与优化指南:从寄存器配置到电池续航翻倍
  • 别再只调参数了!Simulink模块的‘隐藏属性’:回调、注释与优先级实战指南
  • 别再只当缓冲器用了!AD8606运放的倍乘电路设计,教你玩转单电源信号放大
  • 从棒材到锻件:深度解析17-4PH不锈钢国内供应链 - 品牌2026
  • VOSviewer三大视图(网络/覆盖/密度)到底怎么看?一篇讲清图谱背后的隐藏信息
  • 从波形反标失败到成功出功耗报告:手把手解决PTPX读FSDB和Link Library的那些坑
  • 别再手动找App了!保姆级教程:利用SAP官方Fiori Apps Library精准定位并配置‘管理银行’磁贴
  • 别再只会用LM358了!用AD8606做个信号跟随与放大模块,实测性能对比
  • 2026年工业CRM选型:14大品牌横评
  • 基于STM32F10x与AD9910的400MHz DDS波形源码包,含扫频控制和RAM模式方波生成
  • 保姆级教程:用ESP8266 AT固件+串口助手,5分钟搞定OneNET MQTT设备上线(附固件下载与避坑指南)
  • 基于 GPU 共享与多租户隔离:云原生多模型负载均衡与应急容灾架构设计
  • STM32F407 SPI实战:从CubeMX配置到驱动OLED屏幕(含DMA传输避坑指南)