QNX的boot启动方式分析

来源:互联网 发布:软件测试自动化脚本 编辑:程序博客网 时间:2024/06/05 14:11



锋影

e-mail:174176320@qq.com


一、 系统启动

系统启动时会将 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( 设备管理器 ) ,来加载所有已知设备并启动对应驱动。

锋影

e-mail:174176320@qq.com


原创粉丝点击