如何通过 USB 将 Raspberry Pi Zero 连接到 Ubuntu 笔记本电脑?

如何通过 USB 将 Raspberry Pi Zero 连接到 Ubuntu 笔记本电脑?

我试过按照此处显示的说明进行操作所以希望我能够在不购买 USB 键盘、鼠标和显示器的情况下使用我的 Raspberry Pi Zero。

完成上述操作后,我无法通过 ssh 登录 Raspberry Pi Zero。我得到的输出是:

ssh: Could not resolve hostname raspberrypi.local: Name or service not known

我尝试了 dmesg 并看到以下内容:

[ 2060.683489] usb 2-1: new high-speed USB device number 6 using xhci_hcd
[ 2065.979176] usb 2-1: new high-speed USB device number 7 using xhci_hcd
[ 2066.108051] usb 2-1: New USB device found, idVendor=0525, idProduct=a4a2
[ 2066.108056] usb 2-1: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[ 2066.108058] usb 2-1: Product: RNDIS/Ethernet Gadget
[ 2066.108060] usb 2-1: Manufacturer: Linux 4.4.21+ with 20980000.usb
[ 2066.233624] cdc_subset: probe of 2-1:1.0 failed with error -22
[ 2066.234408] cdc_subset 2-1:1.1 usb0: register 'cdc_subset' at usb-0000:00:14.0-1, Linux Device, 6a:2b:ee:30:07:6e
[ 2066.235273] usbcore: registered new interface driver cdc_subset
[ 2066.236484] cdc_ether: probe of 2-1:1.0 failed with error -16
[ 2066.236507] usbcore: registered new interface driver cdc_ether
[ 2066.238455] cdc_subset 2-1:1.1 enp0s20u1i1: renamed from usb0
[ 2066.264145] IPv6: ADDRCONF(NETDEV_UP): enp0s20u1i1: link is not ready
[ 2066.264275] cdc_subset 2-1:1.1 enp0s20u1i1: kevent 12 may have been dropped
[ 2066.264281] cdc_subset 2-1:1.1 enp0s20u1i1: kevent 12 may have been dropped
[ 2066.264627] cdc_subset 2-1:1.1 enp0s20u1i1: kevent 12 may have been dropped
[ 2066.265568] cdc_subset 2-1:1.1 enp0s20u1i1: kevent 12 may have been dropped
[ 2066.265575] cdc_subset 2-1:1.1 enp0s20u1i1: kevent 12 may have been dropped
[ 2066.274193] cdc_subset 2-1:1.1 enp0s20u1i1: kevent 12 may have been dropped
[ 2111.934891] cdc_subset 2-1:1.1 enp0s20u1i1: kevent 12 may have been dropped
[ 2111.934898] cdc_subset 2-1:1.1 enp0s20u1i1: kevent 12 may have been dropped
[ 2111.936117] cdc_subset 2-1:1.1 enp0s20u1i1: kevent 12 may have been dropped
[ 2111.948226] cdc_subset 2-1:1.1 enp0s20u1i1: kevent 12 may have been dropped
[ 2111.948247] cdc_subset 2-1:1.1 enp0s20u1i1: kevent 12 may have been dropped
[ 2111.948251] cdc_subset 2-1:1.1 enp0s20u1i1: kevent 12 may have been dropped

有人能解释一下这些日志的含义吗?我谷歌搜索了很久,但一无所获。

我在联想 Z50 上使用 Ubuntu 16.04.1 LTS 64 位(运行 Ubuntu 但有点不稳定,这可能是这台笔记本电脑出现大多数问题的根源)。我也尝试过使用 Windows 笔记本电脑。在我安装了 Apple 的 Bonjour 软件后,它就正常工作了。

ifconfig 的输出表明该设备没有 IP 地址,所以我不确定如何连接它。

enp0s20u3 Link encap:Ethernet  HWaddr ce:77:fe:7a:9f:66  
          inet6 addr: fe80::7af9:c911:f518:cede/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:30 errors:0 dropped:0 overruns:0 frame:0
          TX packets:84 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:5660 (5.6 KB)  TX bytes:13989 (13.9 KB)

谢谢!

更新:

谨防以下所有误导性的内容

好的,我下载了 Linux 内核源(最新稳定版本 v4.8.11)并做了一些 grepping。

我发现“Kevent废话可能已被丢弃”在名为“usbnet_defer_kevent”的函数中被抛出。

/* some work can't be done in tasklets, so we use keventd
 *
 * NOTE:  annoying asymmetry:  if it's active, schedule_work() fails,
 * but tasklet_schedule() doesn't.  hope the failure is rare.
 */
void usbnet_defer_kevent (struct usbnet *dev, int work)
{
    set_bit (work, &dev->flags);
    if (!schedule_work (&dev->kevent)) {
        if (net_ratelimit())
            netdev_err(dev->net, "kevent %d may have been dropped\n", work);
    } else {
        netdev_dbg(dev->net, "kevent %d scheduled\n", work);
    }
}
EXPORT_SYMBOL_GPL(usbnet_defer_kevent);

我发现usbnet_defer_kevent(dev, EVENT_SET_RX_MODE);在几个地方都出现了问题,结果发现我们在 usbnet.h 中定义了它,就像这样# define EVENT_SET_RX_MODE 12。但还不确定EVENT_SET_RX_MODE是什么(嗯,不是它应该枚举的内容),所以如果有人能帮忙的话请帮忙。

cdc_subset:探测废话失败并出现错误废话在 drivers/base/dd.c 中的“really_probe”中被调用。看起来 Linux 通过使用驱动程序“探测”设备来测试驱动程序,以查看它们是否合适。无论如何,这是我的猜测。需要找出“-22”和“-16”是什么。

怀疑:我没有安装合适的驱动程序

无论如何我都会继续努力。

附言:抱歉,这里的信息有些杂乱无章。我把它当成我自己挖掘的记事本。

答案1

您需要进入网络管理器菜单,编辑连接…并编辑新的以太网连接(对我来说是“有线连接 2”)。切换到 IPv4 选项卡,并将方法更改为“仅本地链路”。单击保存,然后单击关闭。

然后,usb0 网络接口将被分配一个 169.254.xy 地址,并且“ssh[电子邮件保护]” 将会正常工作。

答案2

我遇到过由于 usb0 被重命名而无法正确建立连接的情况。对我有用的方法是确保使用 usb0 名称设置连接。

在 /etc/network/interfaces 中,我将以下内容附加到文件中(您可以根据需要更改地址):

auto usb0
iface usb0 inet static
    address 10.9.8.1
    netmask 255.255.255.0
    up iptables -A FORWARD -i usb0 -j ACCEPT
    up iptables -A FORWARD -o usb0 -j ACCEPT
    up iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

为了确保 usb0 被识别,必须创建以下文件

/etc/udev/rules.d/70-persistent-net.rules

文件中附加了以下内容

SUBSYSTEM=="net", ACTION=="add", DRIVERS=="cdc_ether", NAME="usb0"
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="cdc_eem", NAME="usb0"
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="cdc_subset", NAME="usb0"

现在,计算机上的网络应该已正确设置,并且您应该能够连接到 RPI

相关内容