Pyserial:无法配置端口:(22, '无效的参数')

问题描述:

在Ubuntu 16.04在VirtualBox中,与连接至USB端口的Beaglebone黑色,运行下面的代码将返回一个错误:Pyserial:无法配置端口:(22, '无效的参数')

import serial 

ser = serial.Serial() 
ser.port = '/dev/sdb' 
ser.baudrate = 9600 
ser.open() 

错误:

Could not configure port: (22, 'Invalid argument') 

我在终端中使用blkid获得了BBB的路径。 BBB通常可以在虚拟机中使用SSH进行访问。

什么是导致错误,为什么Python不能打开端口?


编辑

blkid输出是:

/dev/sr0: UUID="2017-07-17-16-26-18-00" LABEL="VBOXADDITIONS_5.1.24_117012" TYPE="iso9660" 
/dev/sda1: UUID="58957263-a785-44f1-89a0-a66efd56623f" TYPE="ext4" PARTUUID="306fada4-01" 
/dev/sda5: UUID="2e8ad169-1527-4336-9169-e189688038cd" TYPE="swap" PARTUUID="306fada4-05" 
/dev/sdb: SEC_TYPE="msdos" LABEL="boot" UUID="0CD5-4AE7" TYPE="vfat" 
/dev/sdc1: LABEL="WATTO" UUID="BAF1-8FE6" TYPE="vfat" PARTUUID="1299f9fa-01" 

哪里/dev/sdb是BBB的路径和/dev/sdc1 U盘的路径。


ls -l /dev/sd*回报:

brw-rw---- 1 root disk 8, 0 jul 31 11:14 /dev/sda 
brw-rw---- 1 root disk 8, 1 jul 31 11:14 /dev/sda1 
brw-rw---- 1 root disk 8, 2 jul 31 11:14 /dev/sda2 
brw-rw---- 1 root disk 8, 5 jul 31 11:14 /dev/sda5 
brw-rw-rw- 1 666 disk 8, 16 jul 31 16:32 /dev/sdb 
brw------- 1 root root 8, 32 jul 31 16:52 /dev/sdc 
brw------- 1 root root 8, 33 jul 31 16:52 /dev/sdc1 


lsblk回报:

NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT 
sda  8:0 0 12G 0 disk 
├─sda1 8:1 0 10G 0 part/
├─sda2 8:2 0 1K 0 part 
└─sda5 8:5 0 2G 0 part [SWAP] 
sdb  8:16 1 96M 0 disk /media/alexander/boot 
sdc  8:32 1 7,5G 0 disk 
└─sdc1 8:33 1 7,5G 0 part /media/alexander/WATTO 
sr0  11:0 1 56,8M 0 rom /media/alexander/VBOXADDITIONS_5.1.24_117
+1

'的/ dev/sdb'不是串行端口 - 它通常是某种类型的文件存储驱动器。串行端口通常看起来像'/ dev/ttyS0'或'/ dev/ttyUSB0'或类似的。 – jszakmeister

+0

如果我插入一个USB棒,它的路径是:'/ dev/sdc /'。这种行为可能是由于VirtualBox造成的吗? – Alexander

+0

分享您的blkid输出,因为@jszakmeister写道/ dev/sdb通常映射到硬盘驱动器 – Vinny

你可能有错误的设备名称:阅读在这个结尾的链接案件, VirtualBox很可能会误解主机USB串行设备,因此分配了错误的设备(/ dev)名称。

“/ dev/sdb”可能是一个块设备,如硬盘驱动器。

$ ls -l /dev/sd* 
brw-rw---- 1 root disk 8, 0 Jul 31 13:59 /dev/sda 
brw-rw---- 1 root disk 8, 1 Jul 31 13:59 /dev/sda1 
brw-rw---- 1 root disk 8, 2 Jul 31 13:59 /dev/sda2 
brw-rw---- 1 root disk 8, 5 Jul 31 13:59 /dev/sda5 
^ 
Note 'b' for block device 

串行端口将如“的/ dev/ttyUSB0”

$ ls -l /dev/ttyUSB0 
crw-rw---- 1 root dialout 188, 0 Jul 31 14:34 /dev/ttyUSB0 
^ 
Note 'c' for character device 

串行端口经常有组设置为“拨出” - 但是这仅仅是信息,这被设置为一部分承认它是一个串口。

您也不妨就在VirtualBox中使用主机串行USB设备读取的档案:https://techtooltip.wordpress.com/2008/09/12/using-host-serial-port-from-guest-in-virtual-box/

+0

我将自己添加到拨出组,但错误仍然存​​在。我在原始问题中添加了一些输出,请在上面查看 – Alexander

+0

阅读我发布的项目 - 您的拨出成员资格与此事无关。 – MikeW

+0

谢谢你的回答,看来问题在于VirtualBoxe的串口设置。我遵循上述教程,但在尝试运行来宾计算机时遇到了另一个错误。我发布了[关于错误的新问题](https://*.com/questions/45439160/virtualbox-failed-to-open-host-device-com1-verr-file-not-found) – Alexander

的Beaglebone似乎只显示通过USB连接的文件系统是:/ dev/sdb的 如果你想连接到它通过串行连接,您需要一个USB转TTY转换器。 (例如PL2303HX,2美元-10美元)。 你也可以按照这个教程来连接电脑到你的串口。

http://www.dummies.com/computers/beaglebone/how-to-connect-the-beaglebone-black-via-serial-over-usb/