当前位置:  技术问答>linux和unix

虚拟串口怎么读数据? 请有 串口 或者 usb 驱动经验的高手指点

    来源: 互联网  发布时间:2016-05-12

    本文导语:   我把usb虚拟成串口进行读写数据,驱动在linux源代码中找到为:/drivers/usb/class/cdc-acm.c  现在写数据成功,但读不到数据!也就是buffer没有单片机返回的数据,其驱动中串口接口为:  struct tty_operations acm_ops = { .ope...

 我把usb虚拟成串口进行读写数据,驱动在linux源代码中找到为:/drivers/usb/class/cdc-acm.c
 现在写数据成功,但读不到数据!也就是buffer没有单片机返回的数据,其驱动中串口接口为:
 struct tty_operations acm_ops = {
.open = acm_tty_open,
.close = acm_tty_close,
.write = acm_tty_write,
.write_room = acm_tty_write_room,
.ioctl = acm_tty_ioctl,
.throttle = acm_tty_throttle,
.unthrottle = acm_tty_unthrottle,
.chars_in_buffer = acm_tty_chars_in_buffer,
.break_ctl = acm_tty_break_ctl,
.set_termios = acm_tty_set_termios,
.tiocmget = acm_tty_tiocmget,
.tiocmset = acm_tty_tiocmset,
}
没有找到read()函数,在一般的串口驱动中也没有read()函数,那要怎么才能读到数据?

|
acm_probe 中会注册一个 tasklet: 
acm->urb_task.func = acm_rx_tasklet;
该 tasklet 会从 usb 接收缓冲里获取数据, 再发送到tty中间层:
 417        if (!throttled)
 418                tty_insert_flip_string(tty, buf->base, buf->size);
 419        tty_flip_buffer_push(tty);
而usb 这边则是由 acm_read_bulk函数来填充接收缓冲。

ldd3(http://lwn.net/Kernel/LDD3/, 串口这块有点过时) 也说明了为什么串口
驱动没有read 函数:普通的串口驱动是在中断处理函数中直接调用 tty 中间层
的函数(tty_intert_*, tty_flip_*)将数据发送到 tty buffer中的,本身不提
供buffer/同步机制。 

以下几个文档不错:
http://www.linuxjournal.com/article/5896 (No Read 一节解释了你的困惑)
http://www.linuxjournal.com/article/6434
http://www.linuxjournal.com/article/6573 

|
我基本上明白你的意思了,返回的数据经过buf->base,发送到了acm->filled_read_bufs
应用程序对驱动的操作只能通过tty_operations 里的函数吧?  要不要修改驱动?
能告诉我详细点吗?
我具体还要做哪些工作才能在应用程序中读到返回的数据?

tty_operations 只是用来给 tty 中间层提供接口的。应用层进行tcsetattr后通过标准 read/write函数进行串口读写。
不是特别明白你的意思。 我认为 usb 转串口等 class 驱动不需要任何修改就可以工作。这是成熟的代码。
当然你要保证usb控制器驱动是正常的。也要保证外面接的那个 usb device 在正常工作。

|
我也遇到这个问题
是不是数据直接保存在tty中的*driver_data?
还是*disc_data?
在应用程序直接调用tty->driver_data 或者tty->disk_data 就可以显示数据了?

    
 
 

您可能感兴趣的文章:

  • 在虚拟Linux系统下能进行串口通讯吗?最好给个串口通讯的代码!谢谢!
  • 用虚拟机时检测不到串口
  • 怎样把虚拟机(vmware)的串口打开
  • vmware虚拟机串口设置问题
  • 如何用串口链接上vmware虚拟机
  • linux 系统是虚拟机,真机是Windows 这样可以实现串口通信么,还是必须都是真机?
  • linux下虚拟串口的使用
  • VMWare下的给虚拟机添加串口的问题?菜鸟请高手解释
  • linux下使用虚拟串口
  • 请教虚拟机vmware下串口通信的问题
  • sos,为什么我在虚拟机下用linux串口接收到的数据最高位为0?
  • 嵌入式linux用usb接3G手机模块 以及usb虚拟串口的测试问题
  • 虚拟机上串口程序数不到数据
  • 求大神指点windows7上装了虚拟机 但虚拟机里装不了linux系统
  • linux下查看java项目虚拟内存很大,请高手指点下
  • 求个位大侠指点,关于虚拟机上网的问题!
  • 在线急等。。。!vm虚拟机下安装ubuntu 正在扫描磁盘... 到36%时不动了!!! 高手指点
  • 虚拟机安装Redhat5提示一下错误,请高手指点
  • 请问高手:Ctrl+Alt+F1~F8可以切换虚拟终端,这个代码是在哪儿实现的?我搞不懂,最好指点源代码大概位置。
  • 关于大一的计算机系新手学习用虚拟机学习linux大家可以给点意见啊,以前完全没有接触过,可以指点下不
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 在驱动程序里,用数组,或malloc是申请到虚拟内存吧?
  • 虚拟机里装好了ubuntu 需要装驱动吗?
  • 在虚拟机下安装Linux时驱动的问题
  • 虚拟机linux安装显卡驱动
  • vmware 虚拟Linux 驱动并口处理中断问题!
  • 在另一驱动盘中的JSP如何设置虚拟目录
  • 写虚拟网络设备驱动程序的简单问题,很急,8.15日一天在线等
  • vmware装好驱动后,如何通过网络访问虚拟机?(就一台机器,无局域网)
  • 在虚拟机上安装linux,在手动分区时有个警告:说sda分区表无法读取,如果要创建,需初始化,此驱动上的所有数据会丢失
  • 有没有做过linux nor flash驱动,128MB的nor flash就要映射128MB的虚拟空间么?nand flash就可以映射4k。。
  • 虚拟网卡驱动实现问题--IP发包时没调用自己写的_start_xmit()函数
  • VPN虚拟局域网和本地局域网共存(连上vpn后正常打开网页)
  • 虚拟机的系统为Linux ,我在虚拟机下装了tomcat,我在虚拟机下可以访问tomcat的应用,但是为什么在本机访问不了虚拟机下的应用
  • VLAN(虚拟局域网)技术工作原理介绍
  • 我有两个电脑都装了Virtual PC虚拟机,请问我在一个虚拟机上装了LINUX后,另一个虚拟机可以用吗?
  • docker和VM虚拟机的区别以及如何用docker搭建基础设施
  • [虚拟机下安装linux]初次使用虚拟机,请帮忙推荐虚拟机和可以下载的镜像
  • ​docker之轻量虚拟化技术——docker实战分享
  • 在虚拟机上运行的程序和非虚拟机的区别
  • 虚拟机能虚拟硬件平台不 ?
  • 一台机器能不能装两台虚拟机或是同一台虚拟机能装两个linux系统么??
  • ARM ping不通虚拟机,虚拟机可以ping通ARM
  • linux(虚拟机)如何使用windows上的虚拟光驱?谢谢了
  • 虚拟机安装xampp后虚拟接口一访问网站,主机不可以
  • vmware虚拟机linux不能ping通主机,主机能ping通虚拟机
  • VMware虚拟机下Linux怎么访问虚拟机的光驱
  • Fedora9中虚拟机工具不能创建虚拟机
  • 虚拟机-虚拟光驱的搭配,有安装LINUX成功的办法么?
  • 在虚拟机上安装freebsd7.0后,将虚拟硬盘移到其它虚拟机上,出现mounroot> 怎样解决?
  • aix可以用虚拟机虚拟吗?
  • redhat 虚拟机的ip设置好了,如何让虚拟机跟xp本机通讯呢?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3