linux usb转串口驱动_linux usb转串口驱动安装
大家好,今天我想和大家聊一聊关于“linux usb转串口驱动”的话题。为了让大家更好地理解这个问题,我将相关资料进行了梳理,现在就让我们一起来交流吧。
1.arduino没有port
2.vmware里usb转串口
3.linux 下载程序
4.如何解决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转串口驱动”的各个方面。我希望您能够从中获得所需的信息,并利用这些知识在将来的学习和生活中取得更好的成果。如果您有任何问题或需要进一步的讨论,请随时告诉我。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。