CN117435359A - 一种基于Linux字符型设备驱动的数据流式计算方法 - Google Patents

一种基于Linux字符型设备驱动的数据流式计算方法 Download PDF

Info

Publication number
CN117435359A
CN117435359A CN202311176614.0A CN202311176614A CN117435359A CN 117435359 A CN117435359 A CN 117435359A CN 202311176614 A CN202311176614 A CN 202311176614A CN 117435359 A CN117435359 A CN 117435359A
Authority
CN
China
Prior art keywords
data
character type
type device
device driver
data processing
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202311176614.0A
Other languages
English (en)
Inventor
白鸿国
王旭
朱兴运
李艳
禚一
王浩
刘思明
魏剑峰
周勇军
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
China Railway Design Corp
Original Assignee
China Railway Design Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by China Railway Design Corp filed Critical China Railway Design Corp
Priority to CN202311176614.0A priority Critical patent/CN117435359A/zh
Publication of CN117435359A publication Critical patent/CN117435359A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/546Message passing systems or structures, e.g. queues
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/54Indexing scheme relating to G06F9/54
    • G06F2209/547Messaging middleware
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明公开了一种基于Linux字符型设备驱动的数据流式计算方法,包括以下步骤:创建字符型设备驱动作为数据节点;对创建的字符型设备驱动进行初始化;创建数据处理中间件;基于创建的数据处理中间件,挂载数据节点;数据处理中间件从前一个数据节点中读取数据;数据处理中间件向后一个数据节点中写入数据;完成数据流式计算。本发明基于Linux字符型设备驱动,通过数据节点之间的数据处理中间件,将铁路工程监测数据的上传过程拆分成若干节点,增加了数据处理中间环节,可以在中间环节进行数据清洗、数据过滤等操作,只将有效数据上传至远程服务器。本发明该方法提高了算法代码的可复用性和处理过程的可观测性。

Description

一种基于Linux字符型设备驱动的数据流式计算方法
技术领域
本发明属于铁路工程智能运维监测技术领域,具体涉及一种基于Linux字符型设备驱动的数据流式计算方法。
背景技术
截至2022年底,全国铁路营运里程已逾15万公里,其中高速铁路营运里程达4.2万公里,且铁路工程建设仍在如火如荼进行。为保障铁路列车的行车安全性和行车稳定性,需要对铁路路基、桥梁、隧道等结构性建筑物进行监测,以预防危险事故的发生。
铁路运营监测中常用的有沉降计、水准仪、全站仪、倾角仪、风速风向仪等多种传感器监测设备,这些设备都有其各自的采集单元用来从物理世界中采集数据,然后通过采集仪将采集到的数据直接发送给远程服务器。
Linux字符型设备驱动(Linux Device Drivers)是连接字符型设备和Linux操作系统内核的桥梁,所述的字符型设备指必须以字节流的形式进行I/O的设备,例如鼠标、键盘、串口等都属于字符型设备,字符型设备是面向用户的,所有的字符型设备均被映射到Linux文件系统的文件和目录,用户可以对字符型设备进行打开、关闭、读取、写入等操作,这些操作会相应调用字符型设备驱动中实现的系统调用接口open()、close()、read()、write(),从而建立起字符型设备与操作系统内核之间的联系。因此通过在Linux字符型驱动中对open()、close()、read()、write()等系统调用接口进行功能增强或修改,可以实现一些自定义的功能。
目前,绝大多数的监测系统采取的方式是由服务器直接接收各个采集仪上传的全部原始数据,对数据的分析和处理均在服务器上完成,这种方式有以下几个弊端:
其一、异常数据与正常数据均会均上传至服务器,缺少数据处理中间环节,例如进行数据清洗等。
其二、所有数据的分析和计算均在服务器上进行,对服务器的计算能力要求较高,算法代码的可复用性差。
其三、所有的算法均在服务器上部署,当最终的计算结果出错时,很难判断是由于哪个算法错误导致的,数据处理过程的可观测性差。
针对以上问题,有必要研究一种应用在铁路工程智能运维监测领域,基于Linux字符型设备驱动的对铁路监测数据进行流式处理的方法,用以解决铁路监测业务中在数据分析处理方面遇到的实际问题。
发明内容
本发明为解决现有技术存在的问题而提出,其目的是提供一种基于Linux字符型设备驱动的数据流式计算方法。
本发明的技术方案是:一种基于Linux字符型设备驱动的数据流式计算方法,包括以下步骤:
A.创建字符型设备驱动作为数据节点;
B.对创建的字符型设备驱动进行初始化;
C.创建数据处理中间件;
D.基于创建的数据处理中间件,挂载数据节点;
E.数据处理中间件从前一个数据节点中读取数据;
F.数据处理中间件向后一个数据节点中写入数据;
G.完成数据流式计算。
更进一步的,步骤A创建字符型设备驱动作为数据节点,具体过程如下:
首先,将字符型设备驱动作为数据节点,数据节点作为数据的暂存场所;
然后,根据流式计算中应用的算法数量确定数据节点的数量,从而确定需要创建的字符型设备驱动数量;
最后,对数据节点中的设备号进行定义。
更进一步的,步骤A中对数据节点中的设备号进行定义,具体过程如下:
首先,数据节点中的设备号分为主设备号和次设备号;
然后,将主设备号定义为相同;
最后,将次设备号从零递增进行定义。
更进一步的,步骤B对创建的字符型设备驱动进行初始化,具体过程如下:
首先,创建的字符型设备驱动包括打开open()、读取read()、写入write()内核态函数;
然后,对字符型设备驱动的打开open()、读取read()、写入write()功能进行增强。
更进一步的,步骤B中对字符型设备驱动的打开open()功能进行增强,具体过程如下:
首先,在字符型设备驱动进行文件读写之前均需要先打开;
然后,对打开open()功能进行增强,使同一时间只能有一个进程以相同方式打开字符型设备。
更进一步的,步骤B中对字符型设备驱动的读取read()功能进行增强,具体过程如下:
在读取read()功能中设置阻塞机制,等待写入进程唤醒,当有新数据写入时取消阻塞。
更进一步的,步骤B中对字符型设备驱动的写入write()功能进行增强,具体过程如下:
向字符型设备驱动中写入数据,同时唤醒读取进程。
更进一步的,步骤C创建数据处理中间件,具体过程如下:
首先,在两个数据节点之间,创建数据处理中间件;
然后,将数据处理的对应算法植入到数据处理中间件中,完成数据处理。
更进一步的,步骤D基于创建的数据处理中间件,挂载数据节点,具体过程如下:
首先,根据数据处理中间件的数量确定挂载数据节点的数量;
然后,将挂载数据节点与数据处理中间件一同建立起数据传输通道。
更进一步的,所述数据传输通道为单向的数据传递通道,数据传输通道中数据节点与数据处理中间件间隔设置。
本发明的有益效果如下:
本发明基于Linux字符型设备驱动,通过数据节点之间的数据处理中间件,将铁路工程监测数据的上传过程拆分成若干节点,增加了数据处理中间环节,可以在中间环节进行数据清洗、数据过滤等操作,只将有效数据上传至远程服务器。
本发明该方法提高了算法代码的可复用性和处理过程的可观测性。
附图说明
图1 是本发明中字符型驱动的构建流程图;
图2 是本发明中实时数据流示意图。
具体实施方式
以下,参照附图和实施例对本发明进行详细说明:
如图1至图2所示,一种基于Linux字符型设备驱动的数据流式计算方法,包括以下步骤:
A.创建字符型设备驱动作为数据节点;
B.对创建的字符型设备驱动进行初始化;
C.创建数据处理中间件;
D.基于创建的数据处理中间件,挂载数据节点;
E.数据处理中间件从前一个数据节点中读取数据;
F.数据处理中间件向后一个数据节点中写入数据;
G.完成数据流式计算。
步骤A创建字符型设备驱动作为数据节点,具体过程如下:
首先,将字符型设备驱动作为数据节点,数据节点作为数据的暂存场所;
然后,根据流式计算中应用的算法数量确定数据节点的数量,从而确定需要创建的字符型设备驱动数量;
最后,对数据节点中的设备号进行定义。
步骤A中对数据节点中的设备号进行定义,具体过程如下:
首先,数据节点中的设备号分为主设备号和次设备号;
然后,将主设备号定义为相同;
最后,将次设备号从零递增进行定义。
步骤B对创建的字符型设备驱动进行初始化,具体过程如下:
首先,创建的字符型设备驱动包括打开open()、读取read()、写入write()内核态函数;
然后,对字符型设备驱动的打开open()、读取read()、写入write()功能进行增强。
步骤B中对字符型设备驱动的打开open()功能进行增强,具体过程如下:
首先,在字符型设备驱动进行文件读写之前均需要先打开;
然后,对打开open()功能进行增强,使同一时间只能有一个进程以相同方式打开字符型设备。
步骤B中对字符型设备驱动的读取read()功能进行增强,具体过程如下:
在读取read()功能中设置阻塞机制,等待写入进程唤醒,当有新数据写入时取消阻塞。
步骤B中对字符型设备驱动的写入write()功能进行增强,具体过程如下:
向字符型设备驱动中写入数据,同时唤醒读取进程。
步骤C创建数据处理中间件,具体过程如下:
首先,在两个数据节点之间,创建数据处理中间件;
然后,将数据处理的对应算法植入到数据处理中间件中,完成数据处理。
步骤D基于创建的数据处理中间件,挂载数据节点,具体过程如下:
首先,根据数据处理中间件的数量确定挂载数据节点的数量;
然后,将挂载数据节点与数据处理中间件一同建立起数据传输通道。
所述数据传输通道为单向的数据传递通道,数据传输通道中数据节点与数据处理中间件间隔设置。
具体的,步骤A中,数据节点的数量是在算法数量的基础上加1。所述主设备号、次设备号是指在字符型设备驱动中起标识作用的编号,在创建字符型设备时需要作为参数提供。
具体的,步骤B中,对打开open()进行增强时,同一时间只能有一个进程以相同方式打开字符型设备,该相同方式是指读取或者写入。
步骤B中打开open()、读取read()、写入write()函数均属于内核态函数。
具体的,步骤C中数据处理中间件安装在两个数据节点之间,数据处理中间件主要是指相关数据处理算法,用于读取前一个数据节点中的数据,完成数据处理后,再将处理结果写入到下一个数据节点中。
本申请中,数据处理中间件的数量根据实际业务需求确定,数据处理中间件包含但不限于使用python、Java、C等语言进行开发,本发明不对算法的开发语言进行限定。
具体的,步骤E数据处理中间件从前一个数据节点中读取数据,具体过程如下:
首先,运行数据处理中间件,数据处理中间件会通过用户态的read()函数调用字符型设备驱动在步骤B实现的内核态read()函数;
然后,内核态的read()函数阻塞并等待唤醒,即当有数据写入到前一个数据节点时,数据处理中间件被唤醒读取数据节点中的数据,并在数据处理中间件中完成计算。
具体的,步骤F 数据处理中间件向后一个数据节点中写入数据,具体过程如下:
首先,数据处理中间件完成计算后,数据处理中间件会通过用户态的write()函数调用字符型设备驱动在步骤B实现的内核态write()函数;
然后,内核态的write()函数向后一个数据节点中写入数据,并唤醒数据节点的读取进程。
具体的,步骤G完成数据流式计算,具体过程如下:
重复步骤E和步骤F,完成数据的流式处理。
具体的,步骤B初始化字符型设备驱动是指实现字符型设备驱动file_operations结构体中打开open()、写入write()、读取read()等成员函数,并进行初始化。
file_operations结构体是字符型设备驱动中的一组函数指针,用于定义处理字符型设备的操作,包括打开、读取、写入、关闭等。
file_operations在创建字符型驱动时注册,在应用程序对字符型设备进行操作时调用。
具体的,步骤D中挂载数据节点是指在Linux操作系统中将字符型设备与文件系统进行关联的方法,实现用户对字符型设备的访问和操作,挂载在Linux文件系统/dev/路径下。
具体的,所述数据处理中间件对数据进行处理计算,具体分为三个步骤,分别是读取前一数据节点中的数据、数据计算、将计算结果写入下一个数据节点。
具体的,所述用户态函数是指在用户空间运行的函数,本发明中指的是在数据处理中间件中运行的函数,用户态的函数无法直接访问系统的底层资源,本发明中指的是字符型设备。
具体的,所述内核态函数指的是在内核空间运行的函数,可以直接访问系统的底层资源。用户态函数想要访问系统底层资源时,必须通过系统调用切换到内核态,将参数传递给内核进行处理。
例如数据处理中间件想要进行文件的写入时,数据处理中间件中用户态的write()函数会调用字符型设备驱动中file_operations结构体中声明的内核态的write()函数,完成数据的写入。
本发明针对的数据是指铁路工程运维监测过程中随着时间推移由传感器或采集仪连续不断产生的原始数据,该原始数据以字符串的形式逐个写入到首个数据节点中。
实施例
A.创建字符型设备驱动,创建三个字符型设备驱动作为数据节点。具体为:
a1.调用MKDEV()系统调用函数,注册三个字符型设备驱动,主设备号相同,次设备号分别是0,1,2。
a2.调用kzalloc()系统调用函数,从内核的地址空间给字符型设备驱动分配内存。
a3.声明file_operations结构体,并定义结构体成员open、write、read,三个成员函数的实现均属于内核态函数。
a4.调用cdev_init()、cdev_add()、register_chrdev_region()、device_create()等系统调用函数创建字符型设备驱动。
B.初始化字符型设备驱动,分别实现步骤一中声明的file_operations结构体中各成员函数,具体如下:
b1.open成员函数
首先,命名为node_open(),用户态的open()函数将以读取(read)或写入(write)的方式调用内核态node_open()函数打开字符型设备。
然后,node_open()函数将进行判断,同一时间只能有一个进程以相同方式打开字符型设备。
b2.read成员函数
首先,命名为node_read(),用户态在调用read()函数从字符型设备中读取数据时会调用内核态node_read()函数。
然后,node_read()函数首先会调用wait_event_interruptible()系统调用函数判断是否要阻塞,判断条件为当前是否有数据可被读取。
再后,如果当前没有数据可被读取,则该进程将阻塞。
最后,如果有数据可被读取,则node_read()函数将会调用copy_to_user()系统调用函数将字符型设备中的数据返回给用户态函数。
b3.write成员函数
首先,命名为node_write(),用户态在调用write()函数写入字符型设备时会调用内核态node_write()函数。
然后,node_write()函数将会调用copy_from_user()系统调用函数将数据写入到字符型设备中,同时调用wait_up_interruptible()系统调用函数解除该字符型设备驱动读取(read)进程的阻塞。
C.创建2个数据处理中间件,分别设置在两个数据节点之间,并为每个数据处理中间件编写相关算法,包含但不限于使用python、Java、C等语言进行开发。
D.挂载三个字符型设备,分别作为数据节点-1(/dev/node_data0)、数据节点-2(/dev/node_data1)、数据节点-3(/dev/node_data2),与步骤三中的数据处理中间件共同组成数据传输通道。
E.数据处理中间件-1将读取数据节点-1中的数据,经过计算后再写入数据节点-2。
F.数据处理中间件-2读取数据节点-2中的数据,经过计算后再写入数据节点-3,以流的方式完成数据处理。
本发明基于Linux字符型设备驱动,通过数据节点之间的数据处理中间件,将铁路工程监测数据的上传过程拆分成若干节点,增加了数据处理中间环节,可以在中间环节进行数据清洗、数据过滤等操作,只将有效数据上传至远程服务器。
本发明该方法提高了算法代码的可复用性和处理过程的可观测性。

Claims (10)

1.一种基于Linux字符型设备驱动的数据流式计算方法,其特征在于:包括以下步骤:
A.创建字符型设备驱动作为数据节点;
B.对创建的字符型设备驱动进行初始化;
C.创建数据处理中间件;
D.基于创建的数据处理中间件,挂载数据节点;
E.数据处理中间件从前一个数据节点中读取数据;
F.数据处理中间件向后一个数据节点中写入数据;
G.完成数据流式计算。
2.根据权利要求1所述的一种基于Linux字符型设备驱动的数据流式计算方法,其特征在于:步骤A创建字符型设备驱动作为数据节点,具体过程如下:
首先,将字符型设备驱动作为数据节点,数据节点作为数据的暂存场所;
然后,根据流式计算中应用的算法数量确定数据节点的数量,从而确定需要创建的字符型设备驱动数量;
最后,对数据节点中的设备号进行定义。
3.根据权利要求2所述的一种基于Linux字符型设备驱动的数据流式计算方法,其特征在于:步骤A中对数据节点中的设备号进行定义,具体过程如下:
首先,数据节点中的设备号分为主设备号和次设备号;
然后,将主设备号定义为相同;
最后,将次设备号从零递增进行定义。
4.根据权利要求1所述的一种基于Linux字符型设备驱动的数据流式计算方法,其特征在于:步骤B对创建的字符型设备驱动进行初始化,具体过程如下:
首先,创建的字符型设备驱动包括打开open()、读取read()、写入write()内核态函数;
然后,对字符型设备驱动的打开open()、读取read()、写入write()功能进行增强。
5.根据权利要求4所述的一种基于Linux字符型设备驱动的数据流式计算方法,其特征在于:步骤B中对字符型设备驱动的打开open()功能进行增强,具体过程如下:
首先,在字符型设备驱动进行文件读写之前均需要先调用open()函数打开字符型设备;
然后,对打开open()功能进行增强,使同一时间只能有一个进程以相同方式打开字符型设备。
6.根据权利要求4所述的一种基于Linux字符型设备驱动的数据流式计算方法,其特征在于:步骤B中对字符型设备驱动的读取read()功能进行增强,具体过程如下:
在读取read()功能中设置阻塞机制,等待写入进程唤醒,当有新数据写入时取消阻塞。
7.根据权利要求4所述的一种基于Linux字符型设备驱动的数据流式计算方法,其特征在于:步骤B中对字符型设备驱动的写入write()功能进行增强,具体过程如下:
向字符型设备驱动中写入数据,同时唤醒读取进程。
8.根据权利要求1所述的一种基于Linux字符型设备驱动的数据流式计算方法,其特征在于:步骤C创建数据处理中间件,具体过程如下:
首先,在两个数据节点之间,创建数据处理中间件;
然后,将数据处理的对应算法植入到数据处理中间件中,完成数据处理。
9.根据权利要求1所述的一种基于Linux字符型设备驱动的数据流式计算方法,其特征在于:步骤D基于创建的数据处理中间件,挂载数据节点,具体过程如下:
首先,根据数据处理中间件的数量确定挂载数据节点的数量;
然后,将挂载数据节点与数据处理中间件一同建立起数据传输通道。
10.根据权利要求9所述的一种基于Linux字符型设备驱动的数据流式计算方法,其特征在于:所述数据传输通道为单向的数据传递通道,数据传输通道中数据节点与数据处理中间件间隔设置。
CN202311176614.0A 2023-09-13 2023-09-13 一种基于Linux字符型设备驱动的数据流式计算方法 Pending CN117435359A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202311176614.0A CN117435359A (zh) 2023-09-13 2023-09-13 一种基于Linux字符型设备驱动的数据流式计算方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202311176614.0A CN117435359A (zh) 2023-09-13 2023-09-13 一种基于Linux字符型设备驱动的数据流式计算方法

Publications (1)

Publication Number Publication Date
CN117435359A true CN117435359A (zh) 2024-01-23

Family

ID=89550587

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202311176614.0A Pending CN117435359A (zh) 2023-09-13 2023-09-13 一种基于Linux字符型设备驱动的数据流式计算方法

Country Status (1)

Country Link
CN (1) CN117435359A (zh)

Similar Documents

Publication Publication Date Title
CN102904889B (zh) 支持跨平台统一管理的强制访问控制系统及方法
US7072749B2 (en) Vehicle travel control apparatus
CN102866971B (zh) 传输数据的装置、系统及方法
CN107600110A (zh) 一种车载列车组故障预测与健康管理系统
CN103069462B (zh) 用于控制设备的方法和装置
EP1187017A2 (en) File system locking
CN101482836A (zh) 处理系统日志的装置与处理系统日志的方法
CN110717736A (zh) 一种建筑用施工进度智能追踪方法及系统
CN102141955B (zh) 一种基于Linux的内核日志系统及实现方法
CN204340930U (zh) 渣土车智能控制系统
CN106656580A (zh) 一种业务状态的迁移方法及装置
CN117435359A (zh) 一种基于Linux字符型设备驱动的数据流式计算方法
CN106066486B (zh) 车辆位置信息压缩采集方法、终端及系统
CN106973091A (zh) 分布式内存数据重分布方法及系统、主控服务器
CN101055671A (zh) 一种道路入口匝道控制器
CN202669861U (zh) 列车运行监控装置
WO2023173779A1 (zh) 目标信号的有效性判断方法、处理方法、装置及决策系统
AU2021245132B2 (en) Method for identifying characteristics of a rail vehicle and an apparatus suitable for implementing the method
US7191197B2 (en) Method and apparatus for detecting and transferring data of different formats
Lawson et al. Twenty years of safe train control in Sweden
CN112560721B (zh) 无感知模型切换方法、装置、电子设备及存储介质
CN110398949B (zh) 一种基于黑箱测试的高速铁路列车运行控制系统的测试平台
CN103164290A (zh) 应用内存管理方法和装置
US7734832B2 (en) Method and system for structured programmed input/output transactions
CN115529332B (zh) 一种用于车机中控的云车机系统及远程访问方法

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination