u-boot não detecta minha interface Ethernet sobre USB (nenhuma solicitação tftp)

0

Estou tentando instalar e executar uma estação flash em um Raspberry Pi usando o Raspbian Jessie (última versão estável, Kernel Version 4.4).

No entanto, eu quero fazer uso das quatro portas USB e, para fazer isso, usarei Ethernet via USB (já que o u-boot usa Ethernet para verificar o servidor tftp).

Pré-requisitos e configuração

Aqui estão as coisas que eu instalei no Raspberry Pi:

  • isc-dhcp-server
  • xinetd

Eu configurei vários arquivos:

/etc/dhcp/dhcpd.conf

log-facility local7;
ddns-update-style none;
default-lease-time 600;
max-lease-time 7200;

subnet 192.168.2.0 netmask 255.255.255.0
{
  range dynamic-bootp 192.168.2.2 192.168.2.100;
  if substring (option vendor-class-identifier, 0, 10) = "AM335x ROM"
  {
    filename "u-boot-spl-restore.bin";
  }
  elsif substring (option vendor-class-identifier, 0, 17) = "AM335x U-Boot SPL"
  {
    filename "u-boot-restore.img";
  }
  else
  {
    filename "zImage";
  }

  range 192.168.2.101 192.168.2.199;
}

As quatro primeiras linhas estão lá por padrão.

/etc/xinetd.d/tftp

service tftp
{
  socket_type = dgram
  protocol = udp
  wait = yes
  user = root
  server = /usr/sbin/in.tftpd
  server_args = -s /tftpboot
  disable = no
}

Este arquivo não existia, então eu tive que criá-lo. Está incluído como outros serviços por /etc/xinetd.conf .

/tftpboot/

Criei esta pasta, executei estes comandos nela:

  • sudo cp /path/to/boot/files/* /tftpboot/
  • sudo chmod -R 777 /tftpboot/
  • sudo chown -R nobody:nogroup /tftpboot

/etc/default/isc-dhcp-server

Adicionou usb0 à lista de interfaces:

INTERFACES="usb0"

/etc/network/interfaces

Criado uma interface para usb0 :

allow-hotplug usb0
iface usb0 inet static
    address 192.168.2.1
    network 192.168.2.0
    netmask 255.255.255.0
    broadcast 192.168.2.255
    up /etc/network/if-up.d/usb-interfaces

/etc/network/if-up.d/usb-interfaces

Criado o script a seguir, referenciado por /etc/network/interfaces :

#!/bin/sh

if [ "$IFACE" = usb0 ]; then
    sudo service isc-dhcp-server restart
fi

Reinicie todos os serviços!

sudo /etc/init.d/tftp-hpa restart
sudo /etc/init.d/xinetd restart

Testes e resultados

Vamos chamar o Raspberry Pi de host e o Linux eu quero mostrar o target .

Então, para isso, eu tinha todos os logs no host e tinha um console serial no destino (o que significa que eu posso acessar os logs de inicialização do kernel).

O que acontece basicamente:

  • Do PoV do alvo: nada em particular é exibido no log serial. Apenas bloqueia um pouco e inicializa normalmente.
  • Do PoV do host: aqui está o log completo. Ele pára depois que a interface usb0 desaparece, quando o O sistema Linux inicia a inicialização. Como você pode ver, há um BOOTREQUEST seguido imediatamente por um BOOTREPLY . Nesse ponto, o destino sabe o nome do arquivo que deve obter do tftp server (especificado no arquivo /etc/dhcp/dhcpd.conf ), portanto, uma solicitação tftp deve seguir ... Mas nada acontece.

Eu testei o servidor tftp em execução no Raspberry Pi do destino e do meu computador e, em ambos os casos, posso obter os arquivos corretamente. Eu também tentei com arquivos diferentes, e pude confirmar que os arquivos usados (dentro da minha pasta /tftpboot/ ) estão corretos e funcionais.

O que eu pensei e testei:

  • A energia fornecida pelas portas USB do Raspberry Pi não é suficiente. Testado através de um hub USB 2.0 alimentado de forma independente, os resultados foram exatamente os mesmos.

Qualquer ajuda seria muito apreciada.

    
por Nepho 13.02.2017 / 10:27

1 resposta

1

Acontece que o problema era que havia vários servidores TFTP em execução no meu sistema e eu não estava configurando o correto.

Para qualquer pessoa com esse problema, sugiro executar um comando semelhante a ps ax | grep tftp . Muitas vezes, ele também informa qual diretório é usado como a raiz do servidor TFTP.

    
por 03.04.2017 / 10:26