linux内核配置usb虚拟串口,Linux USB虚拟串口设备

Linux内核中usb设备侧驱动程序分成3个层次:UDC驱动程序、Gadget API和Gadget驱动程序。UDC驱动程序(USB控制器)直接访问硬件,控制USB设备和主机间的底层通信,向上层提供与硬件相关操作的回调函数。Gadget API是UDC驱动程序回调函数的简单包装,这部分程序内核都已经写好。Gadget驱动程序具体控制USB设备功能的实现,使设备表现出“U盘”、“虚拟串口”等特性。

简单看个usb 虚拟串口例子

Overview

--------

The gadget serial driver is a Linux USB gadget driver, a USB device

side driver.  It runs on a Linux system that has USB device side

hardware; for example, a PDA, an embedded Linux system, or a PC

with a USB development card.

The gadget serial driver talks over USB to either a CDC ACM driver

or a generic USB serial driver running on a host PC.

Host

-------------------------------------- | Host-Side   CDC ACM       USB Host   | | Operating |   or        | Controller |   USB | System    | Generic USB | Driver     |-------- | (Linux or | Serial      | and        |        | | Windows)    Driver        USB Stack  |        | --------------------------------------         | | | | Gadget                                         | --------------------------------------         | | Gadget                   USB Periph. |        | | Device-Side |  Gadget  | Controller  |        | | Linux       |  Serial  | Driver      |-------- | Operating   |  Driver  | and         | | System                   USB Stack   | --------------------------------------

On the device-side Linux system, the gadget serial driver looks

like a serial device.

On the host-side system, the gadget serial device looks like a

CDC ACM compliant class device or a simple vendor specific device

with bulk in and bulk out endpoints, and it is treated similarly

to other serial devices.

The host side driver can potentially be any ACM compliant driver

or any driver that can talk to a device with a simple bulk in/out

interface.  Gadget serial has been tested with the Linux ACM driver,

the Windows usbser.sys ACM driver, and the Linux USB generic serial

driver.

With the gadget serial driver and the host side ACM or generic

serial driver running, you should be able to communicate between

the host and the gadget side systems as if they were connected by a

serial cable.

The gadget serial driver only provides simple unreliable data

communication.  It does not yet handle flow control or many other

features of normal serial devices.

内核版本:3.15                    硬件:ATMEL  SAMA5D3            编译环境:ubuntu 12.04

1、配置内核

这里之所以都选择为模块的形式,是为了调试方便,有些模块,比如U盘加载时还需要提供介质,就是说加载模块时还需要参数,否则加载不上

Device Drivers  --->

[*] USB support  --->

  USB Gadget Support  --->

  USB Gadget Drivers

< >     USB functions configurable through configfs

< >     Gadget Zero (DEVELOPMENT)

< >     Ethernet Gadget (with CDC Ethernet support)

< >     Network Control Model (NCM) support

< >     Gadget Filesystem

< >     Function Filesystem

< >     Mass Storage Gadget

< >     USB Gadget Target Fabric Module

    Serial Gadget (with CDC ACM and CDC OBEX support)

< >     Printer Gadget

保存退出,编译内核。在drivers/usb/gadget目录下会生成以下驱动文件

-rw-rw-r-- 1 a_tu a_tu  9710  3月  5 15:14 ./g_serial.ko

-rw-rw-r-- 1 a_tu a_tu 49319  3月  5 15:14 ./libcomposite.ko

-rw-rw-r-- 1 a_tu a_tu 11473  3月  5 15:14 ./usb_f_acm.ko

-rw-rw-r-- 1 a_tu a_tu  9485  3月  5 15:14 ./usb_f_obex.ko

-rw-rw-r-- 1 a_tu a_tu  8011  3月  5 15:14 ./usb_f_serial.ko

-rw-rw-r-- 1 a_tu a_tu 15970  3月  5 15:14 ./u_serial.ko

2、操作开发板

把编译好的内核烧入开发板,加载生成的驱动文件,注意加载顺序,否则会出现错误。

insmod  u_serial.ko

insmod  libcomposite.ko

insmod   usb_f_serial.ko

insmod  usb_f_obex.ko

insmod  usb_f_acm.ko

insmod  g_serial.ko

出现内核信息如下:

[   27.310000] --------file=composite.c-------usb_composite_probe------1830

[   27.320000] ------------402

[   27.320000] -----usb_gadget_probe_driver------411

[   27.330000] -------udc_bind_to_driver-----342

[   27.330000] g_serial gadget: Gadget Serial v2.4

[   27.340000] g_serial gadget: g_serial ready

[   18.960000] g_serial gadget: high-speed config #2: CDC ACM config

说明加载成功。

此时你打开设备管理器会发现多了一个串口设备,

ELMO GMAS(COM10)

0818b9ca8b590ca3270a3433284dd417.png

Win7操作系统可以自动加载基于udc标准的serial驱动。

对于WinXP操作系统,要使用ACM串口,需要WindowsXP机器上有gserial.inf和usbser.sys这两个文件,其中gserial.inf的配置如下:

[Version] Signature='$Windows NT$' Class=Ports ClassGuid={4D36E978-E325-11CE-BFC1-08002BE10318} Provider=%LINUX% DriverVer=08/17/2004,0.0.2.0 ; Copyright (C) 2004 Al Borchers (alborchers@steinerpoint.com) [Manufacturer] %LINUX%=GSerialDeviceList [GSerialDeviceList] %GSERIAL%=GSerialInstall, USB\VID_0525&PID_A4A7 [DestinationDirs] DefaultDestDir=10,System32\Drivers [GSerialInstall] CopyFiles=GSerialCopyFiles AddReg=GSerialAddReg [GSerialCopyFiles] usbser.sys [GSerialAddReg] HKR,,DevLoader,,*ntkern HKR,,NTMPDriver,,usbser.sys HKR,,EnumPropPages32,,'MsPorts.dll,SerialPortPropPageProvider' [GSerialInstall.Services] AddService = usbser,0x0002,GSerialService [GSerialService] DisplayName = %GSERIAL_DISPLAY_NAME% ServiceType = 1 ; SERVICE_KERNEL_DRIVER StartType = 3 ; SERVICE_DEMAND_START ErrorControl = 1 ; SERVICE_ERROR_NORMAL ServiceBinary = %10%\System32\Drivers\usbser.sys LoadOrderGroup = Base [Strings] LINUX = 'Linux' GSERIAL = 'Gadget Serial' GSERIAL_DISPLAY_NAME = 'USB Gadget Serial Driver'

安装成功后,在设备管理器中可以看到 “Gadget Serial (COM11) '这个端口。

开发板的/dev/下会出现/dev/ttyGS0这个设备。当然如果你怕这个设备重名,可以更改这个设备节点。操作如下:

cat /proc/devices

Character devices: 1 mem 2 pty 3 ttyp 4 /dev/vc/0 4 tty 4 ttyS 5 /dev/tty 5 /dev/console 5 /dev/ptmx 7 vcs 10 misc 13 input 90 mtd 128 ptm 136 pts 153 spi 251 ttyGS

mknod /dev/usb_serial c 254 0

以后可以直接按照串口通讯的方式打开该节点 /dev/usb_serial,进行数据读写操作。

3、通信测试

开发板上执行命令  cat /dev/usb_serial(当然你也可以编写程序,打开设备读写),这里只是简单的测试设备通信是否正常 ,pc机上打开串口调试助手,打开com10,通过字符串输入框发送数据。此时发现开发板没有收到数据,而串口助手却收到自己发送的数据。这让我很是纳闷,折腾了2天,终于睡醒了。

又测试了另一通路:开发板给pc发。echo 12345 > /dev/usb_serial

这是完全正常的,通过串口助手收到的数据来看。每次收到的数据都有换行现象,会不会是数据没有从缓冲区中刷出来?我就换了数据格式,发送简单文件

111111111111111111

222222222222222222

222222222222222222

444444444444444444

此时开发板收到数据

# cat /dev/usb_serial

111111111111111111

222222222222222222

222222222222222222

444444444444444444

原来真的是 "\n" 在作怪!!!,如果你的文件只有一行,且没有换行。那么你的开发板是收不到数据的,这些数据并没有丢失,而是存储在串口的缓冲区中,直到遇到 "\n",才会把数据一股脑发出来。

至此测试完毕。

本人水平有限,文章仅代表个人观点,如有错误,请指正!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/358648.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Chunked coding converter插件的使用方法

burp插件----Chunked coding converter url下载&#xff1a;https://github.com/zxl2605/chunked-coding-converter 安装步骤&#xff1a;BurpSuite -> Extender -> Extensions -> Add -> Extension Type: Python -> Select file: chunked-coding-converter.0.…

linux 提升cpu权限,CPUlimit有效防止Linux系统CPU过载

最近使用Nginx服务器测试 pagespeed 的加速效果时&#xff0c;发现这货会造成 CPU 占用过高&#xff0c;Nginx 经常 100%&#xff0c;尽管使用的是静态缓存&#xff0c;总是触发主机商的CPU占用上限&#xff0c;不停的被强制关机。发现 CPULimit 这款工具刚好可以解决这个问题&…

domain hunter pro插件的使用方法

bilibili教程&#xff1a;https://www.bilibili.com/video/BV1eA411P7xC/ 安装 获取软件的Jar包&#xff0c;由于该软件是基于BurpSuite的插件程序。需要与BurpSuite一起使用。 安装后的界面效果 项目管理 创建一个新的项目&#xff0c;也可以打开已有的项目文件&#xf…

CSS基本语法?

CSS 实例 CSS 规则由两个主要的部分构成&#xff1a;选择器&#xff0c;以及一条或多条声明: 选择器通常是您需要改变样式的 HTML 元素。 每条声明由一个属性和一个值组成。 属性&#xff08;property&#xff09;是您希望设置的样式属性&#xff08;style attribute&#x…

BurpSuite插件 -- FastjsonScan(反序列化检测)

你可以因为现任不好二分手&#xff0c;但千万不要认为别人更好&#xff0c;永远有人更好&#xff0c;眼下便是更好。。。 ---- 网易云热评 一、插件介绍&#xff1a; 一个简单的Fastjson反序列化检测burp插件&#xff0c;我在挖洞的时候看到一些json请求总是想要检测一下有没有…

查看linux电脑总内存,如何查看Linux系统中的内存使用情况的命令呢?

有些命令可用于检查Linux系统中的内存使用情况。这是一些更好的命令。有很多工具可以查看Linux系统中的内存使用情况。一些命令被广泛使用&#xff0c;例如free和ps。其他命令允许以多种方式显示系统的性能统计信息&#xff0c;例如top。在本文中&#xff0c;我们将介绍一些命令…

【工具使用】Xray与Burp联动--流量转发插件Passive Scan Client

Burp被动扫描流量转发插件:Passive Scan Client 0x01 插件编译 插件地址&#xff1a;https://github.com/c0ny1/passive-scan-client rootkali:~# git clone https://github.com/c0ny1/passive-scan-client.git rootkali:~# cd passive-scan-client/ rootkali:~/passive-scan…

linux 用mutex定义一个linkedlist,【基于LINUX的操作系统实验教程最终版材料】

(基于LINUX的操作系统实验教程)(最终版)《基于LINUX的操作系统实验教程.doc》由会员分享&#xff0c;可免费在线阅读全文&#xff0c;更多与《(基于LINUX的操作系统实验教程)(最终版)》相关文档资源请在帮帮文库(www.woc88.com)数亿文档库存里搜索。1、b&#xff1b;*Waitonthe…

服务器硬件监控转载:

转载&#xff1a;http://nolinux.blog.51cto.com/4824967/1664664 前一周上架服务器&#xff0c;本来准备把针对服务器的硬件监控这一部分总结下成文&#xff0c;结果过个端午给过忘了。。。今天就又整理了下&#xff0c;在这里分享给51博友&#xff0c;也算是对自己前段工作的…

验证码识别Burp reCAPTCHA插件使用

介绍 Burp的reCAPTCHA也可用来识别验证码&#xff0c;github地址&#xff1a;https://github.com/bit4woo/reCAPTCHA&#xff0c;下载相应的jar包添加到burp中&#xff0c;位置在extender-extensions-add下&#xff0c;添加成功后burp模块栏会多出reCAPTCHA一栏&#xff0c;如下…

linux下的五种io模型,Linux下的五种IO模型

Java中提供的IO有关的API&#xff0c;在文件处理的时候&#xff0c;其实依赖操作系统层面的IO操作实现的(关于Java对IO的三种封装&#xff0c;可见我的另一篇博客)开门见山&#xff0c;Linux下的如中IO模型&#xff1a;阻塞IO模型&#xff0c;非阻塞IO模型&#xff0c;IO复用模…

如何使用Eclipse调试Maven构建

当运行带有许多插件&#xff08;例如jOOQ或Flyway插件 &#xff09;的Maven构建时&#xff0c;您可能想更深入地了解这些插件或这些插件的扩展内部发生了什么。 当您从命令行运行Maven时&#xff0c;这可能并不明显&#xff0c;例如通过&#xff1a; C:\Users\jOOQ\workspace&…

PropertyGrid 控件使用方法

编写一个对象&#xff0c;后面传递给 PropertyGrid 来显示&#xff1a; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.ComponentModel; namespace WindowsForms_PropertyGrid {public class UserPropertyClass{privat…

BurpSuite插件 -- Struts2-RCE

​好遗憾&#xff0c;明明不想失去&#xff0c;却又无能为力&#xff0c;说真的&#xff0c;那种想放弃又想爱的滋味&#xff0c;真折磨人。。。。 ---- 网易云热评 一、插件介绍 一个用于检查struts2 RCE漏洞的Burp扩展器 二、下载地址&#xff08;插件作者&#xff1a;prakh…

各种服务常用端口号

常见的数据库&#xff0c;默认端口号是多少: 一、关系型数据库 1、MySql数据库 &#xff0c;默认端口是: 3306&#xff1b; 2、Oracle数据库 &#xff0c;默认端口号为&#xff1a;1521&#xff1b; 3、Sql Server数据库 &#xff0c;默认端口号为&#xff1a;1433&#xff…

Burpsuite爆破含CSRF-Token的程序

转载至https://www.se7ensec.cn/2018/10/21/Burpsuite%E7%88%86%E7%A0%B4%E5%90%ABCSRF-Token%E7%9A%84%E7%A8%8B%E5%BA%8F/ 3 年前发表 8 个月前更新 渗透测试 2 分钟读完 (大约273个字) 358次访问 Burpsuite爆破含CSRF-Token的程序 1. 抓包 0x01 开启burpsuite代理&#xff0…

正则表达式贪婪与非贪婪模式

正则表达式贪婪与非贪婪模式 之前做程序的时候看到过正则表达式的贪婪与非贪婪模式&#xff0c;今天用的时候就想不起来了&#xff0c;现在这里总结一下&#xff0c;以备自己以后用到注意。 1.什么是正则表达式的贪婪与非贪婪匹配 如&#xff1a;String str"abcaxc"…

[Noip模拟赛] Power

POWER 源程序名 POWER.??? (PAS,C,CPP) 可执行文件名 POWER.EXE 输入文件名 POWER.IN 输出文件名 POWER.OUT 多瑞卡得到了一份有趣而高薪的工作。每天早晨他必须关掉他所在村庄的街灯。所有的街灯都被设置在一条直路的同一侧。 多瑞卡每晚到早晨5点钟都在晚会上&a…

linux逆向工程反汇编,Kali Linux 逆向工程工具 Jad 教程

日期&#xff1a;2017年12月21日观看&#xff1a; 1,895 C 次用法&#xff1a;jad [option(s)] jad [选项(s)] 选项&#xff1a;-a - 生成JVM指令作为注释(注释)-af - 注释时输出完全限定的名称-b - 生成冗余大括号(大括号)-clear - 清除所有的前缀&#xff0c;包括默认的前缀-…

任意文件读取及删除漏洞

任意文件读取漏洞及危害 通过提交专门设计的输入&#xff0c;攻击者就可以在被访问的文件系统中读取或写入任意内容&#xff0c;往往能够使攻击者从服务器上获取敏感信息文件&#xff0c;正常读取的文件没有经过校验或者不严格&#xff0c;用户可以控制这个变量读取任意文件。…