一种生成串口模拟数据的方法技术

技术编号:35779440 阅读:26 留言:0更新日期:2022-12-01 14:24
本发明专利技术提供了一种生成串口模拟数据的方法,对保存的用户空间发送的数据进行校验;在serial_start_tx中,对用户空间发送的数据校验成功后,组装返回报文,对返回报文中的每个字节,依次调用tty_insert_flip_char方法将数据保存到tty_buffer的data缓冲区中;调用tty_flip_buffer_push方法将tty_bufhead.work添加到全局的work队列中,返回报文数据到用户空间;本发明专利技术利用linux的串口驱动,产生模拟数据,不需要第三方工具,也不需要其他真实的串口设备,极大的提高了串口模拟数据的生成效率。率。率。

【技术实现步骤摘要】
一种生成串口模拟数据的方法


[0001]本专利技术涉及串口数据模拟计算领域,特别涉及一种生成串口模拟数据的方法。

技术介绍

[0002]本部分的陈述仅仅是提供了与本专利技术相关的
技术介绍
,并不必然构成现有技术。
[0003]开发串口相关的项目时,有时手头没有足够的串口设备或根本没有相关设备,此时需要通过某种方法来模拟串口数据。
[0004]专利技术人发现,当前通用的获取模拟方法为:
[0005](1)通过虚拟串口,虚拟出一对串口,一个用于项目程序获取数据,另一个用于数据模拟软件来产生模拟数据,但linux下虚拟串口工具较少且应用不是很方便;
[0006](2)通过USB转串口设备,将多个设备的A与A相连,B与B相连,其中一个设备用于项目程序,另外几个用于产生模拟数据,此方法需要多个USB转串口设备,不适合需要大量串口设备的测试场景。

技术实现思路

[0007]为了解决现有技术的不足,本专利技术提供了一种生成串口模拟数据的方法,利用linux的串口驱动,产生模拟数据,不需要第三方工具,也不需要其他真实的串口设备,极大的提高了串口模拟数据的生成效率。
[0008]为了实现上述目的,本专利技术采用如下技术方案:
[0009]本专利技术第一方面提供了一种生成串口模拟数据的方法。
[0010]一种生成串口模拟数据的方法,包括以下过程:
[0011]串口驱动注册,添加串口端口uart_port,其中,uart_port的ops为uart_ops类型;
[0012]当用户空间调用write通过设备文件向串口驱动发送数据时,调用uart_ops结构中start_tx中设置的回调函数,回调函数中的start_tx设置的函数为serial_start_tx,用户空间发送的数据保存在circ_buf中,如果数据未跨越缓冲区结尾,则按第一形式保护,否则按第二形式保存;对保存的用户空间发送的数据进行校验;
[0013]在serial_start_tx中,对用户空间发送的数据校验成功后,组装返回报文,对返回报文中的每个字节,依次调用tty_insert_flip_char方法将数据保存到tty_buffer的data缓冲区中;
[0014]调用tty_flip_buffer_push方法将tty_bufhead.work添加到全局的work队列中,返回报文数据到用户空间。
[0015]作为可选的一种实现方式,回调函数为:void(*start_tx)(struct uart_port*)。
[0016]作为可选的一种实现方式,串口驱动注册,包括:
[0017]使用uart_register_driver方法将串口驱动uart_driver注册到内核。
[0018]进一步的,uart_driver包括设备名称以及主版本号和次版本号,设备名称为在/dev下显示的名称。
[0019]进一步的,串口驱动为分层结构,包括核心层tty_core和驱动层tty_driver,tty_driver封装在uart_driver结构中,驱动层tty_driver中包括线路规划。
[0020]作为可选的一种实现方式,使用uart_add_one_port添加串口端口uart_port。
[0021]作为可选的一种实现方式,返回报文数据到用户空间,包括:
[0022]用户空间通过设备文件读取串口数据时,调用串口框架的n_tty_read;
[0023]发送给用户空间的数据,保存在n_tty_data的read_buf中,如果有数据可读,则将数据发送到用户空间;如果无数据可读,n_tty_read中会休眠,等待调度线程从全局队列中获取数据,并调用flush_to_ldisc将数据从tty_bufhead.tail.data拷贝到tty_struct.disc_data.read_buf。
[0024]作为可选的一种实现方式,n_tty_read函数,包括:
[0025]static ssize_t n_tty_read(struct tty_struct*tty,struct file*file,unsigned char__user*buf,size_t nr)。
[0026]作为可选的一种实现方式,flush_to_ldisc的函数为void flush_to_ldisc(struct work_struct*work),其中,参数work为tty_bufhead中的work。
[0027]作为可选的一种实现方式,依次调用tty_insert_flip_char方法将数据保存到tty_buffer的data缓冲区中,其中,将返回报文的前两个字节写入缓冲区,包括以下过程:
[0028]写入第一个字节,1为第一个字节的值,tty_insert_flip_char(tty,1,0);
[0029]写入第二个字节,3为第二个字节的值,tty_insert_flip_char(tty,3,0);
[0030]数据组装结束后,调用tty_flip_buffer_push方法将数据发送出去。
[0031]与现有技术相比,本专利技术的有益效果是:
[0032]本专利技术所述的生成串口模拟数据的方法,利用linux的串口驱动,产生模拟数据,不需要第三方工具,也不需要其他真实的串口设备,极大的提高了串口模拟数据的生成效率。
[0033]本专利技术附加方面的优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本专利技术的实践了解到。
附图说明
[0034]构成本专利技术的一部分的说明书附图用来提供对本专利技术的进一步理解,本专利技术的示意性实施例及其说明用于解释本专利技术,并不构成对本专利技术的不当限定。
[0035]图1为本专利技术实施例提供的串口驱动结构。
[0036]图2为本专利技术实施例提供的串口驱动分层结构示意图。
[0037]图3为本专利技术实施例提供的串口结构关联示意图。
[0038]图4为本专利技术实施例提供的circ_buf数据结构示意图。
具体实施方式
[0039]下面结合附图与实施例对本专利技术作进一步说明。
[0040]应该指出,以下详细说明都是示例性的,旨在对本专利技术提供进一步的说明。除非另有指明,本文使用的所有技术和科学术语具有与本专利技术所属
的普通技术人员通常理解的相同含义。
[0041]需要注意的是,这里所使用的术语仅是为了描述具体实施方式,而非意图限制根据本专利技术的示例性实施方式。如在这里所使用的,除非上下文另外明确指出,否则单数形式也意图包括复数形式,此外,还应当理解的是,当在本说明书中使用术语“包含”和/或“包括”时,其指明存在特征、步骤、操作、器件、组件和/或它们的组合。
[0042]在不冲突的情况下,本专利技术中的实施例及实施例中的特征可以相互组合。
[0043]实施例1:
[0044]如图1本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种生成串口模拟数据的方法,其特征在于:包括以下过程:串口驱动注册,添加串口端口uart_port,其中,uart_port的ops为uart_ops类型;当用户空间调用write通过设备文件向串口驱动发送数据时,调用uart_ops结构中start_tx中设置的回调函数,回调函数中的start_tx设置的函数为serial_start_tx,对用户空间发送的数据进行保存,如果数据未跨越缓冲区结尾,则按第一形式保护,否则按第二形式保存;对保存的用户空间发送的数据进行校验;在serial_start_tx中,对用户空间发送的数据校验成功后,组装返回报文,对返回报文中的每个字节,依次调用tty_insert_flip_char方法将数据保存到tty_buffer的data缓冲区中;调用tty_flip_buffer_push方法将tty_bufhead.work添加到全局的work队列中,返回报文数据到用户空间。2.如权利要求1所述的生成串口模拟数据的方法,其特征在于:回调函数为:void(*start_tx)(struct uart_port*)。3.如权利要求1所述的生成串口模拟数据的方法,其特征在于:串口驱动注册,包括:使用uart_register_driver方法将串口驱动uart_driver注册到内核。4.如权利要求3所述的生成串口模拟数据的方法,其特征在于:uart_driver包括设备名称以及主版本号和次版本号,设备名称为在/dev下显示的名称。5.如权利要求3所述的生成串口模拟数据的方法,其特征在于:串口驱动为分层结构,包括核心层tty_core和驱动层tty_driver,tty_driver封装在uart_driver结构中,驱动层tty_driver中包括线路规划。6.如权利要求1所述的生成串口模拟数据的方法,其特征在于:使用uart_add_...

【专利技术属性】
技术研发人员:王蒙元吕昌峰夏荣贵郭元镇侯井国
申请(专利权)人:济南信通达电气科技有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1