吴文河,鞠晓东,成向阳,卢俊强,邓 林
(1.中国石油大学油气资源与探测国家重点实验室,北京 102249;2.中国石油大学石油工程学院,山东青岛 266555;3.中国石油集团测井有限公司华北事业部,河北任丘 062552)
基于uClinux的测井仪器调试台架前端机软件设计
吴文河1,鞠晓东1,成向阳2,卢俊强1,邓 林3
(1.中国石油大学油气资源与探测国家重点实验室,北京 102249;2.中国石油大学石油工程学院,山东青岛 266555;3.中国石油集团测井有限公司华北事业部,河北任丘 062552)
介绍一种基于uClinux系统平台的调试台架前端机软件设计方案,软件由驱动程序和应用程序两部分构成。为满足仪器测试中实时高速大数据通讯要求,实时控制局域网总线(CAN)和井下仪器总线(DTB)通讯功能由驱动程序完成。应用程序实现人机交互、与上位机网络通讯等实时性要求不高的功能。驱动程序与应用程序之间的信息交换由异步通知信号实现。所提方案已成功应用到微电阻率扫描、阵列感应、多极阵列声波等系列化成像测井仪器调试台架之中,并且加快了这些仪器的研制及维护效率。
测井仪器;调试台架;uClinux;软件设计;驱动程序;异步通知
测井仪器调试台架在当前高端成像测井仪器的研制、调试及维护过程中有着非常重要的作用。中国石油大学(北京)鞠晓东等[1]进行了基于嵌入式架构的测井仪器调试台架的系统设计,该系统采用主从式结构,主机和前端机通过以太网互联,前端机基于ARM7技术,通过配接不同的扩展卡可组成不同功能的测试台架。笔者结合该系统前端机硬件平台及测试功能需求,设计基于uClinux操作系统的模块化前端机控制软件。
仪器调试台架系统[1]采用通过以太网互联的先进体系结构,上位机与前端机之间采用基于连接的C/S(客户端/服务器)工作模式进行通讯[2-3],整体组成结构如图1所示。前端机由AMR7核心电路板、遥传测试和人机交互功能板及各种板级/部件级调试接口板等组成。遥传测试板具有2路CAN和1路DTB,用于仪器整体调校。CAN为控制局域网总线——EILog06系统井下仪器总线,DTB总线为斯伦贝谢CTS系统兼容的井下仪器总线(EILog05系统井下仪器使用)[4]。外接的通用下井仪器电源通过核心板RS232口程控操作。台架系统设计了板级/部件级调试接口,配接不同的仪器功能电路板或部件测试板卡后即可构成相应的测井仪器调试台架。
图1 仪器调试台架结构框图Fig.1 Block diagram of tool test system
仪器调试台架采用前后台设计的优点在于上位机只须实现测试命令下发及测试数据的分析处理,而实时性要求高的CAN/DTB总线通讯、仪器子功能电路或部件测试等任务由前端机完成。仪器调试台架要实现对各种仪器整机及部件的测试,关键在于如何实现前端机与上位机高速以太网通讯,即要实现TCP/IP协议。开源的Linux系统包含了完整的TCP/IP网络协议,由于前端机采用基于ARM7TDMI的 S3C44B0,内部没有存储管理单元MMU[5],不能运行 Linux,但可运行 uClinux 系统。uClinux是针对没有MMU的微处理器而设计的,从Linux 2.0/2.4内核派生而来,沿袭了Linux的绝大部分特征,具有体积小、良好的移植性、优秀的网络功能及多文件系统支持等特点。
前端软件在uClinux 2.4系统平台上实现,包括驱动程序、应用程序两部分,驱动程序实现CAN/DTB实时高速通讯及键盘键值读取等任务,应用程序则完成实时性要求不高的任务。嵌入端程序架构如图2所示。其中,网络通讯模块实现ARM端与PC端以太网socket连接功能,命令响应及板卡接口模块功能为响应PC机下传命令并对相应调试板卡进行控制及操作,驱动接口实现与驱动程序的异步消息接口及数据交换功能,界面显示及键值处理模块实现了前端机本地人机交互功能,LCD接口模块完成基本的图形绘制及文字显示功能。前端软件采用模块化设计,为各种调试板卡设计了程序接口,便于功能扩展。
图2 嵌入端测控软件架构Fig.2 Frame diagram of embedded system software
uClinux中的设备可以分为3类:字符设备、块设备和网络设备[6]。本软件驱动程序为字符型设备,主要实现遥传测试板上的两路CAN、一路DTB仪器端、一路DTB遥测端及键盘的实时驱动功能。本驱动程序设计的关键和难点在于如何实现大量通讯数据的快速实时收发,及如何实现驱动与应用程序快速数据和信息交换。为了实现总线实时高速数据收发功能,在驱动程序中为每路CAN和DTB分别设计4KB的系统缓存和专门的中断处理,驱动程序在中断驱动下自动操作数据缓存完成仪器数据帧的收发,驱动程序在仪器数据帧收发完成后向应用程序发出异步通知,应用程序接收到异步通知后只读取或提供仪器数据帧即可,这样提高了通讯速率及程序运行效率。
驱动程序初始化过程如下:首先对CAN、DTB及键盘的相关硬件进行初始化,再使用registerchrdev(TELECOM-MAJOR,"tl",&telecom-fops)函数注册驱动程序,然后使用request-irq(22,telecom-interrupt,SA-INTERRUPT,"tl",NULL)将中断处理函数telecom-interrupt装载入内核,最后驱动程序开放中断并进入休眠状态[6-10]。
驱动程序注入内核后处于休眠状态,只有在应用程序调用或设定的中断产生才会开始工作。驱动程序中断响应处理流程如图3所示。
图3 驱动程序中断处理流程图Fig.3 Interrupt processing flow chart of device driver
当有中断发生时,驱动程序依次判断是否为键盘、CAN、DTB仪器端或DTB遥测端,执行相应的操作并保存中断标志,然后使用kill-fasync(&asyncqueue,SIGIO,POLL-IN)函数向应用程序发送SIGIO异步信号。
应用程序与驱动程序处于不同的运行内存空间,不能直接进行数据交换,驱动程序通过copyto-user和 copy-from-user两个函数实现与应用程序之间的数据交换[6]。驱动程序加载方法有直接编译入内核和动态加载两种,前者需要修改uClinux的编译配置文件,而且每次修改驱动程序后均要重新编译操作系统,后者将操作系统与驱动程序分开编译,使用insmod指令将驱动程序加载到内核中,便于程序调试与修改。
应用程序运行主流程如图4(a)所示。应用软件启动后,首先初始化LCD并通过setitimer函数及signal(SIGALRM,TimerFunc)函数设置键值处理及界面定时更新函数,再进行硬件驱动程序初始化并调用sigaction(SIGIO,&action,NULL)函数设置异步信号响应函数,然后初始化网络socket并尝试连接到PC主机,如果socket连接成功,则进入命令接收和网络状态检测循环。PC主机下发的命令主要包括测试板卡操作命令和仪器总线命令。应用程序收到命令后会先判断类型,如果是板卡操作命令则直接进行相应的IO地址操作,如果是仪器总线命令则使用ioctl函数调用驱动程序并由驱动程序执行具体的操作。应用程序接收命令的同时程序会监视网络连接状态,如果网络连接不可用,则重新进行socket连接操作。
驱动程序检测到有中断产生后做相应处理并保存当前中断状态,然后向应用程序发出SIGIO异步信号。应用程序在接收到SIGIO异步信号后,中断当前操作,进入异步信号处理流程,流程如图4(b)所示。异步信号处理流程首先通过ioctl函数查询驱动程序中保存的中断标志,然后根据该标志做出相应的处理。如果是DTB/CAN中断请求,应用程序先通过ioctl函数调用与驱动程序进行相应的数据交换,再判断是否由本地处理,否则就将数据打包通过网络发送给PC主控端,然后返回主程序。如果是键盘中断,应用程序先从驱动程序中取回当前的按键值,然后置按键标志,直接返回主程序。
针对不同功能的仪器调试台架只是仪器功能电路板或部件测试板卡不同这一特点,将应用程序分为主模块及测试板驱动模块两部分。主模块中除了包括网络通讯、驱动程序接口、人机交互等子模块外,还特别设计了板卡驱动接口子模块。主模块和板卡驱动模块可分开编译,这样就可以非常方便地添加不同板卡的驱动模块而且便于程序维护。
图4 应用软件主程序流程图Fig.4 Main program flow chart of application software
驱动程序和应用程序编译好后需要将它们设置成开机自主运行方式,具体步骤如下:应用程序和驱动程序编译好后,将其拷贝至已经编译好的uClinux操作系统可执行文件romfsin目录下,同时在启动配置文件vendorssamsung44b0x c中使用insmod指令加载驱动程序并将启动应用程序的命令加入该文件末尾,然后用make romfs和make image命令即可生成系统镜像文件,将该镜像文件写入FLASH中即可实现开机自主运行。
结合仪器调试台架硬件架构的特点,设计了基于uClinux操作系统平台的嵌入式前端机控制软件。嵌入端软件采用了模块化设计方法,实现了异步中断处理、与上位机异步网络通讯、本地人机交互等功能,并提供了板卡驱动扩展接口。该嵌入式前端软件在微电阻率扫描仪、阵列感应测井仪、多极子阵列声波测井仪等调试台架中成功应用。图5所示为采用本软件的声波测井仪通用调试台架实物图,该台架可对国产多极子声波(MPAL)、井下声波电视等仪器进行调试检测。
图5 声波测井仪通用调试台架实物图Fig.5 Object of test-bench for acoustic logging tools
[1]鞠晓东,成向阳,卢俊强,等.基于嵌入式架构的测井仪器调试台架系统设计[J].测井技术,2009,33(3):270-274.
JU Xiao-dong,CHENG Xiang-yang,LU Jun-qiang,et al.Design of test-bench system for logging tools based on embedded structures[J].Well Logging Technology,2009,33(3):270-274.
[2]王旭升,鞠晓东.声波换能器高温测试系统的数据通讯[J].中国石油大学学报:自然科学版,2009,33(2):53-57.
WANG Xu-sheng,JU Xiao-dong.Data communication for high temperature test system of acoustic wave transducer[J].Journal of China University of Petroleum(Edition of Natural Science),2009,33(2):53-57.
[3]鞠晓东,乔文孝,成向阳,等.基于网络互联的嵌入式数据采集与控制系统设计[J].计算机测量与控制,2010,18(5):1073-1078.
JU Xiao-dong,QIAO Wen-xiao,CHENG Xiang-yang,et al.Embedded data acquisition and control system design based on ethernet connection[J].Computer Measurement& Control,2010,18(5):1073-1078.
[4]汤天知.EILog测井系统技术现状与发展思路[J].测井技术,2007,31(2):99-102.
TANG Tian-zhi.Technical present and future developing consideration on EILog logging system[J].Well Logging Technology,2007,31(2):99-102.
[5]Samsung Electronics.S3C44B0X data sheet[EB/DK].Samsung Electronics,2002.
[6] JONATHAN Corbet,GREG Kroah-Hartman,ALESSANDRO Rubini.Linux device drivers[M].3rd ed.Sebastopol:O'Reilly,2005.
[7] 李俊.嵌入式Linux设备驱动程序开发详解[M].北京:人民邮电出版社,2008:23-30.
[8] 宋宝华.Linux设备驱动开发详解[M].北京:人民邮电出版社,2008:173-188.
[9]兰晓红.嵌入式Linux中断设备驱动程序设计[J].计算机应用研究,2003(5):96-98.
LAN Xiao-hong.The design of interrupt device driver in embedded Linux operating system [J].Application Research Of Computers,2003(5):96-98.
[10]张威,黄冲.嵌入式Linux设备驱动的设计方法研究[J].江西师范大学学报:自然科学版,2007,31(4):391-393.
ZHANG Wei,HUANG Chong.Study on the design and program of device driver in embedded Linux system[J].Journal of Jiangxi Normal University(Natural science),2007,31(4):391-393.
Design of front-end computer software for logging tool test-bench based on uClinux
WU Wen-he1,JU Xiao-dong1,CHENG Xiang-yang2,LU Jun-qiang1,DENG Lin3
(1.State Key Laboratory of Petroleum Resources and Prospecting in China University of Petroleum,Beijing 102249,China;2.College of Petroleum Engineering in China University of Petroleum,Qingdao 266555,China;3.Division of Northern China,China Petroleum Logging Company Limited,Renqiu 062552,China)
A design conception of front-end computer software based on uClinux for logging tools test-bench was described.The front-end software is capable of high-speed asynchronous communication and expandability,and composed of user program and device driver.The urgent tasks such as controller area network and downhole tool bus communication are implemented in the device driver,and meanwhile non-emergency tasks are processed in the user program.The data exchange between user program and driver is implemented through asynchronous notification.The test-benches of serialization imaging logging instruments for micro-resistivity image tool,array induction tool,multipole array acoustic tool and so on,which are based on this software,are successfully designed and developed.
logging tool;test-bench;uClinux;software design;device driver;asynchronous notification
TP 311.1
A
10.3969/j.issn.1673-5005.2011.03.012
1673-5005(2011)03-0063-04
2010-11-01
国家“863”项目(2006AA060102)
吴文河(1976-),男(汉族),湖北潜江人,博士研究生,主要从事声波测井基础实验和仪器电路的研究工作。
(编辑 修荣荣)