QNX的启动

一、 系统启动

系统启动时会将 CPU 重置 (Reset) ,被重置后 CPU 会执行重置 Vector 中的代码。在 X86 平台中通常都是 BIOS ,在其他平台上可以使 ROM 或直接跳至 IPL BIOS ROM 执行后通常跳至 IPL(Initial Program Load) IPL 将启动镜像复制到内存中,并跳至启动 (Startup) 。启动代码会初始化硬件,并为内核的启动收集硬件信息。然后加载并启动 procnto( 内核和进程管理器 ) IPL startup 通常都是 BSP(Board Support Package) 的一部分。 Procnto 启动后会执行启动脚本 (boot script) ,启动脚本控制具体的执行环境和第三方程序的启动。

二、 加载 Neutrino 镜像

当选择了一个 QNX 的分区汇, Boot Loader(OS Loader) 会启动并加载系统的核心。它是预付有文件系统的类型的。

1、 Power-safe 文件系统

Power-safe 文件系统中的 Boot Loader 会确认文件系统,并查找 .boot 目录下的所有可用的系统核心文件。如果 .boot 目录下只有一个可用的核心文件,就会立即加载这个核心,否则的回就会等个 3 4 秒让选择合适的核心文件。

可以通过命令 [mkqnx6fs -B] 来更新分区中的 Boot Loader ,而不影响分区中的其他内容。如果一个 512byte 块的分区不能作为启动分区,因为他的 Boot Loader 只有 128KB 。而一个 1KB ( 默认 ) 它的 Boot Loader 最大可以 1GB

2、 QNX4 文件系统

QNX4 文件系统在启动的时候会显示 [Hit Esc for .altboot] ,如果让它超时,加载器就会加载 /.boot ,如果输入 Escape 就会加载 /.altboot 。这两个核心的区别是 /.boot DMA 模式加载,而 /.altboot 不是。

三、 Diskboot

diskboot 的作用

    启动 slogger

    启动 seedres 来读取 PnP BIOS 并且填充 procnto 资源数据

    启动 pci-bios 来支持 PCI BIOS

    启动 devb-eide 或其他磁盘驱动

    查询需要 mount 的文件系统

    可选:其松 fesh[Fat embedded shell]

    启动控制台驱动 [devc-con-hid] [devc-con]

    最后执行 /etc/system/sysinit

1 /etc/system/sysinit

/etc/system/sysinit 文件是启动整个系统服务的脚本文件。它负责启动:

    如果 slogger 没有启动,就启动 slogger

    启动 pipe

    启动 mqueue

    如果是安装后的第一次启动就会执行 /etc/rc.d/rc.setup-once ,它会创建目录和 swap 文件

    根据 /etc/TIMEZONE 设定时区。

    如果 /etc/rc.d/rc.rtc 存在并能够执行,就执行它来设定时间 (realtime clock)

    设定主机名 (HostName) 。通常从 hostname 命令中取得主机名,如果 不成功会从 /etc/HOSTNAME 中加载

    根据 /etc/rc.d/rc.devices 来遍历设备,并加载相应驱动

    如果 /etc/system/config/useqnet 存在并且 io-pkt 已经运行,就配置网络环境

    执行启动脚本 /etc/rc.d/rc.sysinit

    如果启动失败 sysinit 就会试图启动一个 sh ,如果再失败就会试图启动一个 fesh

四、 设备遍历 [Device enumeration]

QNX 会通过 /etc/rc.d/rc.devices 脚本来启动 enum-devices( 设备管理器 ) ,来加载所有已知设备并启动对应驱动。

五、  

六、  

七、  

 

 

你可能感兴趣的:(Linux,& QNX)