新项目中要用到USB通信,所以需要弄一个usb gadget驱动。Linux内核里面本身自带了USB转串口驱动,本打算使用这个的,但是由于一些原因,被PASS掉了,总之就是不能使用串口。

于是阅读相关文档,如下:

Installing the Gadget Serial Driver

-----------------------------------

To use the gadget serial driver you must configure the Linux gadget

side kernel for "Support for USB Gadgets", for a "USB Peripheral

Controller" (for example, net2280), and for the "Serial Gadget"

driver.  All this are listed under "USB Gadget Support" when

configuring the kernel.  Then rebuild and install the kernel or

modules.

Then you must load the gadget serial driver.  To load it as an

ACM device (recommended for interoperability), do this:

modprobe g_serial use_acm=1

To load it as a vendor specific bulk in/out device, do this:

modprobe g_serial

This will also automatically load the underlying gadget peripheral

controller driver.  This must be done each time you reboot the gadget

side Linux system.  You can add this to the start up scripts, if

desired.

加载驱动时,如果传递参数use_acm=1,则为usb转串口驱动,如果没有传递该参数或者是之为0,则为普通的usb驱动。

显然,不传递参数或者use_acm=0就可以满足项目中的需求。如果是直接把这个模块编译进内核,则在/driver/usb/gadget/serial.c里面把use_acm设置为0即可。

在linux主机下面,我利用万能驱动---usb-skeleton.c,更改VID和PID后测试,一切OK

于是我把板子交给写WINDOWS下USB驱动的同事,板子可以发送数据给PC,但是PC发送数据给板子时,板子显示没有收到数据。

linux内核自带的驱动肯定是没有问题的,于是用bus hound抓取数据,证明PC机的确已经把数据发送给板子了,那问题出在哪里呢?

百般无奈之下,只好看源代码。

看源代码时发现,虽然没有使用USB转串口,但是还是设置了串口的相关参数,感觉似乎是参数没有设置好,源代码里采用的是终端式的串口,而我需要的是raw。之所以在Linux主机里好用,是因为我采用的是echo发送数据,而echo发送数据时会多发一个"\n",应该就是这个原因,于是在设置串口参数时增加了如下设置

// zhh add start

gs_tty_driver->init_termios.c_lflag  &= ~(ICANON | ECHO | ECHOE | ISIG);  /*Input*/

gs_tty_driver->init_termios.c_oflag  &= ~OPOST;   /*Output*/

// zhh add end

然后就可以使用了。

不过,这里总是担心速度可能会有影响,下周有空写一个直接一点的USB设备驱动。

linux使用dwc串口,linux自带usb gadget设备驱动应用相关推荐

  1. linux选择usb功能,USB gadget设备驱动解析(1)——功能体验

    利用Linux USB gadget设备驱动可以实现一些比较有意思的功能,举两个例子: 1.一个嵌入式产品中的某个存储设备,或是一个存储设备的某个分区,可以作为一个U盘被PC:设别,从而非常方便的完成 ...

  2. USB gadget设备驱动解析

    利用Linux USB gadget设备驱动可以实现一些比较有意思的功能,举两个例子: 1.一个嵌入式产品中的某个存储设备,或是一个存储设备的某个分区,可以作为一个U盘被PC:设别,从而非常方便的完成 ...

  3. platform框架--Linux MISC杂项框架--Linux INPUT子系统框架--串行集成电路总线I2C设备驱动框架--串行外设接口SPI 设备驱动框架---通用异步收发器UART驱动框架

    platform框架 input. pinctrl. gpio 子系统都是 Linux 内核针对某一类设备而创建的框架, input子系统是管理输入的子系统 pinctrl 子系统重点是设置 PIN( ...

  4. usb audio设备驱动

    本文引用自ls.cq<usb audio设备驱动> http://bbs.driverdevelop.com/read.php?tid-118579-page-1.html 已基本完成wa ...

  5. linux USB大容量设备驱动入门之读取U盘容量

    主要参考了以下资料: usbmassbulk_10.pdf , usbmass-ufi10.pdf, SCSI Commands Reference Manual,spc-3.pdf 以下驱动模块通过 ...

  6. hid设备驱动linux,linux usb hid设备驱动(3)

    本文分析了蓝牙bluez协议栈中HID协议的实现. 1. 基本概念 HID协议用于人机输入设备.Bluez中关于HID的实现代码在其根目录下的input目录.蓝牙规范中包含关于HID的profile, ...

  7. 从 2.4 到 2.6:Linux 内核可装载模块机制的改变对设备驱动的影响(一)

    从 2.4 到 2.6:Linux 内核可装载模 块机制的改变对设备驱动的影响 <?xml:namespace prefix = o ns = "urn:schemas-microso ...

  8. usb大容量存储设备驱动_Win10默认已禁用USB驱动器缓存 1903版本起无需点击安全弹出...

    在从计算机上拔下 USB 闪存驱动器之前,许多人已经养成了手动点击任务栏上的"安全删除硬件"图标来"弹出"的习惯.然而从 Windows 10 1903 版本起 ...

  9. usb大容量存储设备驱动_usb无法识别怎么办 如何解决usb识别故障【详细步骤】...

    usb无法识别怎么办? 随着计算机硬件飞速发展,外围设备日益增多,键盘.鼠标等早已为人所共知,数码相机.MP3随身听接踵而至,这么多的设备,如何接入个人计算机?USB就是基于这个目的产生的.USB是一 ...

  10. linux 控制虚拟串口,linux虚拟串口控制器实现-适用于无开发板学习tty driver-好向圈...

    在前面几章,我们介绍了tty子系统的框架.数据结构.tty驱动的注册与注销等内容,本章我们借助 之前学习的内容开发一个虚拟的串口控制器驱动,以便我们理解开发串口驱动的步骤及驱动开发实践. 本次实现的虚 ...

最新文章

  1. 使用CXF开发WebService程序的总结(一):什么是webservice
  2. 本科学计算机研究生读哲学,计算机专业本科生创新思维培养及其哲学思考
  3. js中的四舍五入函数
  4. 类的数据成员的一些注意事项
  5. CocosCreator物理引擎Demo源码分析(2)-tiled
  6. Rational rose软件安装遇到key错误的问题
  7. 数字化转型的本质:“研产供销服”各环节的敏捷化
  8. termux安装gcc
  9. H3C PPP MP协议
  10. linux运维都不知道是什么,这8种命令都不会,还算什么Linux运维!
  11. 2020数学建模国赛A题解题思路
  12. 北京内推 | 360人工智能研究院招聘计算机视觉算法研究员
  13. 5月6日(Lambda)LCAC第十三次会议重要信息摘取
  14. Android实现平板的类股票列表联动
  15. 数据库——完整性约束条件
  16. go语言使用grpc和gateway教程
  17. 很实用的五个杠杆炒股技巧
  18. python设置散点图点的大小_Python散点图 . 标记的大小和样式
  19. 第二章 一波未平 校园江湖
  20. 蓝牙1.1~5.0不同版本特性简介

热门文章

  1. beyond compare 对class文件反编译及比较
  2. python操作wps表格_python3怎么用pandas读wps表格,pandas python教程
  3. 模糊c–均值聚类算法的原理解释及推导
  4. 心电信号去噪(part1)--心电信号简介
  5. ipython安装成功后用不了_ipython安装避坑指南
  6. 1、STVD和STVP的使用及串口烧写程序教程
  7. mapbox gl文字标注算法基本介绍
  8. Unity VSCode + Emmy Lua 插件断点调试Lua脚本
  9. 典型相关分析(cca)原理_全网最细的图文详解——手把手教你不会代码一样做RDA/CCA分析!...
  10. 计算机硬件行业深度报告,首创证券-计算机行业深度报告:物联网,研究框架-行业分析-慧博投研资讯...