(转)QNX-从4到6简单入门

本文介绍QNX系统的安装步骤及网络配置方法,涵盖QNX4与QNX6的不同特性,包括启动镜像制作、网络节点配置及Qnet网络架构。
部署运行你感兴趣的模型镜像
QNX-从4到6简单入门

By Nicholas ZHOU

第一部分: QNX系统的安装与使用

  1. QNX的微内核,甚至不包括进程管理,仅提供进程间的通信(Software Bus)。但在实际编译的系统中,仍然是进程调度、同步、进程间通信等编译在同一个可执行文件中的,它就是/boot/sys/procnto (QNX6).
  2. QNX 4.x仅支持x86,QNX 6.x可支持PowerPC等
  3. QNX 4.x只有Process,没有Thread,QNX 6.x都有了,这跟POSIX 1003 – 2001是同步的。
  4. 如何创建启动镜像:(QNX4)
    1. 在/boot/build里,install.1是启动镜像的配置文件
    2. cd /boot
    3. make b=install.1
    4. 上述步骤会成功编译出/boot/images/install.1镜像文件(该文件为MS-DOS可执行文件),其中包含了/boot/build/install.1配置文件中指定的所有可执行文件的映象(如Proc32、Slib32等)。
    5. copy install.1 到 /.boot即可
  5. clear屏幕,使用ctrl+l
  6. 文件系统/块设备的驱动,qnx4在/bin下,如Fsys.eide,而qnx6在/sbin目录下。
  7. 块设备命名,可以通过/boot/build/install.1的设备驱动加载参数来指定,一般会是hd0.0(对应primary master)、hd0.1(对应primary slave)、h1.0(对应secondary master)、hd1.1(对应secondary slave)。
  8. hd0t79,其中t79是指type 和type id
  9. 添加块设备后,可以使用fdisk进行分区,如fdisk /dev/hd0.1,分区后,查看/dev/hd*还只能看见/dev/hd0.1,要查找新分出来的分区,需要使用mount –p /dev/hd0.1 (probe)。
  10. 启动过程

 

  1. 如何制作软盘启动的系统(QNX4)
    1. cd /boot
    2. make b=floppy
    3. 格式化软驱fdformat /dev/fd0;初始化软驱dinit –hb /dev/fd0;将软盘挂载到/fd - mount /dev/fd0 /fd
    4. cp /boot/images/floppy /fd/.boot,启动映象就好了。
    5. mkdir etc;mkdir etc/config;mkdir bin;mkdir usr;mkdir /usr/bin
    6. cp /etc/config/sysinit.floppy /fd/etc/config/sysinit
    7. cp /etc/logo.F /fd/etc/
    8. 将必要的一些二进制文件从/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等。
    9. 修改/etc/config/sysinit,从而加载硬盘驱动,添加下面一行:
      /bin/Fsys.eide fsys –Ndsk0 –n0=hd0. –n5=cd0. eide –a1f0 –i14
    10. 重新启动,从软盘加载,搞定。
    11. 关机命令:shutdown –b(完全关机不重启)
  1. 用户环境

Boot Image -> /etc/config/sysinit.node -> /etc/profile -> $HOME/.profile

  1. 压缩解压
    1. melt / freeze,前者释放abc.F为abc,后者将abc压缩为abc.F(only for QNX4)
    2. gzip / gunzip
  2. 拷贝
    1. cp
    2. cpio

第二部分:QNX网络

QNX有很强的网络功能,最具特色的是它的FLEET Networking,该技术框架可以将跨接于不同网络(如Ethernet + Token)的节点直接链接起来,用户程序只需要使用msg_send即可跟网络上的任意qnx节点通信。

Fleet Network的配置需修改:

  1. 配置结点号

修改/boot/build/install.1文件名为install.x(x为你要的ID,比如2,下同),修改install.2中的$ /boot/sys/Proc32 –l 1为$ /boot/sys/Proc32 –l 2,后面这个2就是结点号。

  1. 生成新的image
    1. cd /boot
    2. make b=install.2
    3. cp images/install.2 /.boot
  2. 修改配置文件
    1. cd /etc/config
    2. cp sysinit.1 sysinit.2
    3. cp inetd.1 inetd.2
    4. cd bin
    5. cp Input.1 Input.2
    6. cp ph.1 ph.2
    7. cp tcpip.1 tcpip.2
    8. 修改tcpip.2,两个内容,一个是ip地址,如果想使用dhcp,则注释掉/usr/ucb/ifconfig en1 10.1.1.119 node$NODE up,替换为/usr/ucb/dhcp.client
    9. 然后修改/.licenses,将license添加进去
    10. 最后修改/etc/config/netmap,把网内的各个节点添加进去,完成
  3. 使用netmap –f,即时更新网络节点表,使用netmap可查看现有的 节点,使用alive可查看各节点的在线状况
  4. 如过网卡不灵等,可用以下命令来重启相关服务。
    1. slay Net
    2. Net &
    3. Net.ether2100 –l1 –p0x1080 –i9 &
    4. slay Socklet
    5. 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基础

  1. Build Boot Image
    1. /boot/build仍然是build启动映象的配置文件
    2. bios.build是X86通用的
    3. mkifs –v bios.build bios.img
  2. 在momentics中生成一个启动映象(支持硬盘和QNX4文件系统)
    1. 生成QNX System Builder Project,在build文件生成一节,选择导入/boot/build/bios.build文件。
    2. 双击打开project.bld,在binaries中加入devb-eide
    3. 在DLL中加入cam-disk.so、io-blk.so、fs-qnx4.so。
    4. 在share library中加入libcam.so.2
    5. 点击bios,右键菜单调出properties窗口,在SYSTEM的PATH、LD_LIBRARY_PATH中添加必要的路径,包括/bin:/sbin:/usr/bin:/usr/sbin等PATH以及/lib:/usr/lib等库路径。
    6. 修改bios.bsh,在PCI的section后增加硬盘驱动的部分

i. #start IDE drive

ii. devb-eide &

iii. waitfor /dev/hd0t79

iv. mount /dev/hd0t79 /

v. waitfor /bin

    1. 修改bios.bsh,在最后增加启动/etc/system/sysinit脚本的部分。

i. [+session] sh –c “/etc/system/sysinit”

ii. 最后注释掉ide驱动和这之间的其它部分。

    1. 编译生成bios.ifs,拷贝该文件到/.boot即可。
  1. 其它

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协议栈。

其它一些命令:

  1. 查看io-net中已经加载的驱动:ls /dev/io-net
  2. 查看网络中其它的qnet节点:ls /net
  3. 访问网络中其它的qnet节点:cd /net/nodename(切换到目标结点的根目录).至于节点名称,则是通过hostname来设置的。

最后,补充一个,在qnx里,msg_send是阻塞的。

 

您可能感兴趣的与本文相关的镜像

TensorFlow-v2.9

TensorFlow-v2.9

TensorFlow

TensorFlow 是由Google Brain 团队开发的开源机器学习框架,广泛应用于深度学习研究和生产环境。 它提供了一个灵活的平台,用于构建和训练各种机器学习模型

### QNX 操作系统简介 QNX 是一种基于微内核架构的实时操作系统 (RTOS),广泛应用于嵌入式领域,尤其是在汽车电子、工业自动化以及医疗设备等领域。其核心特性包括高可靠性、高性能和模块化设计[^1]。 #### 微内核架构的特点 QNX 的微内核架构使其能够实现高效的资源管理和灵活的任务调度。在这种架构下,只有最基本的系统服务运行于内核空间,而其他大部分组件(如文件系统、网络协议栈等)则作为独立的用户态进程运行[^3]。这种分离机制不仅提高了系统的安全性,也增强了可扩展性和稳定性。 #### 学习路径建议 对于初学者来说,可以从以下几个方面入手来熟悉并掌握 QNX: ##### 1. **安装与环境搭建** 需要先获取 QNX 软件开发平台 (SDP) 并完成安装设置。可以通过访问官方站点下载最新版本的 SDP;在此之前可能还需要创建一个 BlackBerry QNX 用户账户以便获得授权许可。 ##### 2. **理解基本概念** 探索有关 QNX Neutrino RTOS 的基础知识非常重要,这涵盖了诸如进程管理、线程同步、内存分配等方面的内容。特别注意的是它独特的消息传递模型用于进程间的通讯(IPC)。 ##### 3. **实践编程技能** 开始尝试编写简单的应用程序以巩固理论知识。例如,可以练习启动新进程或者通过发送/接收消息来进行两个程序之间的数据交换。以下是展示如何创建简单客户端服务器结构的一个例子: ```c #include <stdio.h> #include <sys/neutrino.h> int main() { int chid, coid; // 创建通道(供服务器端监听请求) if ((chid = ChannelCreate(0)) == -1){ perror("ChannelCreate failed"); return EXIT_FAILURE; } printf("Server waiting for messages...\n"); while(1){ struct _msg_info info; // 获取连接ID if((coid=MsgReceive(chid,&info,sizeof(info),NULL))==-1){ perror("MsgReceive failed"); break; } char reply[]="Message received!"; MsgReply(coid,strlen(reply)+1,(void*)reply,strlen(reply)+1); } return EXIT_SUCCESS; } ``` 此代码片段展示了服务器部分逻辑——建立信道等待来自客户的消息,并给予响应。 ##### 4. **深入研究特定主题** 随着经验积累,逐步探索更高级的主题比如多任务处理优化策略或是利用QNX提供的分层安全保障措施构建健壮的应用场景[^4]。 ##### 5. **参与社区交流活动** 充分利用由QNX及其关联伙伴所提供的教育资源和支持渠道,积极参与在线论坛讨论会或线下研讨会等活动形式进一步提升自我能力水平[^2]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值