www.360doc/content/080301/11/38907_1083565.html
QNX系统下PXI多功能数据采集卡驱动程序开发
基于QNX的实时电源控制系统的设计
1.QNX只有6.0以上版本才是微内核的,4.2不是。
2.QNX来自于卡内基梅隆大学开发的MASH微内核结构。
3.工业应用中两个首选的实时操作系统是QNX和VXworks
4.IEEE发表过“便携式操作系统界面(Portable Operation System Interface of
Unix)POSIX,QNX与它相兼容。简单的说,因为以前的UNIX只定义了基本输入输出操作,硬件
管理等功能。其它的网络,文件管理,图形界面都是需要用户自己定义的。所以后来许多厂
家出来了各种版
本的UNIX。这样造成开发出来的应用程序,无法方便的移植。POSIX实际上是一组编程语法
的标准。使用这个语法开发应用程序,就能很好的移植到各种兼容POSIX标准的操作系统上
。这个好处是操作
系统开发商,只要遵循POSIX标准,可以任意的更改操作系统的语法,而不用跟高级开发语
言生产商打招呼。而高级语言生产商只要遵循POSIX标准,也可以任意的升级它自己的产品
。所以POSIX是一个
桥,一头是各种操作系统生产商,另一头是应用程序开发语言生产商,它把它们联系起来。
所以说POSIX是提供源代码级的应用程序接口。
5.微内核与宏内核。内核的意思就是操作系统的内部核心程序。操作系统分为外部管理程序
和内核程序。外部管理程序主要功能是管理用户进程和外部设备。内核程序在内存里占一个
单独空间。
宏内核就是,文件管理,中断管理,内存管理,网络协议等功能模块都放到一个内核里。各
个功能模块之间通过函数调用实现。
微内核模块,就是只有中断管理,内存管理放到内核里作为微内核。它与文件管理,网络协
议之间通过消息机制实现通信。
6.在linux上用的GCC,Gmake等应用软件开发平台都移植到了QNX上,所以linux上开发的源
程序,在QNX上编译后,也能在QNX上很好的运行。
同时在QNX也有类似与VC++的开发软件:Photon Application
Builder(PHAB),能很方便的开发QNX下的图形界面程序。
7.QNX也支持JAVA
1.1 QNX 实时操作系统介绍
QNX 实时操作系统(QNX Real Time Operating
System)是由位于加拿大渥太华的QNX软件系统公司开发的一个针对嵌入式应用的微内核操作
系统。QNX软件系统公司成立于1981年,在过去的20多年中一直致力于微内核实时操作系统
的研究与开发。目
前的QNX
实时操作系统已经发展成一个可以使用在严实时应用中的高可靠性实时操作系统,能够运行
在x86/Pentium, PowerPC, ARM, StrongARM, XScale, MIPS,
SH-4等一系列硬件平台上,是在关键任务应用中首选的两个实时操作系
统之一(另外一个是V
xWorks)。
QNX 是一个与电气工程师协会(Institute of Electrical and Electronics
Engineers,IEEE)发表的便携式操作系统界面标准(Portable Operating System
Interface, POSIX)
相兼容的实时操作系统。该操作系统提供了一系列可裁剪的功能全面的高可靠性高性能组件
,包括分布式计算,资源管理,网络应用,图形窗口系统,文件系统,以及对Java的支持等
等。此外,QNX还
是一个与Linux高度兼容的操作系统,由于gcc和gmake等Linux
平台上常用的应用程序开发工具已经被移植到QNX
平台上,很多为Linux平台编写的应用程序可以直接拿到QNX平台上编译运行。此外,QNX还
提供了一个类似于Visual C++的应用程序集成开发环境,称为Photon Applicatioin Buider
(PHAB)。在这个集成开发环境里程序开发人员能够很方便的开发和调试基于图形用户界面的
QNX 应用程序。
更为重要的是,对于应用程序开发人员来说,QNX是一个完全免费的实时操作系统。根据QNX
软件系统公司发布的使用授权协议,在一个产品商业化之前应用程序开发人员可以自由的使
用QNX实时操作系
统系统而无须向QNX
公司交付任何软件使用费用。同样,QNX的应用程序集成开发环境PHAB对于软件开发人员来
说也是免费的。QNX
实时操作系统以及QNX应用程序集成开发环境均可以从QNX公司的主页www.qnx下载。
1.2 QNX 实时操作系统对Java语言的支持
QNX
Neutrino使用IBM公司开发的业界领先的J9虚拟机为Java应用程序以及小应用程序提供了支
持。目前可供选择的方案有两个,一个是与J2ME标准完全兼容的WebSphere嵌入式环境,另
外一个是WebSphere
客户环境,提供了一个可裁剪的Java 2语言标准的子集。由于QNX
是一个多任务操作系统,因此可以同时运行多个虚拟机为不同的应用程序提供服务。基于微
内核的microGUI窗口界面系统为AWT提供了全面的支持,在其它平台上开发的基于AWT的图形
用户界面可以不
加修改的在QNX平台上运行。此外,QNX还通过使用本地线程保证了正确的线程调度。
IBM公司开发的J9虚拟机通过了Modena JT++以及Plum Hall JVS
等一系列严格的业界测试,是一个与J2ME标准完全兼容Java虚拟机。由于J9是一个专门为实
时的嵌入是应用开发的虚拟机,因此在其设计中对速度优化,内存管理,线程管理,本地方
法,垃圾回收,
及时编译,可移植性以及可裁剪性能方面做了很大的努力。根据多个公开发表的测试结果,
J9虚拟机是目前运行速度最快的嵌入式Java虚拟机。对本地方法的支持,使得应用程序开发
人员能够直接控
制外围设备,调用实时操作系统的功能。J9虚拟机本身对内存的要求极少,用户
更可以通过
一个配置工具使得应用程序在特定的嵌入式系统中对内存的要求降低到最小。就象一般的Ja
va应用程序一样
,内存的分配和回收都是通过虚拟机来自动管理的,因此在一般情况下不会产生内存泄露。
此外,J9虚拟机还提供了一个垃圾回收机制管理工具,使得用户能够在运行时刻控制和改变
所使用的垃圾回
收机制。在线程管理方面,J9虚拟机直接使用底层实时操作系统所提供的线程调度机制,从
而保证了正确的代码能够在正确的时间被执行。高度可裁剪的类库使得用户能够将应用程序
所不需要的类和
方法排除在嵌入式系统之外,从而进一步节省了对系统存储空间的要求,也间接地提高了嵌
入式应用程序的执行速度。目前版本的J9虚拟机支持大多数流行的嵌入式软硬件平台,包括
运行在x86,
MIPS, PowerPC, SH-4, 68K, SPARC平台上的Windows, Linux, QNX, Solaris, AIX, Pocket
PC, Palm OS等操作系统。由于J9虚拟机卓越不的表现,它被Java
Pro杂志评选为2002年度最佳嵌入式Java平台。同时,使用J9作为Java平台的WebSphere
Studio Device Developer (也就是以前的Visual Age for Java Micro Edition) 也被Java
Pro杂志评选为2002年度最佳嵌入式开发工具,又被Java
World杂志评选为最佳Java设备应用程序开发工具。
值得一提的是,QNX 软件系统公司是Eclipse
Consortium的发起者和最早的成员之一。Eclipse 是由IBM
公司牵头开发的开放源代码的Java应用程序开发平台,其目的是为应用程序开发人员提供一
套完备的高度可裁剪的高性能软件开发组件。Eclipse
Consortium成立于2001年11月,目前已经拥有Borland, IBM, QNX, Red Hat, SuSE,
Sybase, Rational等18个成员。由Eclipse Consortium
发布的Java应用程序集成开发环境Eclipse是完全免费的,可以运行在Windows, Red Hat
Linux, SuSE Linux, Solaris,
QNX和AIX等操作系统上。也就是说,在QNX平台上也是可以使用集成开发环境Eclipse来开发
Java应用程序的。
1.3 QNX 实时操作系统以及集成开发环境的安装和配置
QNX实时操作系统的安装非常简单。首先你需要从QNX公司的网站下载最新版本的QNX
操作系统,下载的地址是www.qnx/nc/download.qnx。目前最新的版本是QNX
6.2,下载文件是qnxnc620.iso,这是一个CD-ROM映像文件。将这个映象文件里面的内容刻
录到一张光盘上,然后利用该光盘启动计算机即可开始安装QNX
操作系统。总的来说安装的过程相当的简单,只需要选择启动方式以及指定QNX
文件系统所在的位置即可。系统文件拷贝完成后将自动的重新启动机器,然后需要用root登
录进入系统并且自动安装其它应用程序。在一台500 MHz + 128
MB的计算机上,安装过程通常都小于15
分钟,相对来说还是非常快的。系统安装完成后,即
可直接使用PHAB以及gcc等程序开发工具, 但是要使用Java还需要进行一点小小的配置。
J9虚拟机的缺省安装位置是/usr/eclipse/ive。在这个目录下有bin和lib两个子目录,bin
目录包含了J9虚拟机的可执行文件和所需要的库文件,lib目录则包含了各种版本的Java类
库。未来在QNX
系统上使用J9虚拟机,我们需要将合适的目录包括在PATH和LD_LIBRARY_PATH
这两个环境变量中。我们需要修改用户家目录(~)下面的.profile文件,使之包含如下语句
export J9_HOME=/usr/eclipse/ive
export PATH=$PATH:$J9_HOME/bin:.
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$J9_HOME/bin
应用程序集成开发环境Eclipse SDK for QNX可以从Eclipse
Consortium的主页下载,下载地址是/downloads/。将所下载的zip
文件拷贝到/usr目录中,然后使用unzip命令解压缩。然后你还需要下载针对
J9虚拟机的插件,下载地址是/i/
%7Echeckout%7E/jdt-debug-home/lipse.jdt.launching.j9/
index.html。你需要根据你所下载的Eclipse SDK for
QNX的版本好选择一个合适的插件,然后将下载的zip文件解压缩到/usr/eclipse/plugins目
录中。同样,我们需要修改用户家目录(~)下面的.profile文件从而将Eclipse
所需要的路径和库路径包含在环境变量PATH和LD_LIBRARY_PATH中。
export ECLIPSE_HOME=/usr/eclipse
export ECLIPSE_PLUGIN=/usr/eclipse/lipse.swt/os/qnx/x86
export PATH=$PATH:$ECLIPSE_HOME
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ECLIPSE_PLUGIN
到此为止我们以及成功的安装与配置了QNX
实时操作系统以及相关的Java应用程序开发工具。下面我们简单的介绍几个常用的命令:
j9c -- 类似于Java SDK中的javac命令,是用来编译Java源代码的。
j9 -- 类似于Java SDK中的java命令,是用来运行Java应用程序的。
eclipse -- 这个命令启动Eclipse for QNX应用程序集成开发环境。
1.4 一个简单的Hello World程序
在没有开始写Hello World之前,我们首先介绍一下QNX
上的文本编辑器。很多熟悉类UNIX操作系统的朋友也许会对vi比较熟悉,但是从Windows操
作系统过来的朋友也许不太喜欢。我们这里使用的是QNX
操作系统自带的图形化编辑软件ped。
利用下面命令启动ped:
#ped &
下面是HelloWorld.java的源代码:
public class HelloWorld
{
public static void main(String args[])
{
System.out.println("Hello World!");
}
}
使用j9c命令编译Java源代码:
#j9c HelloWorld.java
使用j9命令运行Java应用程序:
#j9 HelloWorld
需要注意的是,QNX
操作系统和Java语言都是大小写敏感的
所以一定要把大小写都写对了。另外,对源代码进
行编译的时候需要加上文件扩展名,在运行一个Java应用程序的时候则不需要加上文件扩展
名。如果排除了
这几种错误之后你仍然无法正确的编译或者是运行你的Hello World程序,请参考
1.3正确配置你的PATH和LD_LIBRARY_PATH。
2.1 J9C 编译器的使用
j9c是J9虚拟机自带的字节码编译器,相当于标准版Java开发工具中的javac命令。这个编译
器的用法如下:
#j9c <;编译选项> <;源代码文件 | 目录名>
在j9c编译器中主要的编译选项如下:
-help
打印于编译有关的帮助信息
-version
显示编译器的版本号
-classpath
指定编译时刻使用的类路径
-d
指定存放字节码文件的目录名,如果没有指定目标目录名,编译器将不生成包目录结构
-nowarn
隐藏编译器的警告信息
-warn
免费平台源码资源网
设定编译器的警告水平
-
g
设定是否生成调试代码
2.2 J9虚拟机的使用
和标准版Java开发工具相类似,可以使用j9命令启动J9虚拟机。这个命令的用法如下:
#j9 <;运行选项> 主类名称 [运行参数]
#j9 <;运行选项> -jxe:jxe文件 [运行参数]
J9虚拟机中主要的运行选项如下:
-jxe
运行所指定的jxe文件
-jxespace
为jxe文件指定所使用的内存(十六进制)
-
jxeaddr
从内存中直接运行一个jxe格式的应用程序
-cp
将path指定为运行时刻所使用的类路径
-D
在运行之前设定系统的环境变量
-debug
在指定的端口启动JDWP调试服务器
-jcl
指定所使用的JCL动态连接库
-verbose
详细输出相关的调试信息其中class和gc是缺省的选项
2.3 J9虚拟机上的标准类库
嵌入式应用程序和普通应用程序的最大的区别在于嵌入式应用程序处处要受到目标平台的处
理速度,内存大小以及存储空间的限制,而基于PC
的应用程序所受的限制则相对要小很多。基于以上考虑,所选择的虚拟机必须在能够满足系
统要求的情况下尽可能的少占用系统存储空间,经过编译的字节码文件必须尽可能的以提高
执行效率。因此
,在嵌入是应用程序的开发中,虚拟机的裁剪是提高系统整体性能的至关重要的一个环节。
基于如上需求,J9虚拟机专门为不同的应用提供了不同的标准类库。这些标准类库均提供了
运行Java应用程序所必须的基本类,例如Java语言中最基本的java.lang.Object和java.lan
g.String等等。
一个完全版的 J9虚拟机通常包括如下标准类库:
jclXtr
这是一个极小型的类库,大约90 KB,
当你的存储空间和内存极度紧张并且你能够容忍功能局限的情况下可以考虑这一个类库(QNX
的缺省安装里面没有)。这个类库提供了如下Java
2标准类库的一个子集:java.io, java.lang, java, java.util。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。