一、介绍usb_modeswitch功能

usb_modeswitch是对USB设备的工作模式进行转换,usb工作模式:usb存储模式,usb serial模式。现在3G,无线网卡模块使用USB接口,他们的工作模式是usb serial模式。

二、下载

1、下载usb-modeswitch-2.2.0.tar.bz2和usb-modeswitch-data-20140529.tar.bz2

http://www.draisberghof.de/usb_modeswitch/#download

2、下载 libusb-1.0.19.tar.bz2

http://sourceforge.net/projects/libusb/files/libusb-1.0/    如果网速太慢可以使用下面下载链接

csdn下载链接:http://download.csdn.net/detail/lin_jianbin/8339561

3、下载 libusb-compat-0.1.5.tar.bz2(可不需要安装)

libusb分为0.1和1.0两版本,而1.0版本与0.1有较大的不同,并不向下兼容,必须依赖libusb-compat

因本人安装这个没有兼容性问题所以没安装。

http://sourceforge.net/projects/libusb/files/libusb-compat-0.1/

注:usb-modeswitch-2.2.0.tar.bz2这个版本一定要使用libusb-1.x版本。否则版本不兼容。

三、安装

1、交叉编译libusb-1.0.19.tar.bz2

解压:tar -jxvf libusb-1.0.19.tar.bz2

进入目录:cd libusb-1.0.19

配置:./configure -build=i686-linux --host=arm-linux --prefix=/opt/ProgramFiles/libusb --disable-shared --enable-static

--host=arm-linux:配置交叉编译器

--prefix=/opt/ProgramFiles/libusb :安装生成的路径

-enable-static:生成静态库,注:这样libusb-1.0.a就不需要复制到开发板上因为是静态库

出现错误:configure: error: "udev support requested but libudev not installed"这个错误

原因:开发环境没有libudev。

解决:

方法1、如果是Ubuntu可用: apt-get install libudev-dev安装,若不想安装或安装失败可用方法2

方法2、在./configure 最后加入 --disable-udev

编译:make

编译生成:make install

成功,可以在/opt/ProgramFiles/libusb目录下生成 include和lib文件夹

2、交叉编译usb-modeswitch-2.2.0.tar.bz2

解压:tar -jxvf usb-modeswitch-2.2.0.tar.bz2

修改Makefile文件

CC          =arm-linux-gcc ##指定编译器 交叉编译

STRIP       =arm-linux-strip

CFLAGS      += -Wall -I/opt/ProgramFiles/libusb/include/libusb-1.0

LIBS        = -lpthread /opt/ProgramFiles/libusb/lib/libusb-1.0.a

-I/opt/ProgramFiles/libusb/include/libusb-1.0 这个为上面安装libusb的头文件路径

/opt/ProgramFiles/libusb/lib/libusb-1.0.a     这个为上面安装libusb的库路径

-lpthread                              线程库

编译:make

成功,在目录下会生成 usb_modeswitch 可执行文件

3、解压usb-modeswitch-data-20140529.tar.bz2得到配置文件

解压: tar -jxvf usb-modeswitch-data-20140529.tar.bz2

文件如下:

40-usb_modeswitch.rules : udev规则文件

usb_modeswitch.d:     文件夹中包含大部分厂家的配置信息

修改usb_modeswitch.d文件夹下文件19d2:2000(因为本人使用的模块厂家信息是这个文件,这个要根据自己的实际模块而定)

########################################################

# ZTE devices

DefaultVendor=  0x19d2

DefaultProduct= 0x2000(usb设备ID)

TargetVendor=   0x19d2

TargetProductList="0001,0002,0015,0016,0017,0031,0037,0052,0055,0063,0064,0108,0128"(usb设备转为serial后的ID)

MessageContent="5553424312345678000000000000061e000000000000000000000000000000"

MessageContent2="5553424312345679000000000000061b000000020000000000000000000000"

MessageContent3="55534243123456702000000080000c85010101180101010101000000000000"

NeedResponse=1

CheckSuccess=5(检查次数)

四、移植到开发板

1、模块为内置模块,不考虑兼容性和热插拔问题

将生成的可执行文件拷贝到开发板/usr/sbin/目录下,将usb_modeswitch.d文件夹下的19d2:2000配置文件拷贝到开发板/etc/usb_modeswitch.d目录下(可自己选择路径)

到开发板上执行

# usb_modeswitch -W -c 19d2:2000

-W 显示执行过程及各参数设备情况

-c  配置文件

如何判断usb转串口成功?

在没有执行usb_modeswitch前使用命令lsusb

# lsusb

Bus 001 Device 002: ID 19d2:2000

执行usb_modeswitch后使用命令lsusb

# lsusb

Bus 001 Device 003: ID 19d2:0117

可看到ID号已经变化,如果没有变化说明没有成功

usb转串口没有成功的原因

19d2:2000 配置文件不正确。

方法:可以参考桌面Linux系统的配置文件,在/etc/usb_modeswitch.d目录下。

usb转串口成功但是在/dev/目录下看不到设备ttyUSB0 ttyUSB1 ttyUSB2

解决:卸载掉之前加载的usb转串口驱动(如果已经加载)

# lsmod

Module                  Size  Used by

option                 14456  0

usb_wwan                7838  1 option

usbserial              25343  2 option,usb_wwan

#rmmod usbserial.ko

#rmmod usb_wwan.ko

#rmmod option.ko

重新加载驱动模块

#insmod usbserial.ko

#insmod usb_wwan.ko

#insmod option.ko

重新加载驱动模块后还是看不到设备ttyUSB0 ttyUSB1 ttyUSB2

原因:option.c中没有增加厂家ID

解决:修改option.c文件

可参考本博客文章:http://blog.csdn.net/lin_jianbin/article/details/42520845

验证是否option.c中没有增加厂家ID方法

#insmod usbserial.ko vendor=0x19d2 product=0x2000

加载usbserial.ko驱动时指定 厂家号和设备号

#insmod usb_wwan.ko

#insmod option.ko

这两句可不执行。

正确加载输出如下:

usbcore: registered new interface driver usbserial

USB Serial support registered for generic

usbcore: registered new interface driver usbserial_generic

usbserial: USB Serial Driver core

USB Serial support registered for GSM modem (1-port)

option 1-2:1.0: GSM modem (1-port) converter detected

usb 1-2: GSM modem (1-port) converter now attached to ttyUSB0

option 1-2:1.1: GSM modem (1-port) converter detected

usb 1-2: GSM modem (1-port) converter now attached to ttyUSB1

option 1-2:1.2: GSM modem (1-port) converter detected

usb 1-2: GSM modem (1-port) converter now attached to ttyUSB2

usbcore: registered new interface driver option

option: v0.7.2:USB Driver for GSM modems

恭喜成功

2、模块为外置模块,需要考虑兼容性和热插拔问题

将生成的可执行文件拷贝到开发板/usr/sbin/目录下,将usb_modeswitch.d文件夹拷贝到开发板/etc目录下,将40-usb_modeswitch.rules文件拷贝到开发板/etc/udev/rules.d目录下.

40-usb_modeswitch.rules 是udev规则文件,相关知识可查找 udev规则

如下是文件中的一小部分

# Vodafone (ZTE) K3806-Z

ATTRS{idVendor}=="19d2", ATTRS{idProduct}=="1013", RUN+="usb_modeswitch '%b/%k'"

# ZTE devices

ATTRS{idVendor}=="19d2", ATTRS{idProduct}=="2000", RUN+="usb_modeswitch '%b/%k'"

支持热插拔的步骤:

当有设备插入时,udev就会被内核触发,寻找与设备配对的配置。

udev会到/etc/udev/rules.d/目录下 遍历所有的udev规则文件。不会因为找到配对的就停止而是全部遍历完。

我们拷贝到/etc/udev/rules.d目录下的40-usb_modeswitch.rules 文件也会被遍历到

当插入的厂家ID号为19d2 设备号为 2000 时就是调用RUN+="usb_modeswitch '%b/%k'"

RUN+= 可以加入自己的可执行程序或者脚本等等。因而在热插拔时我们可以实现我们自己想做的事情。

调用 usb_modeswitch 这里需要注意的是usb_modeswitch不是可执行文件而是一个脚本。

本人起初以为是可执行程序,而不明白其后更得参数。之后得知是脚本焕然大悟。

这样就实现了usb_modeswitch自动启动功能。当有3G设备插入时,如果usb_modeswitch.d目录下有找到匹配的设备ID配置,就会启动usb_modeswitch。实现自动将usb转为usb serial模式。

usb_modeswitch下载与安装相关推荐

  1. MySQL下载与安装教程以及环境变量配置

    MySQL下载 1 搜索mysql 选择mysql downloads 如下 2 点击滑动到底部选择社区版本(免费) 如下 3 选择Community Server 如下 4 选择对应的版本下载 我选 ...

  2. java jdk 1.8 安装_下载、安装、配置 java jdk1.8

    近期配置react native的开发环境,所以就从配置环境开始.rn的环境配置有那么几项,其中重要的一个就是java jdk(Java Development Kit 的缩写),那么以下就是下载.安 ...

  3. vs安装一直在提取文件_Visual Studio 2019下载及安装教程

    宸1分钟前 这可是我珍藏多年的资源啊. Visual Studio 2019 Microsoft Visual Studio(简称VS)是美国微软公司的开发工具包系列产品.是目前最流行的Windows ...

  4. python安装包_迈出Python学习第一步:Python开发环境的下载与安装

    所谓"磨刀不误砍柴工"."工欲善其事,必先利其器",都在告诉我们一个道理:要做好一个事情,事先做好充分的准备工作是非常重要的.所以在我们正式学习用Python编 ...

  5. oracle怎么下载安装,Oracle数据库的下载和安装方法

    一.Oracle数据的下载与安装: 我这里是Oracle Database 11g Release 2版本的. 1.百度云链接: 链接:https://pan.baidu.com/s/1QYvBVS3 ...

  6. 我的世界php安装,我的世界Linux搭建网页后台Multicraft下载与安装

    小编为大家带来了<我的世界>Linux搭建网页后台Multicraft下载与安装,首先下载Multicraft Linux版,下载好了以后请玩家自己看着下面的教程来安装. 64位:http ...

  7. Editplus下载、安装并最佳配色方案(强烈推荐)

    不多说,直接上干货! Editplus下载 第一步:进入官网 https://www.editplus.com/ 第二步:下载 https://www.editplus.com/download.ht ...

  8. docker基础文档(链接,下载,安装)

    一.docker相关链接 1.docker中国区官网(包含部分中文文档,下载安装包,镜像加速器):https://www.docker-cn.com/ 2.docker官方镜像仓库:https://c ...

  9. 下载、安装、配置 java jdk1.8

    近期配置react native的开发环境,所以就从配置环境开始.rn的环境配置有那么几项,其中重要的一个就是java jdk(Java Development Kit 的缩写),那么以下就是下载.安 ...

  10. transmission Linux(debian)下的BT下载客户端安装

    transmission Linux(debian)下的BT下载客户端安装 转载于:https://blog.51cto.com/2042617/1597540

最新文章

  1. 离散事件模拟-银行管理
  2. mysql问题举例_MySql问题总结
  3. R学习笔记:运行时间记录
  4. HTML5调用手机前置摄像头或后置摄像头拍照,canvas显示,经过Android测试
  5. php投票系统中各个文件的作用说明,PHP开发简单投票系统之投票页面功能模块(二)...
  6. 力扣100. 相同的树(JavaScript)
  7. archlinux 更新错误 Unrecognized archive format
  8. AMESim找图形平衡点的方法
  9. GitLab常用报错及备份
  10. 计算机的原理 组成 分类及应用,计算机组成原理试卷A卷及答案
  11. Spring Boot @Transactional 配置事务管理
  12. 《高等运筹学》复习题手写解答 Advanced Operations Research: Final Exam:Review Exercises
  13. 城市智慧排水系统导论
  14. 2020.8.8List、Set集合练习
  15. 看过这篇文章,再也不要说你是凭实力单身了
  16. 微信如何保存文件?企业微信如何下载文件?
  17. Linux命令详解-hwclock
  18. 新手微信小程序制作教程步骤详解!
  19. SpringBoot中业务层标准开发和快速开发(大全)
  20. RedShift: Transparent SNARKs from List Polynomial Commitments学习笔记

热门文章

  1. 管家婆 凭证查找 Date exceeds maximum of 19-12-31 报错解决办法
  2. 我心中的你是春天的样子
  3. 虚拟光驱安装服务器无法运行,Win7新装虚拟光驱无法打开的解决方法
  4. Windows 7下的虚拟光驱
  5. C# 实现对三维点数据的 显示
  6. 交互设计沉思录:顶尖设计专家Jon Kolko的经验与心得(原书第2版)
  7. fastboot 使用详解
  8. 使用Setup Factory安装包制作工具制作安装包
  9. linux 小度 驱动_360WiFi 小度WiFi 无线网卡驱动下载
  10. InDesign转曲字体 导出PDF的技巧