gg电竞王官网-利用RTLinux开发嵌入式应用程序

  • 时间:
  • 浏览:1717
  • 来源:gg电竞王
本文摘要:针对我国技术工程师而言,运用动态Linux产品研发嵌入式应用程序流程是她们应对的艰辛之一,文中以RTLinux为例证,并结合尤其业内瞩目的是RTAI进行争辩,虽然这二种搭建方法在语法关键点上不会有差别,但工作方式基础一样,因而所描绘的內容对两者都仅限于。

针对我国技术工程师而言,运用动态Linux产品研发嵌入式应用程序流程是她们应对的艰辛之一,文中以RTLinux为例证,并结合尤其业内瞩目的是RTAI进行争辩,虽然这二种搭建方法在语法关键点上不会有差别,但工作方式基础一样,因而所描绘的內容对两者都仅限于。  在动态每日任务与用户进程相互之间通讯的全过程中,一些动态应用软件必须一切用户页面才可在后台管理清静地经营,殊不知,更为多的动态应用软件显而易见务必一个用户页面以及它系统功能,如文档作业者或连接网络等,全部这种作用都必不可少在用户室内空间内经营。难题是,用户室内空间作业者说白了可预测性的,并且与动态作业者不兼容。

  碰巧的是动态Linux具有一种可在時间上减弱动态和非动态作业者的体制,这类体制展示出为一种称之为动态FIFO的驱动程序。当insmod将rtl_fifo.o驱动程序放进Linux内核时,该驱动程序将自身备案为RTLinux的一部分,并沦落Linux驱动程序。

一旦放进Linux内核,用户室内空间进程和动态每日任务都可以用以动态LinuxFIFO。  在深入分析动态FIFO的关键点以前,也要汇总一下动态应用软件构造的一些一部分(图1)。合理地的嵌入式应用编程设计方式是将动态一部分与原有的非动态作用提取出来(报表1)。

假如应用软件的任一部分,如用户页面、图型、数据库查询或互联网仅有需要硬动态特性,最烂是将该一部分加载用户室内空间。随后,仅有将必不可少合乎时钟频率回绝的那一部分写动态每日任务。  注意,RTLinux(PSC,携带式数据信号编号)和RTAI(LXRT,Linux动态扩展)的最近版本号已应用了一种可在用户室内空间执行松软软动态每日任务的方式。

    一切软动态每日任务全是在RTLinux的操控下经营的,该每日任务一般可执行规律性每日任务、应急处置终断并与I/O机器设备驱动程序通讯,以搜集或键入模拟仿真和电子信息。当动态每日任务务必对他说用户进程有一个恶性事件将再次出现时,它以后将这一信息赠给动态FIFO。

每一个FIFO全是在一个方位上传输数据:从动态每日任务到用户室内空间,或相反。因而,双向通信务必用以2个FIFO。一切诵读或加载动态每日任务一侧的作业者都说白了控制模块作业者,因而rtf_put()和rtf_get()都马上返回,而无论FIFO情况是啥。

  从应用软件一侧看来,FIFO如同一个基本文档。默认设置状况下,RTLinux程序安装将在/dev文件目录下开创6?个动态FIFO连接点;假如务必,还必不可少自身开创新的连接点。比如,要开创/dev/rtf80,需要应用以下指令:  =========================  mknodc15080;  chmod0666/dev/rtf80  =========================  在其中,150是动态FIFO主数,而80是rtf80的频次。

  从用户进程的当作,动态FIFO可执行标准文件作业者。从动态每日任务看来,FIFO有二种通信方式:必需调用RTLinuxFIFO作用,或将FIFO做为一个RTLinux机器设备驱动程序,并用以open()、close()、read()和write()作业者。要要想将FIFO做为一个机器设备驱动程序,就必不可少将rtl_conf.h中的配置自变量CONFIG_RTL_POSIX_IO原做为1。  rtf_create_handler()可设定程序处理作用。

每一次Linux进程阅读或写成FIFO时,rtl_fifo驱动程序必须调用该程序处理。不可注意的是,该程序处理随时待命在Linux内核,因而当Linux务必调用时,从该程序处理进行一切内核调用全是安全系数的。从该程序处理到动态每日任务间的最烂通讯方式是用以旗语或进程即时作用。

最终,FIFO驱动程序还必不可少对内核储存器进行配置。因而,动态进程内的rtf_create()也不应调用。忽视,可调用init_module()中的rtf_create()作用及cleanup_module()中的rtf_destroy()作用。  比如,目录1得到了一个应用2个FIFO的比较简单数据收集应用软件的动态一部分。

2个FIFO全是在init_module()开创,并突显minornumbers为1和2。在调用rtf_create(minor,size)以前,该程序流程在已开创该FIFO的状况下调用rtf_destroy(minor)。

这类状况便是另一个控制模块在产品研发全过程中仍未被调用。随后,调用rtf_create_handler(ID,pd_do_aout)以备案带该动态FIFO的数据收集模拟输出作用pd_do_aout()。注意,开创动态进程pp_thread_ep()是由于它是规律性的,其间距为1/100秒。

  每一次规律性进程得到 系统软件决策权后,它就调用rtf_put(ID,dataptr,size)便于将数据信息放进minornumber为2的FIFO。Linux进程合上/dev/rtf2,从动态FIFO中载入并说明所搜集的数据信息。

该进程还合上/dev/rtf1,将数据信息加载其他动态FIFO。当用户挪动显示屏拖动器以变化模拟输出工作电压时,进程就向该FIFO加载一个新的值。

RTLinux以后调用pd_do_aout()程序处理,接着pd_do_aout()运用rtf_get()从FIFO获得值,并调用具体的硬件配置驱动程序以设定模拟输出的工作电压。能够看到,动态每日任务和用户进程是多线程用以FIFO的。

    每日任务间的储存器共享  FIFO为用户进程和动态每日任务的相接获得了一种便捷的体制,但将他们做为消息队列更为合适。例如,一个动态进程可运用FIFO纪录检测結果,随后用户进程就可载入该結果,并将之现钱数据文件。

  很多数据收集应用软件涉及到内核及用户室内空间中间的很多数据信息。Linux内核v.2.2.x并没为这种室内空间的信息共享获得一切体制,但v.2.4.0版本号预估不容易还包含kiobuf构造。为解决困难目前稳定内核的这一缺陷,RTLinux还包含mbuff驱动程序。

该驱动程序可运用vmalloc()分派虚幻世界内核储存器的已取名储存器地区,它应用的储存器分派和网页页面看准方法跟大部分Linux中bttv帧捕捉器(frame-grabber)驱动程序常用的一样。  更为具体地说,mbuff一页一页地将虚拟内存设置瞄准到具体的物理内存网页页面。

一切动态或内核每日任务,或用户进程在一切時间都可以访谈该储存器。根据将虚拟内存设置网页页面瞄准到物理内存网页页面,mbuff可确保所分派的网页页面永久性随时待命在物理内存,并且会再次出现页面错误。换句话说,当动态或内核进程访谈所分派的储存器时,它可确保VMM不被调用。注意:因为动态每日任务执行期内动态Linux无效规范内核的执行,一切对VMM的调用都是会引起系统软件终止。

假如它要访谈并不位于物理学RAM内的虚拟存储网页页面,那麼即便 长期的Linux内核驱动程序也不会引起系统异常。  因为mbuff是一种Linux驱动程序,其作用可根据机器设备连接点/dev/mbuff搭建。

该连接点可说明好多个加载点,在其中还包含可将内核室内空间地址映射到用户室内空间的mmap()。它还能够运用加载点ioctl()来操控。

殊不知,并不一定简易的构造及必需调用ioctl。忽视,mbuff能为ioctl()调用获得一个包复,并且代表着调用2个比较简单的作用才可配置和出狱共享的储存油压缓冲器。  自然,没法从动态每日任务调用mbuff驱动程序,由于该驱动程序所调用的虚拟存储器分派作用自身是可变性作业者。

分派共享存储器需要的時间依靠主系统软件的储存器容积及其CPU速率、磁盘驱动器特性和储存器分派的目前情况。因而,不可以从控制模块的Linux内核一侧来分派共享存储器,例如从init_module()或一个ioctl()督促刚开始。  那麼,一个共享油压缓冲器到底能分派是多少储存器呢?要不是任重道远的网络服务器或图型运用于,提议至少为Linux享有8MB储存空间。为了更好地获得提升的配置,可在允许储存器尺寸的另外精确测量动态应用软件的特性,以确定务必是多少储存空间。

  目录2得到了怎样从动态每日任务和用户进程层面访问共享的储存器。内核控制模块和用户每日任务应用某种意义的功能集。

自然,要要想用以insmodmbuff.o,还必不可少将之放置Linux内核中。比如,mbuff_alloc(buf_name,size)可将符号名buf_name分派给一个油压缓冲器,而mbuff_free(buf_name,mbuf)可将之出狱。

  当第一次调用具备标记油压缓冲器名的mbuff_alloc()时,mbuff执行具体的储存器分派。而当从内核控制模块或用户进程再一次调用该作用时,它仅仅比较简单地降低用以数(usagecount)及将表针返回目前的油压缓冲器。每一次调用mbuff_free()都是会提升用以数,之后为零,这时候mbuff就要分派带符号名的油压缓冲器。

这类方式从好几个内核控制模块和用户进程获得一个偏向同一共享油压缓冲器的表针,进而解决困难了难题。它还可确保共享油压缓冲器依然合理地,直至最终的应用软件出狱它。

一定要注意,是动态内核還是用户进程执行具体的buf1配置依靠谁再作获得决策权。  还有一个笨方式可在动态应用软件、内核控制模块和用户应用软件间共享存储器。针对嵌入式应用,该方式還是能够拒不接受的。


本文关键词:gg电竞王,gg电竞王官网

本文来源:gg电竞王-www.runguan.com.cn