Как подключиться к Raspberry Pi Zero к ноутбуку Ubuntu по USB?

1

Я попытался следовать приведенным здесь инструкциям, чтобы, надеюсь, я смог использовать мой Raspberry Pi Zero, не покупая USB-клавиатуру, мышь и монитор.

После этого я не смог войти в 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

Кто-нибудь может пролить свет на то, что означают эти журналы? Обширный поиск в Google не принес результатов для меня.

Я использую Ubuntu 16.04.1 LTS 64-bit на Lenovo Z50 (работает на Ubuntu, но немного хитро, что, вероятно, является источником большинства проблем, с которыми я сталкиваюсь на этом ноутбуке). Я также пытался использовать ноутбук с Windows. Это сработало после того, как я установил программное обеспечение Bonjour от Apple.

Выходные данные 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 kernal (последняя стабильная версия v4.8.11) и сделал некоторые заметки.

Я обнаружил, что «Кевент бла, возможно, был отброшен», добавлен в функцию под названием «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: сбой зонда blah с ошибкой. blah вызывается в 'same_probe' в drivers / base / dd.c. Похоже, Linux тестирует драйверы, чтобы выяснить, подходят ли они, проверяя устройство с помощью драйвера. В любом случае, это мое предположение. Необходимо выяснить, что такое «-22» и «-16».

Подозрение : у меня не установлен подходящий драйвер

В любом случае, я буду продолжать это делать.

пс. извините за неуместное небольшое количество информации здесь. Я как бы использую это как блокнот для копания.

philmegamega
источник
RasperryPi, кажется, имеет назначенный адрес IPv6. Попробуйте использовать sshIPv6 через ssh -6 fe80::7af9:c911:f518:cedeи посмотрите, поможет ли это вам. И дважды проверьте имя хоста Pi, так как оно не может быть решено (однако, это может быть также проблема IPv4 или IPv6). Можете ли вы пинговать Pi через DNS-имя?
Фиксиман
Спасибо @Fiximan. Я попытался 'ssh -6 fe80 :: b1f2: e0c2: fa74: b356' и получил 'ssh: connect to host ... Неверный аргумент'. Поэтому после быстрого Google я попробовал 'ssh -6 fe80 :: b1f2: e0c2: fa74: b356% enp0s20u3' и получил 'ssh: соединение с хостом fe80 :: b1f2: e0c2: fa74: b356% enp0s20u3 порт 22: соединение отказано' , Это та же проблема, что и у меня, если я попробую после 'sudo ifconfig enp0s20u3 некоторый IP-адрес '. Я не могу пропинговать пи, используя имя DNS нет. Я получу «неизвестный хост», если попробую. Я уверен, что DNS-имя должно быть raspberrypi.local, так как я заставил его работать в Windows, используя это DNS-имя вчера.
philmegamega
Вы можете попробовать опубликовать это на Raspberry Pi SO ( raspberrypi.stackexchange.com ).
thephez
@thephez Хорошее предложение. За исключением того, что я думаю, что тот факт, что я получил соединение для работы на ноутбуке с Windows, указывает на то, что мне нужно смотреть на свой ноутбук, а не на пи. Я постараюсь опубликовать там, если мне не повезет.
philmegamega
@philmegamega Ну, я забыл о спецификации устройства - извините. Может быть, попробуйте пропустить входящий .localв ваш DNS-пинг, и AFAIK, указанное устройство будет ЛОКАЛЬНЫМ устройством, с которого начинается соединение, т. Е. Устройством вашего клиента - так что, возможно, проверьте ifconfigправильность имени устройства в вашей Ubuntu . (но я не слишком знаком с IPv6). Кроме того: кросспостинг обычно не поощряется ....
Fiximan

Ответы:

1

Вам нужно войти в меню сетевого менеджера, Edit Connections… и отредактировать новое соединение Ethernet (для меня это было «Проводное соединение 2»). Перейдите на вкладку IPv4 и измените метод на «Link-Local only». Нажмите Сохранить, а затем Закрыть.

Сетевой интерфейс usb0 получит адрес 169.254.xy, и «ssh pi@raspberrypi.local» будет работать так же, как и должен.

InvulgoSoft
источник
0

Я испытал, что соединение не установлено правильно из-за переименования 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.

Расмус
источник
Спасибо за это Расмус. В конце концов я купил Rpi 3 и просто подключился через Wifi! Я пойду с этим на старом пи в какой-то момент.
philmegamega