赞
踩
By Nicholas ZHOU
第一部分: QNX系统的安装与使用
Boot Image -> /etc/config/sysinit.node -> /etc/profile -> $HOME/.profile
第二部分: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就是结点号。
其它网络相关部分
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基础
i. #start IDE drive
ii. devb-eide &
iii. waitfor /dev/hd0t79
iv. mount /dev/hd0t79 /
v. waitfor /bin
i. [+session] sh –c “/etc/system/sysinit”
ii. 最后注释掉ide驱动和这之间的其它部分。
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协议栈。
其它一些命令:
最后,补充一个,在qnx里,msg_send是阻塞的。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。