AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / unix / Perguntas / 782447
Accepted
barak
barak
Asked: 2024-08-24 00:19:50 +0800 CST2024-08-24 00:19:50 +0800 CST 2024-08-24 00:19:50 +0800 CST

Não é possível estabelecer uma conexão TCP/IP direta pela Ethernet entre STM32MP157 e um host

  • 772

Esta é uma pergunta para iniciantes em redes. Tentei encontrar uma solução na web, mas sem sucesso.

Objetivo: Estabelecer uma conexão TCP/IP via Ethernet diretamente entre meu PC host Linux e uma placa STM32MP157, para que eu pudesse enviar e receber pacotes usando soquetes C e programas cliente/servidor simples ( como estes ).

  • Nesta questão estou me referindo ao BeagleBone Black como um caso de teste extra. Presumo que tudo o que está faltando é relevante para ambos, mas lembre-se de que meu objetivo é comunicar-me com a placa STM32MP1.

PC host: Kernel versão 5.15.0-117-genérico

Detalhes: Realizei alguns testes, conectando o cabo Ethernet em diversas situações, e é isso que surge:

  1. Quando eu conecto meu host Linux diretamente ao meu roteador doméstico, a conexão é estabelecida, IPv4:10.100.102.47/24

  2. Quando conecto o STM32MP1 diretamente ao meu roteador doméstico, a conexão é estabelecida:

root@stm32mp1:~# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
    valid_lft forever preferred_lft forever
2: end0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 10:e7:7a:e1:8b:a4 brd ff:ff:ff:ff:ff:ff
    altname ethernet0
    altname ethernet0.ethernet
    inet 10.100.102.46/24 metric 10 brd 10.100.102.255 scope global dynamic end0
    valid_lft 3568sec preferred_lft 3568sec
    inet6 fe80::12e7:7aff:fee1:8ba4/64 scope link
    valid_lft forever preferred_lft forever
3: usb0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc fq_codel state DOWN group default qlen 1000
    link/ether 7e:8f:a7:2e:04:e5 brd ff:ff:ff:ff:ff:ff

root@stm32mp1:~# ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=118 time=7.27 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=118 time=6.17 ms
  1. Quando conecto o BBB direto ao meu roteador doméstico, a conexão é estabelecida:
root@bela:~# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
    valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether e0:ff:f1:d8:ee:5d brd ff:ff:ff:ff:ff:ff
    inet 10.100.102.44/24 brd 10.100.102.255 scope global eth0
    valid_lft forever preferred_lft forever
    inet6 fe80::e2ff:f1ff:fed8:ee5d/64 scope link
    valid_lft forever preferred_lft forever
3: usb0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether be:1a:f1:d8:ee:5f brd ff:ff:ff:ff:ff:ff
    inet 192.168.6.2/24 brd 192.168.6.255 scope global usb0
    valid_lft forever preferred_lft forever
    inet6 fe80::bc1a:f1ff:fed8:ee5f/64 scope link
    valid_lft forever preferred_lft forever
4: usb1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether be:1a:f1:d8:ee:62 brd ff:ff:ff:ff:ff:ff
    inet 192.168.7.2/24 brd 192.168.7.255 scope global usb1
    valid_lft forever preferred_lft forever
    inet6 fe80::bc1a:f1ff:fed8:ee62/64 scope link
    valid_lft forever preferred_lft forever

root@bela:~# ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=118 time=6.36 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=118 time=5.79 ms

192.168.6.2/24 e 192.168.7.2/24 são atribuídos antes da conexão ao roteador.

  1. Quando conecto o STM32MP1 (assim como o BBB) diretamente ao meu PC host Linux, a conexão não é estabelecida:
root@stm32mp1:~# 
[   65.854953] stm32-dwmac 5800a000.ethernet end0: Link is Up - 1Gbps/Full - flow control rx/tx
[   65.862162] IPv6: ADDRCONF(NETDEV_CHANGE): end0: link becomes ready

root@stm32mp1:~# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
    valid_lft forever preferred_lft forever
2: end0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 10:e7:7a:e1:8b:a4 brd ff:ff:ff:ff:ff:ff
    altname ethernet0
    altname ethernet0.ethernet
    inet6 fe80::12e7:7aff:fee1:8ba4/64 scope link
    valid_lft forever preferred_lft forever
3: usb0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc fq_codel state DOWN group default qlen 1000
    link/ether e2:40:83:22:5d:7a brd ff:ff:ff:ff:ff:ff
root@stm32mp1:~#

Emitir:

A verificação nº 1 mostra que a porta Ethernet do meu host pode funcionar.

As verificações nº 2,3 mostram que as portas Ethernet das placas alvo são capazes de funcionar.

A verificação nº 4 mostra que a conexão não foi estabelecida entre o host e um quadro de destino.

Em vez disso, ao conectar o host e o STM32MP1: Enquanto o cabo estiver conectado, uma mensagem de erro dizendo “Falha na conexão: falha na ativação da conexão de rede” apareceria na tela do host periodicamente.

Como isso pode ser resolvido? Obrigado

Informações adicionais: Se eu conectar o destino (cabo eth) e o host (sem fio) ao roteador, consigo me comunicar pela rede. Mas preciso de uma conexão direta entre a máquina, sem o roteador no meio.

O guia do STM sobre como configurar a interface Ethernet do STM32MP1 sugere:

If a DHCP server is not available, one can set the Ethernet IP address with :
Board $> ifconfig end0 uuu.xxx.yyy.zzz

Eu fiz isso, mas não importa porque a conexão nunca é estabelecida com o host.

networking
  • 2 2 respostas
  • 34 Views

2 respostas

  • Voted
  1. Best Answer
    telcoM
    2024-08-24T13:35:24+08:002024-08-24T13:35:24+08:00

    Seu roteador doméstico atua como um servidor DHCP; ele atribui automaticamente endereços IP para qualquer sistema conectado ao seu segmento de rede . Ter mais de um servidor DHCP em um único segmento de rede causará caos, a menos que os servidores DHCP sejam configurados especificamente para cooperar entre si, e o recurso do servidor DHCP de um roteador doméstico normal de consumo pode não ser flexível o suficiente para tal configuração.

    Seu PC host Linux não possui atualmente um servidor DHCP configurado. Na verdade, o host Linux provavelmente está atualmente agindo como um cliente DHCP , obtendo seu endereço IP automaticamente do roteador, pois é a configuração padrão moderna para a maioria dos dispositivos compatíveis com IPv4.

    Se você desconectar o host Linux do roteador e conectá-lo diretamente ao STM32MP1, o host detectará a perda de conexão com o roteador e reiniciará o processo de solicitação de endereço DHCP. Mas como o STM32MP1 também não possui um servidor DHCP, essa solicitação expirará sem resposta; esta é a causa provável da Connection failed: activation of network connection failedmensagem de erro que você mencionou.

    Resumindo, tanto o host Linux quanto o STM32MP1 esperam que outra coisa (como o roteador) lhes atribua endereços IP. Ao conectá-los diretamente entre si, nenhum deles obterá um endereço IP.

    O ifconfigcomando não é persistente no Linux: seu efeito será cancelado quando o sistema for reinicializado. É por isso que o guia do STM que você mencionou diz que o ifconfigmétodo é rápido e temporário . O segundo método (usando systemd) é descrito como durável porque essa configuração persistirá durante uma reinicialização.

    Para você, a maneira mais simples de resolver seu problema seria configurar o STM32MP1 para atuar como um servidor DHCP: ele teria um endereço IP estático próprio configurado manualmente e forneceria um endereço IP compatível para qualquer outro sistema conectado para ele automaticamente. O capítulo 3.5 do guia STM que você vinculou descreve exatamente essa configuração.

    Passo #1: Você teria que primeiro desabilitar a configuração automática de DHCP da end0interface de rede no STM32MP1:

    mv /lib/systemd/network/50-wired.network /lib/systemd/network/50-wired.network.dhcp
    cp /lib/systemd/network/50-wired.network.static /lib/systemd/network/50-wired.network
    

    Passo #2: Em seguida, adicione a configuração descrita no capítulo 3.5 para a end0interface para habilitar a função do servidor DHCP nela:

    nano /lib/systemd/network/52-end0-dhcp-server.network    #or use your preferred text editor
    

    Digite a configuração descrita no capítulo 3.5 e salve-a:

    [Match]
    Name=end0
    
    [Network]
    Address=192.168.72.1/24
    DHCPServer=yes
    IPForward=ipv4
    IPMasquerade=yes
    

    Etapa #3: Agora desconecte o STM32MP1 do roteador, reinicie o STM32MP1 e conecte o host Linux diretamente ao STM32MP1.

    O host Linux agora deve obter automaticamente um endereço IP no formato 192.168.72.* do STM32MP1, e o STM32MP1 deve estar acessível no endereço IP 192.168.72.1.

    O systemd-networkdirá ler qualquer arquivo com um sufixo *.networkou *.linkno /lib/systemd/network/diretório e irá ignorar quaisquer arquivos com quaisquer outros sufixos como *.staticou *.sampleou *.dhcp.

    Em uma distribuição normal do Linux, eu recomendaria escrever arquivos de configuração de substituição no /etc/systemd/network/diretório; mas como a própria documentação do STM exige a modificação da configuração em /lib/systemd/, presumo que esta possa ser uma instalação de sistema embarcado "básica" e os diretórios correspondentes em /etc/podem não existir.

    Para um iniciante, pode ser aconselhável seguir a documentação do STM por enquanto, até saber melhor; mas esteja ciente de que a configuração documentada pelo STM fará com que suas configurações sejam revertidas para os padrões de fábrica sempre que o sistema operacional do STM32MP1 ou seus systemdcomponentes forem atualizados.

    • 1
  2. Blend3rman
    2024-08-24T10:32:52+08:002024-08-24T10:32:52+08:00

    Sua pergunta já foi respondida aqui .

    Resumindo, você precisa de um servidor DNS e DHCP em sua rede para usar o protocolo TCP/IP. Você pode usar dnsmasqna maioria das distribuições Linux para permitir que seu PC host atue como um servidor DNS e DHCP. (Além disso, o Windows 10 tem o protocolo APIPA , mas requer que ambos os dispositivos executem sistemas operacionais Windows)

    Se não for viável executar um programa de servidor em seu PC host, sugiro considerar a comunicação serial como uma alternativa à Ethernet.

    • 0

relate perguntas

  • Encontrar threads/scripts associados a uma porta?

  • Pergunta sobre arquivos montados em rede

  • Um endereço IP pode terminar em 255 e não ser um endereço IP de transmissão?

  • Incapaz de identificar qual saída de endereço MAC do comando arp ou comando ip está correta

  • Roteador estranho funciona com centos 6 [fechado]

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Possível firmware ausente /lib/firmware/i915/* para o módulo i915

    • 3 respostas
  • Marko Smith

    Falha ao buscar o repositório de backports jessie

    • 4 respostas
  • Marko Smith

    Como exportar uma chave privada GPG e uma chave pública para um arquivo

    • 4 respostas
  • Marko Smith

    Como podemos executar um comando armazenado em uma variável?

    • 5 respostas
  • Marko Smith

    Como configurar o systemd-resolved e o systemd-networkd para usar o servidor DNS local para resolver domínios locais e o servidor DNS remoto para domínios remotos?

    • 3 respostas
  • Marko Smith

    apt-get update error no Kali Linux após a atualização do dist [duplicado]

    • 2 respostas
  • Marko Smith

    Como ver as últimas linhas x do log de serviço systemctl

    • 5 respostas
  • Marko Smith

    Nano - pule para o final do arquivo

    • 8 respostas
  • Marko Smith

    erro grub: você precisa carregar o kernel primeiro

    • 4 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Martin Hope
    user12345 Falha ao buscar o repositório de backports jessie 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl Por que a maioria dos exemplos do systemd contém WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky Como exportar uma chave privada GPG e uma chave pública para um arquivo 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll status systemctl mostra: "Estado: degradado" 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim Como podemos executar um comando armazenado em uma variável? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S Por que /dev/null é um arquivo? Por que sua função não é implementada como um programa simples? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 Como ver as últimas linhas x do log de serviço systemctl 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - pule para o final do arquivo 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla Por que verdadeiro e falso são tão grandes? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST

Hot tag

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve