QNX
- 编辑本段基本内容
Gordon Bell和Dan Dodge在1980年成立了Quantum Software Systems公司,他们根据大学时代的一些设想写出了一个能在IBM PC上运行的名叫QUNIX(Quick UNIX)的系统,直到AT&T发律师函过来才把名字改成QNX。
加拿大QNX软件系统公司 QNX是由一家位于加拿大的QNX软件系统公司(简称QSSL)推出的。该公司位于渥太华(加拿大城市)的市郊。最近从该公司传来好消息说,该公司已经面向普通用户推出了可以免费使用、非商业用的个人用户版本的QNX实时平台或称作QNX RTP,最小的在Windows下安装文件只有24MB。当这个版本正式向公众推出的时候,大约有400000人次从网上下载了这个QNX RTP版本。这大大出乎了意料,没有想到竟然有这么多人对这个操作系统感兴趣。因为很多人在以前根本就没有听说过世界上还有这么一个免费的QNX操作系统。
该公司已被RIM(Research In Motion)收购。
QNX是由QNX软件系统有限公司开发的实时操作系统。
基本特征
* QNX是一个分布式、嵌入式、可规模扩展的实时操作系统。它遵循POSIX.1 (程序接口)和POSIX.2 (Shell和工具)、部分遵循POSIX.1b(实时扩展)。它最早开发于1980年,到现在已相当成熟。
体系结构
* QNX是一个微内核实时操作系统,其核心仅提供4种服务:进程调度、进程间通信、底层网络通信和中断处理,其进程在独立的地址空间运行。所有其它OS服务,都实现为协作的用户进程,因此QNX核心非常小巧(QNX4.x大约为12Kb)而且运行速度极快。
调度策略
QNX 提供POSIX.1b标准进程调度:
* 32个进程优先级;
* 抢占式的、基于优先级的正文切换;
* 可选调度策略:FIFO、轮转策略、适应性策略。
系统服务
QNX的系统服务:
* 多种资源管理器,包括各种文件系统和设备管理,支持多个文件系统同时运行,包括提供完全POSIX.1及UNIX语法的POSIX文件系统,支持多种闪存设备的嵌入式文件系统,支持对多种文件服务器(如Windows NT/95、LAN Manager等)的透明访问的SMB文件系统、DOS文件系统、CD-ROM文件系统等。
* 设备管理。在进程和终端设备间提供大吞吐量、低开销接口服务。
* 图形/窗口支持。包括QNX Windows、X Window System for QNX、对MS Windows NT/95和X Window系统的远程图形连接。
* TCP/IP for QNX。
* 高性能、容错型QNX网络——FLEET,使得所有连入网络的计算机变成一个逻辑上的超级计算机。
* 透明的分布式处理。FLEET网络处理与消息传递和进程管理原语的集成,将本地和网络IPC统一起来,使得网络对IPC而言是透明的。
系统开放性
QNX的开放性:
* QNX的POSIX兼容性和其提供的UNIX特色的编译器、调试器、X Window和TCP/IP都是UNIX程序员所熟悉的。
* 支持多种CPU:AMD ElanSC300/310/400/410、Am386 DE/SE、Cyrix MediaGX、x86处理器(386以上)、Pentium系列、STMicroelectronics 的STPC。
* 多种总线:CompactPCI、EISA、ISA 、MPE (RadiSys)、STD、STD 32、PC/104、PC/104-Plus、PCI、PCMCIA、VESA、VME。
* 各种外设:多种SCSI设备、IDE/EIDE驱动器、10M/100M以太网卡、Token Ring网卡、FDDI接口卡、多种PCMCIA设备、闪存、声卡等等。
QNX结构:
QNX是业界公认的X86平台上最好的嵌入式实时操作系统之一。它具有独一无二的微内核实时平台,建立在微内核和完全地址空间保护基础之上,实时、稳定、可靠,已经完成到PowerPC、MIPS、ARM等内核的移植,成为在国内广泛应用的嵌入式实时操作系统。
1 QNX内核简介
QNX的微内核结构是它区别于其它操作系统的显著特点。
平板式内存结构,如图1所示,所有的程序都使用同一个地址空间,不加保护;应用程序可以自由访问所有空间,效率较高,但是任何应用程序指针错误都可能会导致内核崩溃。
大内核内存结构,如图2所示,操作系统内核和各种驱动程序、网络协议在同一个地址空间,应用程序在单独空间;内核模块同处于一个保护空间,运行效率高,应用程序无法直接访问保护空间,系统稳定性大大提高。缺点是,由于内核模块(例如网络驱动)处于保护空间,因此调试困难,任何驱动程序的修改都要重新编译内核,无法做到驱动的动态加载和卸载。
QNX的微内核结构,内核独立自处于一个被保护的地址空间;驱动程序、网络协议和应用程序处地程序空间中。
微内核结构的优点:①驱动程序、网络协议、文件系统等操作系统模块和内核相互独立,任何模块的故障都不会导致内核的崩溃;②驱动程序、网络协议、文件系统和应用程序都处于程序空间,都调用相同的内核API,开发与调试和应用程序没有区别;③操作系统功能模块可以根据需要动态地加载或卸载,不需要编译内核。在高可靠性要求的情况下,可以编写监视模块,对可靠性要求高的模块进行监视,必要的时候重新启动或重新加载而无须重启系统。高可靠性的内核结构使QNX具备了高可靠性嵌入式操作系统的本质特征。
在具有高可靠性内核的基础上,QNX的创新设计使它同样具有很高的效率。QNX最为引人注目的地方是,它是UNIX的同胞异构体,保持了和UNIX的高度相似性,绝大多数UNIX或LINUX应用程序可以在QNX下直接编译生成。这意味着为数众多的稳定成熟的UNIX、LINUX应用可以直接移植到QNX这个更加稳定高效的实时嵌入式平台上来。
2 QNX网络结构
QNZ网络子系统由三个部分组成:网络管理模块(io-net)、网络协议模块(npm-qnet.so、npm-tcpip.so)、网络设备驱动模块(devn-ne2000.so)。
每个模块各自具有不同的功能,但是它们具有一些相同的属性。如:网络设备驱动、TCP/IP协议栈分别对上层io-net模块和应用程序产生数据,两者都可以被看作数据源;同时它们也接受上层发来的数据,又可以同时被看作数据的消费者。过滤模块对向上的数据进行筛选,分协议进行处理;对向下的数据则进行相应的转换,如进行网络地址转换NAT。转换模块负责不同协议帧结构的转换,在以太网的工作环境下,它就负责对IP数据报进行以太网帧的封装和解包。
和QNX其它服务进程一样,QNX的网络子系统也在内核外部空间运行。应用程序面对的是一个统一的网络接口,硬件相关的内容被完全包装在网络子系统内。
QNX网络子系统的三个子模块按层次分开,io-net模块处于中心,是QNX网络的核心和重点,其它模块都挂接在它上面。数据和信息的流动都必须经由io-net调度与转发,所有其它模块所面对的就是一个单一主体。这样的中心交换结构,屏蔽了各个模块间相互协调的复杂细节,在很大程序上方便了模块的编写工作;同时,io-net还是QNX的网络管理中心。任何网络协议和网络设备驱动程序都必须向io-net注册,由它来加载,并接受io-net的配置和管理,用户对网络状态的查询和管理也是通过io-net来实现的。
3 QNX网络设备驱动
QNX网络设备驱动模块处于网络硬件和io-net模块之间。驱动模块负责配置硬件使其正常工作,向io-net报告数据收发情况,接收和传递数据,接受io-net的调度和管理。QNX网络设备驱动程序依照以上功能,分为初始化、接收发送数据、网络设备信息统计几个功能块。要使网络设备工作正常,驱动程序就要对它进行一定的寄存器配置,同时,还要向QNX网络子系统注册自己,表明网络设备的存在和网络通信能力,才能为系统和应用程序所用。在初始化工作完成以后,网络设备就进入了工作状态,收发数据。设备信息的统计也是由设备驱动程序来完成的。
(1)初始化
初始化包括两个方面,一方面是初始化网络设备,使其正常工作;另一个方面,是向io-net正确注册驱动模块,表明自己的属性,方便上层正确操作。网络设备的初始化工作和硬件紧密相关,这里就不一一描述。
驱动模块向io-net加载自己的时候,系统遵循如下工作流程:
①io-net搜索全局的符合io_net_dll_entry。它定义了驱动的初始化函数,io-net会直接调用这个函数。
②初始化函数向io-net注册驱动和相应的函数。
③初始化函数告诉io-net和它的模块自己的通信能力。
经过以上流程以后,io-net中就建立起有关此驱动程序的数据和函数调用列表。驱动程序必须正确编写初始化函数,并将该函数正确链接至io_net_dll_entry。
(2)从网络设备接收数据
当有包到达网络设备的时候,网络设备就会用某种方式通知驱动程序(例如中断),此时,驱动程序就要采取某种策略来处理到来的帧或数据。通常驱动程序这时候需要做以下工作:
①通过DMA将包取回来;
②做相应的必要处理,如通知网络设备释放当前帧的缓存,配置寄存器让网络设备等待下一帧到来等;
③通过调用io-net的tx_up_start()函数把包传递给上层模块。
当上层所有的模块都完成对这个包的处理以后,io-net调用我们驱动中的tx_done()函数,它来做最后的处理工作。
tx_up_start()函数是设备驱动中比较关键的函数,下面简要部分一下这个函数的入口参数。
npkt_t*(*tx_up_start)(int registrant_hdl,
nptk_t *npkt,
int off,
int framelen_sub,
uint16_t cell,
uint 16_t endpoint,
uint16_t iface,
void *done_hdl)
其中:int registrant_hdl--本驱动在io-net中的句柄,注册时由io-net生成;
nptk_t *npkt --需要处理的包的指针;
int off--底层协议包头长度,如以太网帧头部长度;
int framelen_sub--尾部填充的长度,对于以太网这个值为零;
uint16_t cell、uint16_t endpoint--endpoint和cell是io-net在注册的时候分配的用来区别不同的驱动;
uint16_t iface--接口号,可以让同一个驱动负现多个相同硬件;
void *done_hdl--该指针指向tx_done()函数需要的额外数据。
(3)向网络设备发送数据
当上层模块需要硬件传送包的时候,会调用io-net管理器的rx_down()函数。
int(*rx_down)(npkt_t*npkt,
void *func_hdl)
rx_down函数入口参数中,npkt是指向需要传送的数据的结构指针,func_hdl是相应驱动模块在io-net中的句柄。其中npt结构包含许多成员,其中的重要成员如:
cell、endpoint、iface 需要处理该包的硬件标识
buffers 指向包的指针
tot_iov 包含数据包的所有I/O矢量
Framelen 所有数据的长度,以字节为单位
驱动模块在接收到io-net的调用后,就要配置网络设备,让它完成数据的发送工作。网络设备发送数据所需要的信息都会在相应的数据结构中,如net_buf_t结构中保存了等待传送的数据包的链接列表,配置DMA所需的物理地址在net_iov_t中等。驱动模块要等待硬件完成这些包的传送,并调用io-net的tx)done()函数通知上层模块驱动程序已经完成了数据的发送。
4 网络设备信息的统计
应用程序或者用户可以通过网络信息接口nicinfo工具来了解网络工作状态。信息的查询都是通过io-net来进行的。驱动程序必须维护相应的状态数据,方便io-net的查询。网络设备有一些共同的状态属性,如收到和发出的包的个数、发送错误的包的个数等,不同的网络设备还会具有不同的属性和状态,这些都可以在驱动程序中用数据结构详细列明。
需要维护的数据结构中,主要的是Nic_t,它包括四个子结构;
CustNicStats--网络信息入口;
EthernesStats_t--以太网状态;
GenStats_t--常用统计信息;
NetStats_t--网络信息(包含常用统计信息)。
以上是驱动程序需要维护的数据。当用户或应用程序要查询这些信息的时候,它们就通过Nicinfo工具对/dev/io-net/en0调用devctl()函数来取得网络信息。信息的取得是必须通过io-net来完成的,io-net对信息的查询则是通过调用io_net_register_funs_t结构中所指向的函数来取得信息的。例:
#include<sys/nic.h>
int generic_eth_devctl(void *hdl,int dcmd,void *data,size_t size,int *ret)
{
Nic_t *nic=(Nic_t *)hdl;
int status;
status=EOK;
switch(dcmd){
case DCMD_IO_NET_NICINFO;
memcpy(data,nic,min(size,sizeof(Nic_t)));
break;
default:
status=ENOTSUP;
break;
}
return(status);
}
结束语
网络设备的驱动是网络系统的最低层和最基础的模块,是如今嵌入式开发中首先要解决的问题之一。由于QNX具有微内核的特点,其网络设备驱动程序的开发不需要内核调试,更适合初学者掌握。本文对QNX操作系统及网络设备驱动程序的介绍,可以帮助读者对相关内容作初步了解。
QNX用户评价:
QNX有一个非常华丽的图形界面,并且号称运行速度比Windows或Linux更快。不用不知道,一用你会忘不掉:P
垄断的微软Windows操作系统和自由的Linux操作系统都是很多朋友熟知的计算机主要的操作系统。但是您听说过QNX计算机操作系统吗?如果我告诉您QNX操作系统运行的速度比Windows或Linux还快,而且用户界面也十分华丽,您相信吗?
别以为QNX是刚刚诞生的计算机操作系统,它早就在20年前就诞生了,但是QNX作为一种专业的操作系统,至今它还未能进入普通用户的计算机为我们服务。其中的原因无疑是很复杂的。
QNX的发音也十分有趣,大家知道Linux用汉语发音就是“里讷克斯”,而QNX的发音就是“cue-nix”:)。如果您使用的是Pentium处理器系列的计算机,那么在这台计算机的硬盘上安装QNX操作系统是很容易的事情,QNX可以在Windows下安装,它和Linux一样,是一种类UNIX的操作系统。另人惊异的是QNX也是免费的操作系统,可以直接到QNX的网站上下载这个原版操作系统。当然,购买一张QNX的CD-ROM也是很方便的。一张QNX的安装盘CD-ROM售价为30美圆。在QNX的主页上有很详细的介绍和资料,还有关于QNX的新闻及应用软件可供用户阅读下载。
有了QNX,您计算机里的操作系统不只是Windows独霸了,QNX完全可以取代霸道的Windows平台。很多初学计算机的朋友因为接触最多的是Windows平台,以至于他们误认为Windows98就是“OS”的唯一选择。现在不同了,使用QNX同样也能很好的管理计算机了。
简单的说,操作系统就是给计算机一个灵活的大脑,一个强健的心脏和突出的个性。没有操作系统,计算机什么也做不了,只能是一堆废物。
QNX是由一家位于加拿大的QNX软件系统公司(简称QSSL)推出的。该公司位于渥太华(加拿大城市)的市郊。最近从该公司传来好消息说,该公司已经面向普通用户推出了可以免费使用、非商业用的个人用户版本的QNX实时平台或称作QNX RTP,最小的在Windows下安装文件只有24MB。当这个版本正式向公众推出的时候,大约有400000人次从网上下载了这个QNX RTP版本。这大大出乎了意料,没有想到竟然有这么多人对这个操作系统感兴趣。因为很多人在以前根本就没有听说过世界上还有这么一个免费的QNX操作系统。
现在要在这么一台电脑上试装这个QNX操作系统。电脑的硬件配置为233 MHZ AMD K6 处理器,96MB内存,ATI All-in-Wonder Pro显示卡,Sound Blaster AWE 32 声卡,两个硬盘驱动器和两个CD-ROM驱动器,一个SCSI硬盘和一块标准的网卡。
在安装的过程中除了遇到一个小故障之外,一切还算顺利。那块SCSI卡没有能被QNX自动配置。查阅QSSL公司的资料,该公司说他们正在努力的修正这个SCSI的问题。
如果您是一位有经验的Linux用户,那么QNX会使您很快就能上手。虽然它和Linux有很大的区别。QNX RTP使用的命令和操作是和Linux的许多“shell”命令是兼容的。更令人满意的是QNX的文件分级目录(组织,文件名和目录)和Linux几乎是一样的。可以说QNX RTP和旧的Linux是十分相象的。这对许多喜欢Linux,对Linux有一定实际操作经验的用户来说无疑是一个福音。QNX在他们手里很快就能玩转。
但QNX和Linux最大的不同就是QNX的图形用户界面设计的十分漂亮。尽管Linux使用的是经久世故的X Window系统,但是和QNX的称为“Photon”的图形用户界面相比还是显得QNX略省一筹。
不用不知道,一用忘不掉:QNX RTP的图形用户界面-Photon MicroGUI非常酷
QNX的Photon MicroGUI窗口系统是最“酷”的GUI(图形用户界面)。安装QNX后,你就会发现QNX的默认桌面背景“炫”得让你晕倒,得让人给你叫个医生来了:)。
另外要提到的是,QNX RTP 的运行速度是那样的快,是否所有的用户都能够接受?没有错,在同样的电脑硬件配置情况下,QNX确实运行速度要比其他的Windows系统要快得多。在使用鼠标和窗口的操作界面下,QNX的运行速度确实是让人满意的。给人以一种“豪爽”的感觉。
以上关于QNX的优点介绍得让你立刻想鼓掌,狠不得马上下载一个QNX试一试,但是有些问题是要说清楚的。QNX尽管是非常好的一个操作系统。但是你平时主要工作如果需要处理电子表格,管理金融等等,那么QNX可能不太适合你。因为能在QNX下运行的应用软件并不多。这也是制约QNX发展的一个重要原因了。
但是也不必太担心软件不够用的问题,起码QNX能让你进行很多基本的操作。你可以用QNX来计算数据,播放CD音乐,使用电子邮件程序,进行文字处理工作,简单的图象浏览,还有一些Linux上已经除去的屏幕保护程序,桌面背景转换,软件的安装管理功能等等。甚至你还可以在QNX上添加专用版本的Real Player软件,喜欢玩游戏的朋友还可以安装Quake这个著名的游戏。所有在QNX上玩过Quake的朋友都说Quake在QNX上的运行速度比任何操作系统都要快。这确实是一个对游戏迷来说是非常好的消息。
好了,现在我们来总结一下QNX的所有优点:
速度极快:QNX的运行速度非常快,其他的操作系统没有办法和它相比。
系统非常安全:QNX上没有计算机病毒,这是和Linux一样的,所以QNX RTP不存在被病毒破坏资料的危险,只有在微软Windows系统中才会有被病毒感染的噩梦。另外,QNX的用户管理相当出色,它绝对不会让一个没有输入正确密码的人闯入计算机系统中。
QNX有一个最好的网页浏览器:QNX里的网页浏览器叫做“Voyager”,浏览网页的速度快得象火箭。和Voyager相比,微软的IE和网景公司的NC浏览器简直就是一辆破旧的老爷车。但是这个Voyager浏览器目前还有些臭虫,QSSL公司的软件工程师正在改进它。
QNX的最大不同:QNX完全不像Windows,那是一件好事情。它是免费的操作系统,可以在网上下载安装使用。它的使用和操作也十分的容易。QNX常用命令
0.#use -- Print a usage message (QNX Neutrino)(查看各命令帮助)
#use ls
1.#pidin -- Display system statistics (QNX Neutrino)(查看系统信息)
#pidin a #pidin mem #pidin info #pidin fa ...
pid tid name prio STATE Blocked
1 1 /sys/procnto-instr 0f READY
1 3 /sys/procnto-instr 10r RUNNING
1 4 /sys/procnto-instr 12r RECEIVE 1
2 1 sbin/tinit 10o REPLY 1
3 1 proc/boot/slogger 10o RECEIVE 1
5 1 proc/boot/pci-bios 10o RECEIVE 1
6 1 roc/boot/devb-eide 10o SIGWAITINFO
6 2 roc/boot/devb-eide 21r RECEIVE 1
2.#hogs -- List the processes that are hogging the CPU(查看CPU 使用情况)
$ hogs -n -% 10
PID NAME MSEC PIDS SYSTEM
1 451 41% 15%
6 devb-eide 141 13% 4%
8 fs-pkg 391 36% 13%
3.#sin -- Display system information
$ sin -u techpubs
procnto 1 0 0 0 0 268759990
devc-con 2 36K 68K 128M 128M 614
pci-bios 3 28K 60K 4K 516K 16
tinit 4 8K 44K 4K 516K 4
......
4.#coreinfo -- Display information about a QNX Neutrino core file
#coreinfo test_g.core
5.#dumpifs -- Dump an image filesystem
#dumpefs -- Dump an embedded filesystem
$ dumpifs shell.ifs
Offset Size Name
0 288 *.boot
288 100 Startup-header flags1=0x1 paddr_bias=0
388 6008 startup.*
6390 59 Image-header mountpoint=/
63ec 1ac Image-directory
---- ---- Root-dirent
6598 8c proc/boot/data1
6624 5c proc/boot/.script
6680 14 proc/boot/data2
7000 2c02c proc/boot/procnto
34000 12ad0 proc/boot/devc-con
47000 b66c proc/boot/esh
53000 d7fc proc/boot/ls
61000 7394 proc/boot/cat
Checksums: image=0x6d5fb484 startup=0x274d7c89
6.#showmem -- Display memory information(查看内存信息)
7.qconfig -- Query and display QNX installations and configurations(查看版本等安装信息)
QNX常用小技巧
1.跳过登陆
跳过图形:
在/etc/rc.d/rc.local中增加/usr/photon/bin/Photon -l '/usr/photon/bin/phlogin -O -Uuser:password'
跳过命令行:
修改/etc/config/ttys文件,con1 "/bin/login -f root" qansi-m on
2.使用Pindows
在/etc/inetd.conf文件里去掉此句注释:phrelay stream tcp nowait root /usr/bin/phrelay phrelay -x
杀死并重新运行inetd:1.#slay inetd 2.#inetd
3.去掉shelf [Photon Shelf Manager -- 边框
用命令#shelf -e
或 A more permanent approach is to set the PHSHELF_DISABLE environment variable to 1. You can do this in your .profile file, with export PHSHELF_DISABLE=1
4.登入时进命令行模式
/etc/rc.d/rc.sysinit runs tinit. [If the -p option is specified, tinit starts Photon.]By default, the system starts Photon, but if you create a file called /etc/system/config/nophoton, then rc.sysinit tells tinit to use text mode.
5.自动运行程序
If you want to run a Photon application whenever Photon starts, put it in your $HOME/.ph/phapps file. Put each command on a separate line. For example, to start the Photon editor when you start Photon, include this line: ped &
[注:phapps需加可执行权限,例如 #chmod +x /root/.ph/phapps]
6.登陆记录
The login utility also updates system accounting information in var/log/utmp, /var/log/wtmp,and /var/log/lastlog. if they already exist. The login utility doesn't create /var/log/utmp, /var/log/wtmp, and /var/log/lastlog if they don't already exist. These files can quickly become very big, which isn't good on an embedded system with limited resources.
7.TCP/IP 网络设置
设置IP,在图形界面可用phlip
在命令行可用:先要确定Network I/O在运行:io-net -dne2000 -ptcpip
指定IP ifconfig en0 <?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />10.0.0.100
指定路由:route add default 10.0.0.1
用DHCP自动获取IP dhcp.client -i en0 -m -u -t 1
Start the second instance of the TCP/IP stack by invoking io-net as follows:
io-net -i1 -del900 pci=0x1 -ptcpip prefix=/sock2
The -i option in the second instance of TCP/IP tells io-net to register itself as /dev/io-net1. The prefix option to npm-tcpip.so causes the second stack to be registered as /sock2/dev/socket instead of the default, /dev/socket. TCP/IP applications that wish to use the second stack must specify the environment variable SOCK. For example:SOCK=/sock2 netstat -in
Are io-net and the drivers running? pidin -P io-net mem
Is the TCP/IP protocol stack or Ethernet driver installed? ls /dev/io-net
How do I map hostnames to IP addresses /etc/hosts
How do I get the network status? netstat -in
List the interfaces, including the MAC and IP addresses that they've been configured with. netstat -rn
Display the network routing tables that determine how the stack can reach another host. netstat -an
List information about TCP/IP connections to or from your system. For the tiny TCP/IP stack, you have to use the following command as it doesn't support netstat: cat /proc/ipstats
How do I display information about an interface controller? /usr/sbin/nicinfo /dev/io-net/en0
QNX-从4到6简单入门
By Nicholas ZHOU
第一部分: QNX系统的安装与使用
QNX的微内核,甚至不包括进程管理,仅提供进程间的通信(Software Bus)。但在实际编译的系统中,仍然是进程调度、同步、进程间通信等编译在同一个可执行文件中的,它就是/boot/sys/procnto (QNX6).
QNX 4.x仅支持x86,QNX 6.x可支持PowerPC等
QNX 4.x只有Process,没有Thread,QNX 6.x都有了,这跟POSIX 1003 – 2001是同步的。
如何创建启动镜像:(QNX4)
在/boot/build里,install.1是启动镜像的配置文件
cd /boot
make b=install.1
上述步骤会成功编译出/boot/images/install.1镜像文件(该文件为MS-DOS可执行文件),其中包含了/boot/build/install.1配置文件中指定的所有可执行文件的映象(如Proc32、Slib32等)。
copy install.1 到 /.boot即可
clear屏幕,使用ctrl+l
文件系统/块设备的驱动,qnx4在/bin下,如Fsys.eide,而qnx6在/sbin目录下。
块设备命名,可以通过/boot/build/install.1的设备驱动加载参数来指定,一般会是hd0.0(对应primary master)、hd0.1(对应primary slave)、h1.0(对应secondary master)、hd1.1(对应secondary slave)。
hd0t79,其中t79是指type 和type id
添加块设备后,可以使用fdisk进行分区,如fdisk /dev/hd0.1,分区后,查看/dev/hd*还只能看见/dev/hd0.1,要查找新分出来的分区,需要使用mount –p /dev/hd0.1 (probe)。
启动过程
如何制作软盘启动的系统(QNX4)
cd /boot
make b=floppy
格式化软驱fdformat /dev/fd0;初始化软驱dinit –hb /dev/fd0;将软盘挂载到/fd - mount /dev/fd0 /fd
cp /boot/images/floppy /fd/.boot,启动映象就好了。
mkdir etc;mkdir etc/config;mkdir bin;mkdir usr;mkdir /usr/bin
cp /etc/config/sysinit.floppy /fd/etc/config/sysinit
cp /etc/logo.F /fd/etc/
将必要的一些二进制文件从/bin/或/usr/bin拷贝到/fd/bin或/fd/usr/bin(对应的),如ls、pax、fcat、esh、sh、echo、vi、Dev、Fsys.eide、mount、rm、rmdir、mv、melt、Fsys、Dev、Dev.con、chkfsys、ps、prefix、emu87、mount、rtc、df、dinit、fdformat等。
修改/etc/config/sysinit,从而加载硬盘驱动,添加下面一行:
/bin/Fsys.eide fsys –Ndsk0 –n0=hd0. –n5=cd0. eide –a1f0 –i14
重新启动,从软盘加载,搞定。
关机命令:shutdown –b(完全关机不重启)
用户环境
Boot Image -> /etc/config/sysinit.node -> /etc/profile -> $HOME/.profile
压缩解压
melt / freeze,前者释放abc.F为abc,后者将abc压缩为abc.F(only for QNX4)
gzip / gunzip
拷贝
cp
cpio
第二部分:QNX网络
QNX有很强的网络功能,最具特色的是它的FLEET Networking,该技术框架可以将跨接于不同网络(如Ethernet + Token)的节点直接链接起来,用户程序只需要使用msg_send即可跟网络上的任意qnx节点通信。
Fleet Network的配置需修改:
配置结点号
修改/boot/build/install.1文件名为install.x(x为你要的ID,比如2,下同),修改install.2中的$ /boot/sys/Proc32 –l 1为$ /boot/sys/Proc32 –l 2,后面这个2就是结点号。
生成新的image
cd /boot
make b=install.2
cp images/install.2 /.boot
修改配置文件
cd /etc/config
cp sysinit.1 sysinit.2
cp inetd.1 inetd.2
cd bin
cp Input.1 Input.2
cp ph.1 ph.2
cp tcpip.1 tcpip.2
修改tcpip.2,两个内容,一个是ip地址,如果想使用dhcp,则注释掉/usr/ucb/ifconfig en1 10.1.1.119 node$NODE up,替换为/usr/ucb/dhcp.client
然后修改/.licenses,将license添加进去
最后修改/etc/config/netmap,把网内的各个节点添加进去,完成
使用netmap –f,即时更新网络节点表,使用netmap可查看现有的 节点,使用alive可查看各节点的在线状况
如过网卡不灵等,可用以下命令来重启相关服务。
slay Net
Net &
Net.ether2100 –l1 –p0x1080 –i9 &
slay Socklet
Socklet node2 &
其它网络相关部分
1. 如何控制远程机器:ditto –n3 –k,即可控制远程node3。
2. 如何查看网卡状态:netstat –in
3. 如何查看路由表: netstat –rn
4. 如何使用远程桌面:phindows –n/dev/photon,在qnx侧则需要激活phrelay(inetd)。
5. 如何查PCI卡的IO地址和中断:show pci
6. 如何进入另外一台机起:on –f 3 /bin/sh
7. 如何检查网络监听:netstat –an
8. 如何查看启动后系统执行过的命令: sin ar
9. sin mem:当前进程虚拟地址分配情况
10. sin –t: 查看每个进程用了多少CPU时间。
关于QNX网络架构——
从驱动到应用层:Net -> Net.ether -> Socket/Socklet -> inetd -> nfsd
配置工具:ifconfig、route、hostname、netmap
查询工具:netstat、alive
第三部分:QNX6基础
Build Boot Image
/boot/build仍然是build启动映象的配置文件
bios.build是X86通用的
mkifs –v bios.build bios.img
在momentics中生成一个启动映象(支持硬盘和QNX4文件系统)
生成QNX System Builder Project,在build文件生成一节,选择导入/boot/build/bios.build文件。
双击打开project.bld,在binaries中加入devb-eide
在DLL中加入cam-disk.so、io-blk.so、fs-qnx4.so。
在share library中加入libcam.so.2
点击bios,右键菜单调出properties窗口,在SYSTEM的PATH、LD_LIBRARY_PATH中添加必要的路径,包括/bin:/sbin:/usr/bin:/usr/sbin等PATH以及/lib:/usr/lib等库路径。
修改bios.bsh,在PCI的section后增加硬盘驱动的部分
i. #start IDE drive
ii. devb-eide &
iii. waitfor /dev/hd0t79
iv. mount /dev/hd0t79 /
v. waitfor /bin
修改bios.bsh,在最后增加启动/etc/system/sysinit脚本的部分。
i. [+session] sh –c “/etc/system/sysinit”
ii. 最后注释掉ide驱动和这之间的其它部分。
编译生成bios.ifs,拷贝该文件到/.boot即可。
其它
QNX6的启动脚本已经更象Linux/Unix了,包括了sysinit和rc.d。而QNX6的设备驱动则远比4要灵活——顺便提一下,QNX4甚至没有提供DDK给用户,几乎所有的QNX4下的设备驱动都是QNX公司自己开发的(或受客户委托开发)。QNX6则改变了这一局面——而且QNX6已经完全开源了,QNX6用户也不再受那些license的困扰,普通个人用户可以直接下载和安装QNX6的RTOS和开发环境,包括使用Qnet——要知道,QNX4的Fleet Network倘若没有2个以上的licenses,是无法使用的。
第四部分:关于QNX6的网络架构和Qnet
QNX6的网络尤其是它的Qnet与QNX4一样独具特色。相对而言,QNX4的Fleet Network无论从配置还是使用来讲都要显得复杂一些,也要偏僻一些。而QNX6的Qnet则大大简化了配置的复杂性,也同时在尽量让远程的访问显得更正常。
首先,QNX6的网络驱动不同于qnx4的Net + Net.ether + Socket/Socklet或netmap的方式,而是采用了模块化更强,更灵活也更具一致性的方式。这个改变应当源于QNX6底层架构的升级。
从QNX6的启动看,在x86上,首先由BIOS启动startup-bios(一个二进制包),然后就启动了微内核procnto,紧接着在启动脚本里开始加载一些驱动。首先加载的一般是一个console,devc-con;然后应当加载pci-bios,试PCI总线开始工作;接着加载硬盘驱动和文件系统;最后启动一些进程通信管理程序,如mqueue、pipe等。
在QNX6里,网络、硬盘与其它设备(如音频)一样,都由一个io-xxx的程序来管理,硬盘是io-blk,网络则是io-net,而音频则是io-audio。但它们之间也有差别,比如硬盘,可执行的程序是devb-eide(常用的字符设备和块设备好像都是这个方式),而网络的则是io-net(net、audio这些好像是一样的),这多少显得有些怪异。
扯远了,回到io-net。
io-net的启动一般带一些参数,这些参数可以在加载网卡驱动的同时,加载各种协议栈,包括tcpip和Qnet。比如:
# io-net –dpcnet –ptcpip –pqnet
这一步操作即可在vmware虚拟机上跑的qnx6中成功加载网卡驱动、tcpip协议栈和Qnet协议栈。通过下面的命令可以检查io-net加载的状况:
# ls /dev/io-net
en0 ip0 ip_en qnet_en
此外,还有一种方式可以向已经启动的io-net中添加设备驱动和协议栈。比如:
# slay io-net
# io-net
# mount –Tio-net devn-pcnet.so
# mount –Tio-net npm-tcpip.so
# mount –Tio-net npm-qnet.so
这三个操作便向io-net添加了pcnet网卡驱动、tcpip和qnet协议栈。
其它一些命令:
查看io-net中已经加载的驱动:ls /dev/io-net
查看网络中其它的qnet节点:ls /net
访问网络中其它的qnet节点:cd /net/nodename(切换到目标结点的根目录).至于节点名称,则是通过hostname来设置的。
最后,补充一个,在qnx里,msg_send是阻塞的。QNX的所有优点 好了,现在我们来总结一下QNX的所有优点:
速度极快:QNX的运行速度非常快,其他的操作系统没有办法和它相比。
系统非常安全:QNX上没有计算机病毒,这是和Linux一样的,所以QNX RTP不存在被病毒破坏资料的危险,只有在微软Windows系统中才会有被病毒感染的噩梦。另外,QNX的用户管理相当出色,它绝对不会让一个没有输入正确密码的人闯入计算机系统中。
QNX有一个最好的网页浏览器:QNX里的网页浏览器叫做“Voyager”,浏览网页的速度快得象火箭。和Voyager相比,微软的IE和网景公司的NC浏览器简直就是一辆破旧的老爷车。但是这个Voyager浏览器目前还有些BUG,QSSL公司的软件工程师正在改进它。
QNX的最大不同:QNX完全不像Windows,那是一件好事情。它是免费的操作系统,可以在网上下载安装使用。它的使用和操作也十分的容易。
QNX RTP的图形用户界面-Photon MicroGUI非常酷
QNX的Photon MicroGUI窗口系统是最“酷”的GUI(图形用户界面)。安装QNX后,你就会发现QNX的默认桌面背景“炫”得让你晕倒,得让人给你叫个医生来了:)。
另外要提到的是,QNX RTP 的运行速度是那样的快,是否所有的用户都能够接受?没有错,在同样的电脑硬件配置情况下,QNX确实运行速度要比其他的Windows系统要快得多。在使用鼠标和窗口的操作界面下,QNX的运行速度确实是让人满意的。给人以一种“豪爽”的感觉。
以上关于QNX的优点介绍得让你立刻想鼓掌,狠不得马上下载一个QNX试一试,但是有些问题是要说清楚的。QNX尽管是非常好的一个操作系统。但是你平时主要工作如果需要处理电子表格,管理金融等等,那么QNX可能不太适合你。因为能在QNX下运行的应用软件并不多。这也是制约QNX发展的一个重要原因了。
但是也不必太担心软件不够用的问题,起码QNX能让你进行很多基本的操作。你可以用QNX来计算数据,播放CD音乐,使用电子邮件程序,进行文字处理工作,简单的图象浏览,还有一些Linux上已经除去的屏幕保护程序,桌面背景转换,软件的安装管理功能等等。甚至你还可以在QNX上添加专用版本的Real Player软件,喜欢玩游戏的朋友还可以安装Quake这个著名的游戏。所有在QNX上玩过Quake的朋友都说Quake在QNX上的运行速度比任何操作系统都要快。这确实是一个对游戏迷来说是非常好的消息。
qnx操作系统 QNX是由加拿大QSSL公司(QNX Software System Ltd.)开发的分布式实时操作系统。该操作系统既能运行于以Intel X86、Pentium等CPU为核心硬件环境下,也能运行于以PowerPC、MIPS等CPU为核心的硬件环境。QNX操作系统符合POSIX基本标准和实时标准,使其应用可以方便的进行移植。 n 多任务、多用户的操作系统 首先QNX是一个多任务、多用户的操作系统。它支持在同一台计算机上同时调度执行多个任务;也可以让多个用户共享一台计算机,这些用户可以通过多个终端向系统提交任务,与QNX进行交互操作。 由于QNX在设计实现时,遵循了POXIS 1003.1标准,使得它在许多功能上与UNIX操作系统极为相似,既支持多个用户同时访问,也支持多个任务同时执行。因此,它是一个多任务、多用户的操作系统。 n 并行操作系统 QNX提供普通RTOS版本只提供了对单处理器的支持;另外,它还提供了Neutrino版本,此版本可支持多个处理器,支持对称多处理。 n 分布式操作系统 QNX操作系统可以将网络中的多台计算机耦合起来。它使得任何一台计算机上的任何一个进程可以和其它任何计算机上的任何进程通信,象与本机进程通信一样;也使得任何一台计算机上任何进程可以使用其它任何计算机上的资源,象在本机上一样。唯一的要求是,用户具有相应的权限。这样,用户可以将任务分散到网络中,交给其它任何计算机来完成。而用户的感觉与在一台集中式多任务操作系统上工作没什么区别。 而象QNX这种分布式操作系统与网络操作系统的区别在于,网络操作系统是在松散耦合的硬件上松散耦合软件,分布式操作系统是紧密耦合软件。这种操作系统很容易建立任务分担的高可用机制。 n 实时操作系统 实时系统能够在限定的时间内执行完所规定的功能,并能在限定时间内对外部异步事件做出响应。QNX是一种理想的实时操作系统,它提供了一个实时操作系统所需要的一切基本要素:多任务、优先级驱动的紧急者优先式的调度方式和快速的上下文切换。对于实时性要求不同的应用,QNX可以按用户的要求,安排适当的调度,使各种应用得以在QNX环境中理想地运行。 n 嵌入式操作系统 说QNX是嵌入式操作系统,是因为它具备一个很小的内核,即微内核的操作系统。QNX的内核一般只有几十KB,整个操作系统可根据需要进行定制系统需要的模块。定制后的系统,所占用的空间也很小,而且不失实时、多任务的特性。因此,整个操作系统又是灵活可伸缩的。- 编辑本段演变至BBX
- 在2011年10月18日的黑莓开发者大会上,RIM将QNS更名为BBX,并增加了BlackBerry Enterprise Servers(BES:黑莓企业服务器)的支持,这意味着增加了电子邮件服务、黑莓的即时通讯、和其他黑莓应用程序服务。
-
参考资料:
-
开放分类:
-
相关词条: