Conecte as caixas Linux no IP sobre USB

3

Eu passei por A melhor maneira de fazer TCP / IP via USB no Linux? , e gostaria de saber mais sobre a viabilidade / procedimento para ter duas caixas Linux conversando entre si via USB. Eu fiz isso há alguns anos facilmente através do Serial Link e foi bastante estável e maduro.

A idéia é ter o dispositivo de rede nomeado relacionado ( eth0 , usb0 , wlan0 , ..) em /sys/class/net e, em seguida, poder brincar com os comandos ifconfig / route , como qualquer outro dispositivo de rede para atribuição de endereços IP, roteamento, ping, ... mas essa é a parte final fácil.

Para conseguir isso, vejo diferentes problemas / etapas:

  1. HW: cabeamento. Eu acho que 2 computadores só têm conectores USB tipo A 'host', enquanto o cabo USB comum tem um conector tipo A e outro tipo B: um cabo deve ser cuidadosamente preparado para evitar a troca de energia, mas permitir apenas dados. Corrigir? (Eu estou cobrindo apenas o protocolo USB < = 2.0 aqui, como eu sei que o USB 3.x pode realizar a fiação full-duplex)

    Claro, se eu quiser conectar um PC (host / USB) a um 'dispositivo' (rasbpi, mini2440, arduino, ..,) eu realmente teria uma extremidade tipo B e um cabo USB 'estúpido' poderia ser usado. Correto?

  2. Kernel / Driver: o que está presente no kernel para atribuir um dispositivo de rede a uma porta USB? Semelhante ao IP sobre /dev/ttySxx ? E se o driver do kernel USB não estiver pronto no outro lado?

  3. Identificação da porta / conector: como o kernel saberá qual porta estou realmente usando (especialmente se a fiação de energia for interrompida em um cabo dedicado)? Como faço para identificar minha porta?

  4. Finalmente, do ponto de vista da camada de rede, o que devo esperar? uma ponte simples para Ethernet? ou cada lado USB teria um endereço IP atribuído?

Espero que isso não seja muito confuso e você consiga o que estou tentando alcançar. Mas como costuma ser tão simples fazer IP (Ethernet?) Através de um link serial, espero que seja também o caso do USB.

    
por bli 01.07.2016 / 15:41

1 resposta

0

1) O problema com o usb é que é um protocolo mestre / escravo. PCs são mestres, e você não pode conectar dois mestres diretamente juntos, então um cabo mudo direto não funcionará.

Você pode usar algo como link , mas você pode Bem, apenas use ethernet. Qualquer outra solução de hardware será semelhante:

pc <--usb--> usb slave ic/microcontroller <--common protocol--> usb slave ic/microcontroller <--usb--> pc

2) Para algo como o adaptador de rede usb acima, ele já deve ter um driver de kernel que irá configurar um dispositivo de rede com o qual você pode interagir da mesma maneira que você faz com eth0 ou wlan0, mas pode ter um nome diferente.

Um ic projetado adequadamente (como o do dispositivo mencionado acima) que funciona com o módulo de kernel embutido não se importará se o dispositivo na outra extremidade estiver pronto, será apenas como se o cabo Ethernet estivesse desconectado.

3) O dispositivo deve ser exposto como qualquer outro adaptador de rede, ip addr ou ifconfig deve listá-lo uma vez conectado.

4) Você deve esperar um dispositivo de rede como qualquer outro dispositivo, você pode tratá-lo como um cabo ethernet diretamente de um computador para outro.

Você não pode usar um raspberry pi para isso, é um dispositivo host como os PCs.

O Arduino pode funcionar, mas você precisará de dois. O leonardo é melhor é construído em suporte usb assim lhe dará melhor velocidade. Mas o arduino não tem software para suportar redes usb, então você terá que escrever isso sozinho (não é trivial). O mesmo vai ser verdade para muitos microcontroladores. A melhor aposta é encontrar um com suporte de rede escravo, acho que o mbed pode fazer isso, mas você ainda precisará escrever código para unir os dois microcontroladores.

Mas a maneira mais fácil e mais barata é usar duas coisas como link . Em seguida, remova o revestimento, desolda os cabeçalhos e solde um cabo ethernet diretamente nas portas. Mas isso não dará muita vantagem sobre o uso de um cabo ethernet, se algo o tornar uma solução um pouco menos flexível (embora talvez menos volumosa). Você poderia criar sua própria placa com os ICs e conectá-los em um único PCB, mas isso será um pouco mais trabalhoso sem nenhum benefício real.

    
por 05.07.2016 / 02:41