基于QNX的图像采集系统的设计与软件实现

时间:2022-07-08 01:28:28

基于QNX的图像采集系统的设计与软件实现

摘 要QNX系统是面向嵌入式应用的高性能实时操作系统,基于qnx图像采集系统可用于对稳定性和可靠性要求较高的工业及其他特殊环境中。本文简要分析了QNX视频采集系统的驱动原理,定制了用于视频采集的QNX嵌入式系统,并利用C++语言编写了基于工业摄像机抓取图像的上层应用程序,通过抓取一桢图像的实验,验证了该设计方法的可行性。

【关键词】QNX 图像采集 系统定制 驱动开发

1 前沿

随着工控自动化技术的发展,工业领域中的大数据量视频数据采集对实时性和稳定性的要求越来越高。QNX Neutrino实时操作系统是一种功能全面、运行稳健的操作系统,其真正的微内核设计和模块化架构可帮助使用者以极低的成本创建高度优化和超可靠的系统。基于QNX操作系统进行视频数据采集可有效满足工业环境对实时性和稳定性的要求。但QNX作为一款专用的嵌入式操作系统也存在开发难度大,开发周期长等问题,如何能够快速开发基于QNX的工业摄像机使用的驱动程序模块推广应用QNX系统的重要基础。

2 QNX系统介绍

QNX是一个分布式、微内核、抢占式、多用户、多任务、可嵌入式的实时操作系统。被广泛应用到电信、航天仪器、工业自动化等方面[1]。QNX有独特的微内核和进程管理单元,以及基于消息传递的进程通信机制,同时采用内核调度的抢占式优先级进程管理,使得系统保证在任务时间内完成对上下文的快速切换,具有极好的实时性。在QNX Neutrino 环境下,所有驱动程序、应用程序、协议栈和文件系统都在内核以外的内存受保护的用户空间内安全运行。QNX操作系统符合POSIX基本标准和实时标准,使其应用可以方便的进行移植。QNX的微内核仅提供进程通信、进程调度、中断处理和底层网络通信等4中服务。

QNX设备驱动与其他操作系统的设备驱动有所不同,其驱动程序与内核运行在不同的地址空间中,即设备驱动无需编译到内核中去,而是由QNX特有的资源管理器管理,资源管理器负责给不同类型的设备提供接口。同时,不同的设备驱动还可以通过消息传递的方式,经过进程管理器,将消息传递给其他设备驱动。QNX的网络驱动核心是Network Manager, 应用程序调用函数库中的函数,通过消息传递机制访问资源管理器,并通过TCP/IP协议调用资源管理器中的函数与驱动程序进行连接。网络驱动模块的原理图如图1所示。

3 QNX系统定制

开发QNX驱动程序前首先需要定制系统,其过程为:构建Buildfile->编译Buildfile生成系统映像文件->启动目标系统->嵌入式系统软件设计。

其中最重要的就是构建Buildfile。在通常的嵌入式系统中,都需要一个可启动的操作系统映像文件(OS Image)。构建Buildfile的过程就是配置操作系统映像的过程。Buildfile由三部分组成,分别为bootstrap script(启动引导脚本)、startup script(启动脚本)、file list(文件列表)。

首先构建Buildfile。bootstrap script如下所示,

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

Start-bIOS CNtarget

PATH=/proc/boot:/bin:/sbin:/usr/bin:/usr/sbin:/usr/photon/bin

LD_LIBRARY_PATH=/proc/boot:/dev/shmem:/lib:/lib/dll:/usr/lib:/usr/lib/dll procnto}

其中“virtual” 表明该Buildfile将构造一个与启动时产生的虚拟地址空间相对应的启动映象。关键词“x86,bIOS” 则分别指处理器(x86)和机器类型(通过bIOS启动)。而“+compress”使得映象文件被压缩,以产生更小的映象文件。startup-bIOS是运行于具有BIOS的PC兼容系统的可执行程序,主要负责利用BIOS检测PC硬件资源。启动脚本是在系统启动后自动执行的一系列命令列表,可在此对系统进行初步配置,如网络配置,显卡设置等操作。

将制作好的Buildfile导入到IDE中,编译生成MyCamera.ifs文件。在开发机上将MyCamera.ifs复制到目标机的/net/Target/.boot中,这样就可以实现目标机自动启动QNX系统,系统定制完成。

4 软件实现

4.1 安装API函数库

本系统采用了德国basler pylon piA2400-17gc摄像头,分辨率为2454*2056,帧速率可以达到17fps,采用千兆网卡接口,位深度为12bits。视频采集卡采用intel PRO1000网卡。使用该摄像头需要在目标机上安装API函数库和设置环境变量,内容如下所示:

sudo md /opt/pylon

sudo tar -C /opt/pylon -xzf pylon-bininst-32.tar.gz

export PYLON_ROOT=/opt/pylon

export GENICAM_ROOT_V2_1=${PYLON_ROOT}

export LD_LIBRARY_PATH=${PYLON_ROOT}/lib:${GENICAM_ROOT_V2_1}/bin/Linux32_i86:$LD_LIBRARY_PATH

mkdir -p $HOME/genicam_xml_cache export GENICAM_CACHE_V2_1=$HOME/genicam_xml_cac-he

上一篇:计算机网络安全隐患及其维护措施 下一篇:基于国家电网公司的电力大数据的应用