linux usb转串口驱动_linux usb转串口驱动安装

       大家好,今天我想和大家聊一聊关于“linux usb转串口驱动”的话题。为了让大家更好地理解这个问题,我将相关资料进行了梳理,现在就让我们一起来交流吧。

1.arduino没有port

2.vmware里usb转串口

3.linux 下载程序

4.如何解决Linux下USB设备节点名不固定问题

linux usb转串口驱动_linux usb转串口驱动安装

arduino没有port

       Linux的arduino中没有端口这个选项,帮您查询到 首先下载CH34x驱动直接解压到你想要的地方右键文件夹打开终端,输入 sudo make会报错,直接注释掉(591, 797, 798),797行的要把if后面的一块注释掉,保存重新 sudo make ,然后 sudo make load再输入一个命令就可以了,sudo chmod 777 /dev/ttyUSB0(/ttyUSB0要换成ArduinoIDE左下角的值)。

vmware里usb转串口

       USB采用树形拓扑结构,主机侧和设备侧的USB控制器分别称为主机控制器((Host Controller)和USB设备控制器(UDC),每条总线上只有一个主机控制器,负责协调主机和设备间的通信,而设备不能主动向主机发送任何消息。

       在Linux系统中,USB驱动可以从两个角度去观察,一个角度是主机侧,一个角度是设备侧。从上图主机侧去看,在Linux驱动中,处于USB驱动最底层的是USB主机控制器硬件,在其上运行的是USB主机控制器驱动,在主机控制器上的为USB核心层,再上层为USB设备驱动层(插入主机上的U盘、鼠标、USB转串口等设备驱动)。因此,在主机侧的层次结构中,要实现的USB驱动包括两类:USB主机控制器驱动和USB设备驱动,前者控制插入其中的USB设备,后者控制USB设备如何与主机通信。Linux内核中的USB核心负责USB驱动管理和协议处理的主要工作。主机控制器驱动和设备驱动之间的USB核心非常重要,其功能包括:通过定义一些数据结构、宏和功能函数,向上为设备驱动提供编程接口,向下为USB主机控制器驱动提供编程接口;维护整个系统的USB设备信息;完成设备热插拔控制、总线数据传输控制等。

linux 下载程序

       可以尝试卸载转接器在win7里面的驱动,不要让win7识别到它。

       插入设备后,虚机开机状态下,会询问将USB设备接在主机上,还是虚机上,直接选择接在虚机上面。

       确保虚机上的Linux可以驱动这个USB2RS232设备。

       ==========

       如果你在Win7里面已经把设备驱动成为串口了,再映射给虚机,通常这种情况是不工作的,因为虚机没有办法辨别这到底是USB设备还是串口设备。

如何解决Linux下USB设备节点名不固定问题

       Linux下根本不用专门去安装USB转串口的驱动,/dev/ttyUSB0这种就是USB转的串口产生的设备文件。

        你这个led.bin,看样子应该是一个裸机程序,不知道你开发板什么类型,但是我可以给你说下我当时的做法,我用的是mini2440。

        Linux环境下,我没有使用虚拟机,你自己参考下吧

        找到Dnw_for_linux,里面包含两个东西,一个是USB线对应的下载驱动(记不清楚名字了),编译好之后执行insmod [模块名称] 把模块给安装上就算是安装好了驱动;一个是dnw的应用程序。

        上面的工具准备好了之后,你下载的led,bin,是一个裸机程序,所以需要让板子进入到bootloader(vivi或者uboot),在bootloader(vivi)中选择下载程序到RAM中(这个选择是在打开minicom,串口和开发板连接好,启动bootloader看到的菜单中可以选择的),然后板子就会等待数据,此时你用dnw去发送数据,在命令行下执行:dnw /path/to/file (USB下载驱动安装好了的话,就会显示数据发送的进度),而串口中也会显示一些接受文件的信息。搞定之后就直接执行了~

       PS: 我没有用minicom去发送过文件,不过串口发送数据相当慢~刚才说的那种用USB下载更节省时间一些。我不知道你是怎么操作的,Retry 0: Timeout on pathname 这个是路径超时,我也不太清楚是什么缘故,我估计是你没有让板子进入等待数据状态的原因,也就是开发板根本没有在接受数据。

       PPS:我刚才说的是裸机程序,就是开发板上没跑操作系统的情况,因为你用的是led.bin,这一看就是裸机程序,无操作系统情况下跑的,如果是这种情况,为了方便,一般会去使用仿真器或者ISP工具去烧写程序;如果开发板有操作系统(Linux),而你想测试的也不是裸机程序,你就按照bingoabc 这位仁兄说的用用sftp,或者更便捷的方式:nfs(NSF方式如何操作自行百度)

       PPPS:我觉得你既然都在windows下安装vmware操作了,不如直接用win下现成下载工具来的快。毕竟你要学的是技术内容,而不是操作方法,下载方式这里就先别纠结了。如果你是运行在linux下而不是虚拟机下,我上述内容应该会有些帮助~

       Linux下USB设备节点名不固定问题经常会遇到,下面就是解决的方法:

       以USB转串口为例,通常设备节点名为ttyUSBx(x为0~n),Linux内核会根据插入设备的先后顺序进行编号的分配,比如第一个插入的设备编号为0,然后依此加1。

       如果仅仅以设备节点ttyUSBn来区别具体是哪个设备,因为末位的编号是随时会变的,所以就会造成混乱。无法保证A设备就是0,B设备就是1。其实这个问题在LDD3上已经提到过,目前的内核早已经解决类似的问题,将所以有USB设备都导致到sys文件系统中,其实每个USB端口都有唯一的端口号,相当于每个门店的门牌号。只要我们依据端口号来进行设备的区分,那么问题就迎刃而解了。

       比如当前设备插入两个USB转串口设备后,查看ttyUSBn所在端口的端口号:

       root@android:/ $ ls -l /sys/class/tty/

       ...

       lrwxrwxrwx root root 2011-01-01 13:40 ttyUSB0 -> ../../devices/ff540000.usb/usb3/3-1/3-1.1/3-1.1:1.0/ttyUSB0/tty/ttyUSB0

       lrwxrwxrwx root root 2011-01-01 13:43 ttyUSB1 -> ../../devices/ff540000.usb/usb3/3-1/3-1.2/3-1.2:1.0/ttyUSB1/tty/ttyUSB1

       root@android:/ $ 12345

       其中ttyUSB0所在的端口号为3-1.1,而ttyUSB1所在的端口号为3-1.2。

       其它类型USB设备同理,以上思路清理完毕。

       查看系统当前usb设备,下面是对第二列排序的结果。

       $ lsusb

       Bus 001 Device 001: ID xxx:xxx Linux Foundation 2.0 root hub

       Bus 001 Device 002: ID xxx:xxx Intel Corp. Integrated Rate Matching Hub

       Bus 001 Device 003: ID xxx:xxx Genesys Logic, Inc. GL827L SD/MMC/MS Flash Card Reader

       Bus 001 Device 005: ID xxx:xxx Philips (or NXP)

       Bus 002 Device 001: ID xxx:xxx Linux Foundation 2.0 root hub

       Bus 002 Device 002: ID xxx:xxx Intel Corp. Integrated Rate Matching Hub

       Bus 002 Device 003: ID xxx:xxx Intel Corp.

       Bus 003 Device 001: ID xxx:xxx Linux Foundation 2.0 root hub

       Bus 004 Device 001: ID xxx:xxx Linux Foundation 3.0 root hub

       第二列是usb设备的hub编号。pc中usb设备都是接在hub上的,即使你的主板提供好多usb口,他们实际都是接在hub上的。

       第四列是usb设备编号,设备在本机的编号。

       所以,上面信息显示一共有4个usb hub(3个usb2.0,一个usb3.0)。如果

       黑体字部分是我机器上的三个设备,001.003 是机箱自带读卡器,001.005是无线键盘,002.003是intel无线网卡蓝牙模块(具体怎么知道的往下看)。

       usb设备也可以用在内核文件中找到/sys/bus/usb/devices。linux将所有设备驱动映射到了/sys下。

       ls -1 /sys/bus/usb/devices/

       1-0:1.0

       1-1

       1-1:1.0

       1-1.2

       1-1.2:1.0

       1-1.4

       1-1.4.1

       1-1.4:1.0

       1-1.4.1:1.0

       1-1.4.1:1.1

       1-1.4.1:1.2

       1-1.5

       1-1.5:1.0

       1-1.5:1.1

       1-1.5:1.2

       2-0:1.0

       2-1

       2-1:1.0

       2-1.5

       2-1.5:1.0

       2-1.5:1.1

       3-0:1.0

       4-0:1.0

       usb1

       usb2

       usb3

       usb4

       都是符号连接。也可以用ls -l /sys/bus/usb/devices/ 看具体位置

       输出看起来比较乱。用 udevadm工具能比较清楚列出设备信息。命令看起来是这样的:

       udevadm info -p /sys/bus/usb/devices/usb1 -q property

       那怎么找出是那个usb设备呢?

       Bus 002 Device 003: ID xxx:xxx Intel Corp.

       第二列,002 就要在所有2开头的文件去找,下面的符合第一规则。

       2-0:1.0

       2-1

       2-1:1.0

       2-1.5

       2-1.5:1.0

       2-1.5:1.1

       通常系统的usb hub占据了`-`减号后第一位0。第一个 2-0:1.0,就是usb hub。

       2-1.5*文件就是上面的设备。

       $ udevadm info -p /sys/bus/usb/devices/2-1.5 -q property

       BUSNUM=002

       DEVNAME=/dev/bus/usb/002/003

       DEVNUM=003

       ............

       ID_MODEL_ID=xxx

       ............

       ID_VENDOR=xxx

       ............

       ID_VENDOR_FROM_DATABASE=Intel Corp.

       ............

       002和003 就是lsusb 的第2/4列. 第6列,来自modelID和vender。

       lsusb中的的东东就是这么来的。

       那问题是怎么知道是蓝牙呢? 答案是继续用udevadm查:

       $ udevadm info -p /sys/bus/usb/devices/2-1.5:1.0 -q property

       ID_USB_CLASS_FROM_DATABASE=Wireless

       ID_USB_PROTOCOL_FROM_DATABASE=Bluetooth

       ID_USB_SUBCLASS_FROM_DATABASE=Radio Frequency

       ID_VENDOR_FROM_DATABASE=Intel Corp.

       今天的讨论已经涵盖了“linux usb转串口驱动”的各个方面。我希望您能够从中获得所需的信息,并利用这些知识在将来的学习和生活中取得更好的成果。如果您有任何问题或需要进一步的讨论,请随时告诉我。