当前位置:   article > 正文

QNX的深度嵌入过程_qnx .bootstrap

qnx .bootstrap

1.1           QNX目标系统嵌入

利用QNX的模块性和和可裁剪性,其嵌入过程一般是:

构建Buildfile -> 编译buildfile生成系统映象文件 -> 启动目标系统 ->嵌入式系统软件设计。

其中的关键是构建Buildfile[19]。通常一个嵌入式系统需要一个可启动的操作系统映象文件(OS Image)。对于基于QNX的嵌入式一个应用系统,就是根据所选择的CPU类型以及应用程序所需要的操作系统模块来定制嵌入式系统。构建Buildfile的过程就是配置操作系统映象的过程。简单来说Buildfile是一个产生映象文件所需遵守的一组规则、准则。Buildfile由三部分组成,其结构如下:

l        bootstrap script(启动引导脚本)

l        startup script启动脚本

l        file list文件列表

1.1.1  启动引导脚本(bootstrap script

不同的CPU其启动的方式不同相应的启动引导程序也就不同。启动引导脚本bootstrap script的作用就是配置和CPU相适应的微内核。一个典型的启动引导脚本如下:

[virtual=x86,bios +compress] .bootstrap = {

startup-bios -s 64k -D 8250.3f 8.57600 -A

PATH=/proc/boot procnto

}

在这个例子中,第一行说明它是一个启动引导文件。其中“virtual” 表明该Buildfile将构造一个与启动时产生的虚拟地址空间相对应的启动映象。关键词“x86bios” 则分别指处理器(x86)和机器类型(通过bios启动)。而“+compress”使得映象文件被压缩,以产生更小的映象文件。startup-bios是运行于具有BIOSPC兼容系统的可执行程序,主要负责利用BIOS检测PC硬件资源,在这里主要是提取映象,将其置于RAM的相应位置,做基本的配置并运行内核。该例中“-s 64k”表明复制ROM中第一段64k视频BIOSRAM使其更快的执行,即所谓的ROM BIOS映射。第二项参数表明以57600波特率打开第一个串口作为一个调试通道,其调试输出可以在另一台通过计算机数据传输线(null modem cable)连接的PC上捕捉到。最后一项参数则是实时系统中比较典型的情形,其作用是在任何异常内核终止后系统均立即重启动。“PATH=/proc/boot” 确定了PATH环境变量。“procnto” 是微内核和进程管理器,包括QNX 6 微内核,进程管理,内存管理以及路径名管理,每个利用mkifs工具的可启动映象都必须具有procnto。需要注意的是在bootstrap中,第一个可执行程序必须是startup-*,而最后一个必须是procnto

1.1.2  启动脚本(startup script

启动脚本是在进程管理启动后的一系列将要被执行的命令列表。一个简单的script如下:

[+script] .script = {

devc-con &

reopen /dev/con

+session] sh

}

可以在这里进行配置网络,设置显示卡等操作。通常我们自己编写的需要开机自动执行的程序也放在这里,详细例子见开发案例。

1.1.3  文件列表file list

文件列表是上面的系统程序和用户程序执行所必须的一些文件列表尤其是一些共享库。由于用户程序是用C语言开发的,所以必须至少包括一个标准C共享库。例如(”后的内容为注释)

include the C shared library

libc.so

create a symlink called ldqnx.so.2 to it

[type=link] /usr/lib/ldqnx.so.2=/proc/boot/libc.so

其中[type=link]行是用一个ldqnx.so.2重新定位libc.so。如果不知道在映象文件中都是需要哪些共享库,可以利用“objdump utility实用程序)来显示相关的需求信息。假如我们用到了ping命令,可以在终端执行:

objdump -x ‘which ping’ | grep NEEDED

回车,将显示信息:

objdump: /usr/bin/ping: no symbols

NEEDED libsocket.so.2

NEEDED libc.so.2

表明ping命令需要libsocket.so.2libc.so.2,再利用objdump

objdump -x /lib/libsocket.so.2 | grep NEEDED

NEEDED libc.so.2

objdump -x /lib/libc.so.2 | grep NEEDED

即是说libsocket.so.2需要libc.so.2,而libc.so.2不需要任何其他的库。那么如果包括ping在映象中,就必须在文件列表中列出libsocket.so.2libc.so.2

有了Buildfile,我们就可以通过“mkifsutility生成启动映象文件,其语法格式是

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
  

闽ICP备14008679号