步骤 1:检查您的设备是否被检测到

步骤 1:检查您的设备是否被检测到

我有一台华为 E303F USB 调制解调器。我安装了 Ubuntu Studio 16.04.1 LTS“Xenial Xerus”。调制解调器检测到由网络管理员。

我可以设置一个移动宽带连接网络管理器。但是无法连接互联网。连接符号显示很长时间然后停止。

但只有在连接到互联网后才能连接视窗然后启动 Ubuntu重启。如果我关闭系统然后启动 Ubuntu(或)拔下设备并重新插入,它不起作用。尽管我可以使用usb_modeswitch任何时候,连接都无法建立。

然后我必须再次启动 Windows 并重新启动进入 Ubuntu。

在 Windows 中连接到互联网并重新启动进入 Ubuntu 后

usb-devices连接时的调制解调器信息

Bus=01 Lev=02 Prnt=02 Port=00 Cnt=01 Dev#=  4 Spd=480 MxCh= 0
D:  Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
P:  Vendor=12d1 ProdID=1506 Rev=01.02
S:  Manufacturer=HUAWEI
S:  Product=HUAWEI Mobile
C:  #Ifs= 7 Cfg#= 1 Atr=80 MxPwr=500mA
I:  If#= 0 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=03 Prot=01 Driver=option
I:  If#= 1 Alt= 0 #EPs= 1 Cls=02(commc) Sub=0e Prot=00 Driver=cdc_mbim
I:  If#= 2 Alt= 1 #EPs= 2 Cls=0a(data ) Sub=00 Prot=02 Driver=cdc_mbim
I:  If#= 3 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=03 Prot=03 Driver=option
I:  If#= 4 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=03 Prot=02 Driver=option
I:  If#= 5 Alt= 0 #EPs= 2 Cls=08(stor.) Sub=06 Prot=50 Driver=usb-storage
I:  If#= 6 Alt= 0 #EPs= 2 Cls=08(stor.) Sub=06 Prot=50 Driver=usb-storage

usb-devices未连接时的调制解调器信息

T:  Bus=01 Lev=02 Prnt=02 Port=00 Cnt=01 Dev#= 11 Spd=480 MxCh= 0
D:  Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
P:  Vendor=12d1 ProdID=1506 Rev=01.02
S:  Manufacturer=HUAWEI
S:  Product=HUAWEI Mobile
C:  #Ifs= 6 Cfg#= 1 Atr=80 MxPwr=500mA
I:  If#= 0 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=03 Prot=01 Driver=option
I:  If#= 1 Alt= 0 #EPs= 1 Cls=ff(vend.) Sub=03 Prot=16 Driver=option
I:  If#= 2 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=03 Prot=03 Driver=option
I:  If#= 3 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=03 Prot=02 Driver=option
I:  If#= 4 Alt= 0 #EPs= 2 Cls=08(stor.) Sub=06 Prot=50 Driver=usb-storage
I:  If#= 5 Alt= 0 #EPs= 2 Cls=08(stor.) Sub=06 Prot=50 Driver=usb-storage

答案1

我的调制解调器在 Ubuntu Studio 16.04 中工作正常

Ubuntu Studio 12.10,我安装了华为驱动程序,它无需任何额外的调整就可以工作。在Ubuntu Studio 15.10,我插上电源后它就工作了。我没有做任何事情来让它工作。在Ubuntu Studio 16.04,我按照简单的步骤usb_modeswitchmodprobe步骤让它工作。论坛上有很多关于此的文章和问题。但我仍然想提一下我是如何做到的,而且非常详细。它涉及以下三个简单步骤,

在尝试以下步骤之前,请先确定您是否拥有制造商为您的设备提供的驱动程序。对于华为,驱动程序太旧了,因此您可以按照以下步骤操作。

步骤 1:检查您的设备是否被检测到

lsusb使用和usb-devices命令检查您的 USB 是否被检测到,

如果结果在列表中显示了您的调制解调器,请查看命令If#中它有多少个接口()usb-devices,每个接口列出一行,以 开头I:

如果它只有一个接口(If#)线,其类规范为“Cls=08(stor.)”,则它处于 USB 闪存驱动器模式。您必须使用下一步将其切换到调制解调器模式。

如果没有列出,则说明您的调制解调器有故障或存在一些问题。

步骤 2:usb_modeswitch 用于切换到“调制解调器模式”

1)子步骤:

第一次更新usb-modeswitchusb_modeswitch-data

如果你能设法以某种方式访问​​互联网,则可以在终端中使用这些命令进行更新:sudo apt-get install usb-modeswitch usb-modeswitch-data

或者

使用‘Synaptic 软件包管理器’下载并离线安装:

您可以使用任何其他具有 Ubuntu 和互联网连接的计算机。打开 synaptic 数据包管理器并在搜索字段中输入 usb-modeswitch,然后在结果中标记这两个包。当您执行此操作时,它会询问是否标记相关的依赖包。单击“标记”。然后转到文件并单击“生成包下载脚本”,选择要保存脚本的目录,并为脚本命名,如“deblist”,然后保存。然后转到脚本的目录。在那里打开一个终端并输入,

bash ./deblist

这会将软件包下载到与脚本相同的目录中。将目录复制到您的计算机,然后在同一目录中打开终端并输入以下内容来安装它们

sudo dpkg -i package1.deb package2.deb package3.deb 

其中 package1.deb、package2.deb、package3.deb 等应该替换为下载的软件包的名称。这样应该会安装软件包。上述步骤适用于任何软件。

2)子步骤:

然后创建一个名为12d1:1446在里面/etc/usb_modeswitch.d/使用该命令以超级用户身份访问目录touch

sudo touch /etc/usb_modeswitch.d/12d1:1446

'12d1' 是华为的供应商 ID,'1446' 是我的设备的“未切换产品 ID”这可以从上面lsusbusb-devices您的设备的命令中获得。

3)子步骤:

然后切换到调制解调器模式,打开终端并输入

sudo usb_modeswitch -v 0x12d1 -p 0x1446 -J

usb_modeswitch 命令应该包含切换方法/消息。这里的切换方法由 指定-J,这是标准的华为切换方法。不同的设备制造商会有所不同。man usb_modeswitch在终端中输入以获取更多信息。

现在usb-devices在终端中输入,您应该会看到一个新的“产品 ID”和列出的设备的许多接口(If#)。大多数接口(If#)应该使用“选项”作为驱动程序。其中一些接口用于互联网连接,大多数情况下,用于连接的接口具有不同的驱动程序,如“huawei_cdc_ncm”。

现在尝试使用 Ubuntu 的“网络管理器”设置“移动宽带连接”来连接到互联网。如果已连接,则您的工作已完成。但如果未连接,则您可以继续下一步。

步骤 3:加载驱动程序

您可以从命令中看到模式切换调制解调器正在使用什么驱动程序usb-devices

1)子步骤:

如果显示“选项”作为所有接口(If#)的驱动程序,除了用作 USB 存储的接口,请继续子步骤 2如下所示(或)如果显示“huawei_cdc_ncm”,请通过键入以下内容转到 /lib/modules/(uname -r)/kernel/drivers/net/usb/,

sudo thunar /lib/modules/(uname -r)/kernel/drivers/net/usb/

或者

sudo nautilis /lib/modules/(uname -r)/kernel/drivers/net/usb/

并通过“剪切粘贴方法”将“huawei_cdc_ncm”移动到任何其他目录中,作为备份。

现在移除设备,重新插入并输入 usb_modeswitch 命令。在usb-devices命令结果中,您应该看到“none”作为用作调制解调器的接口(If#)的驱动程序。

2)子步骤:

现在再次移除设备并输入命令,

sudo rmmod option

从内核中删除选项驱动程序

现在重新插入设备并输入 usb_modeswitch 命令。在usb-devices命令结果中,您仍然应该看到“none”作为调制解调器的驱动程序,而“option”作为其他接口(If#)的驱动程序。

现在打开文件/sys/bus/usb 串行/驱动程序/option1/new_id使用nano

sudo nano /sys/bus/usb-serial/drivers/option1/new_id

输入12d1 1506后使用 ctrl+o 保存,然后使用 ctrl+x 退出。这里1506是“modeswitched 产品 ID”。现在,如果您输入usb-devices,您应该看到“option”作为调制解调器的加载驱动程序。

3)子步骤:

现在使用该modprobe usbserial命令让设备与加载的“选项”驱动程序一起工作。

sudo modprobe usbserial vendor=12d1 product=1506

现在尝试将调制解调器连接到互联网。大多数情况下应该可以连接,但如果没有,请拔下电源并尝试执行步骤 3再次。如果仍然无法连接,有时自动执行这些命令的过程可以将调制解调器连接到互联网。

步骤 4:自动化

为了使这个过程自动化,在完成步骤1子步骤 2,复制以下几行

ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="12d1", ATTRS{idProduct}=="1446", RUN+="/usr/sbin/usb_modeswitch -v 12d1 -p 1446 -J"

ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="12d1", ATTRS{idProduct}=="1446", RUN+="/bin/bash -c 'modprobe option && echo 12d1 1506 > /sys/bus/usb-serial/drivers/option1/new_id'"

使用命令

sudo mousepad /lib/udev/rules.d/40-usb_modeswitch.rules

或者

sudo gedit /lib/udev/rules.d/40-usb_modeswitch.rules

复制后,不要忘记将上面几行中的“产品 ID”更改为“未切换的产品 ID”。现在,如果您拔下设备并再次插入,它应该可以连接到互联网。

即使它确实有效。有时只有在我启动系统后拔下并重新插入后,它才会连接。我认为加载“选项”驱动程序需要一些时间。

答案2

我发现,即使 Ubuntu 有 cdc_mbim 驱动程序,它也无法从用于 Ubuntu 连接的接口中生成两个接口(If#usb-devices命令中)。但 Windows 似乎可以。因此,我猜想重新启动时接口信息仍在调制解调器中,但关闭和打开时则不在。

因此,当启动到 Ubuntu 时,它会检测这些接口并选择正确的驱动程序(cdc_mbim)。但连接并不一定需要两个接口。即使一个带有正确驱动程序的接口也足够了。这意味着如果正确的模块/驱动程序已加载适当地option模块)。

相关内容