Desativando a negociação automática PHY durante o processo de inicialização do Linux no Xilinx


9

Estou tentando instalar o Linux em uma placa FPGA. O sabor do linux é petalinux para chips Xilinx FPGA.

O atual Xilinx SoC possui um processador Cortex A9 e uma lógica de hardware programável, ou seja, FPGA. Capturei a mensagem de inicialização no terminal:

.....................U-boot time.......................partition.......................................................

[Fri Dec 27 15:18:53.108 2013] Copying Linux from SD to RAM...
[Fri Dec 27 15:18:53.129 2013] Device: SDHCI
[Fri Dec 27 15:18:53.129 2013] Manufacturer ID: 2
[Fri Dec 27 15:18:53.129 2013] OEM: 544d
[Fri Dec 27 15:18:53.129 2013] Name: SA04G 
[Fri Dec 27 15:18:53.129 2013] Tran Speed: 25000000
[Fri Dec 27 15:18:53.129 2013] Rd Block Len: 512
[Fri Dec 27 15:18:53.129 2013] SD version 1.10
[Fri Dec 27 15:18:53.129 2013] High Capacity: Yes
[Fri Dec 27 15:18:53.129 2013] Capacity: 3951034368
[Fri Dec 27 15:18:53.129 2013] Bus Width: 1-bit
[Fri Dec 27 15:18:53.129 2013] reading zImage
[Fri Dec 27 15:18:59.367 2013] 
[Fri Dec 27 15:18:59.367 2013] 2304852 bytes read
[Fri Dec 27 15:18:59.381 2013] reading devicetree.dtb
[Fri Dec 27 15:18:59.475 2013] 
[Fri Dec 27 15:18:59.475 2013] 2709 bytes read
[Fri Dec 27 15:18:59.491 2013] reading ramdisk8M.image.gz
[Fri Dec 27 15:19:06.121 2013] 
[Fri Dec 27 15:19:06.121 2013] 2501584 bytes read
[Fri Dec 27 15:19:06.144 2013] Trying to set up GEM link...
[Fri Dec 27 15:19:06.144 2013] Resetting PHY...
[Fri Dec 27 15:19:06.144 2013] 
[Fri Dec 27 15:19:06.144 2013] PHY reset complete.
[Fri Dec 27 15:19:06.144 2013] Waiting for PHY to complete auto-negotiation...
[Fri Dec 27 15:19:18.176 2013] ***Error: Auto-negotiation stalled...
[Fri Dec 27 15:19:18.176 2013] ping failed; host 10.10.70.101 is not alive

Estou especificamente interessado nessas linhas:

[Fri Dec 27 15:19:06.144 2013] PHY reset complete.
[Fri Dec 27 15:19:06.144 2013] Waiting for PHY to complete auto-negotiation...
[Fri Dec 27 15:19:18.176 2013] ***Error: Auto-negotiation stalled...
[Fri Dec 27 15:19:18.176 2013] ping failed; host 10.10.70.101 is not alive

Pergunta 1: Acho que essas linhas são para TCP / IP?

Como pode ser visto, cerca de 12 segundos são desperdiçados aqui. O problema é que preciso de um sistema de inicialização rápida e não precisaria de TCP / IP no aplicativo final.

O Linux que eu instalei até agora estava usando uma imagem pré-criada fornecida pelo Xilinx. Agora, para me livrar da parte TCP / IP (já que não preciso dela, e se não a tiver no SO, esses 12 segundos podem ser salvos - este é o meu entendimento), estou planejando construir o meu próprio kernel Linux.

Então eu baixei o código fonte do PetaLinux, supondo que eu precise compilá-lo do meu sistema host.

Pergunta 2: Mas quero saber como posso excluir a parte TCP / IP da fonte do SO, para que, quando o SO inicializar, ele nunca execute as rotinas TCP / IP demoradas?

Pergunta nº 3: Também não tenho certeza se na imagem pré-criada podemos ter alguma opção para desativar a parte TCP / IP?

Meu objetivo é livrar-se dessas linhas durante o processo de inicialização:

[Fri Dec 27 15:19:06.144 2013] PHY reset complete.
[Fri Dec 27 15:19:06.144 2013] Waiting for PHY to complete auto-negotiation...
[Fri Dec 27 15:19:18.176 2013] ***Error: Auto-negotiation stalled...
[Fri Dec 27 15:19:18.176 2013] ping failed; host 10.10.70.101 is not alive

Etapa 1: descubra qual sistema init está sendo usado. Etapa 2: bisbilhotar seus arquivos de configuração.
strugee

Você tem a fonte do kernel? Como você está inicializando a partir de agora? Existe uma árvore de dispositivos envolvida?
precisa saber é o seguinte

Essa mensagem é do U-Boot, o Linux ainda não inicializou nesse momento.
Gilles 'SO- stop be evil'

Respostas:


2

Pergunta 2: Eu acredito que essas impressões são do uboot. Nesse caso, acredito que você tenha definido "CONFIG_PHY_RESET" - por favor, verifique sua configuração do uboot? Para desativar esse recurso, você provavelmente terá que verificar sua configuração, geralmente algo semelhante a: ./include/configs/YourBoardConfigFile.h, é o que o uboot usaria.

Uma das outras respostas chamou o uso do Kconfig - verifiquei o menuconfig do meu uboot e essa opção não estava presente.

Se você der uma olhada no arquivo de origem do uboot: ./drivers/net/4xx_enet.c , procure "CONFIG_PHY_RESET", parece que o código está sendo executado:

#if defined(CONFIG_PHY_RESET)
/*
 * Reset the phy, only if its the first time through
 * otherwise, just check the speeds & feeds
 */
if (hw_p->first_init == 0) {

Logo depois, você pode ver o texto "Aguardando a conclusão da negociação automática do PHY", para que este esteja exatamente onde está o seu problema (ou próximo a ele - havia alguns outros arquivos com inicialização semelhante, dependendo da arquitetura).

Por alguma razão, o arquivo README na fonte uboot de nível superior chama CONFIG_PHY_RESET_DELAY, mas não CONFIG_PHY_RESET, portanto, você pode ter esquecido.

Pergunta 3: Se o CONFIG_PHY_RESET for o problema, isso precisará ser definido no tempo de compilação. Você poderá fazer o download da fonte uBoot do Xilinx para a sua placa.

Não sei por que a redefinição é necessária, então eu realmente não respondi à pergunta 1, mas parece que alguns PHY têm requisitos diferentes para serem redefinidos na inicialização e até alguns precisam de uma certa demora.


0

Aparentemente, esse sistema deseja executar ping no endereço IP 10.10.70.101, provavelmente porque está verificando seu próprio endereço IP ou gateway. Esta parte significa que o sistema está configurado com uma interface de rede com esse endereço IP ou um endereço semelhante.

A pausa ocorre porque, no processo de configuração do IP, ele carrega o driver de rede Ethernet, que realiza a negociação automática PHY, basicamente tenta ver o que está conectado a ele. Como nada está conectado, ele expira.

Você provavelmente deve procurar onde quer que esta distribuição Linux mantenha as configurações da interface de rede. Uma busca no Google superficial indica que este U-Boot tem a variável ipaddrpor http://www.denx.de/wiki/view/DULG/UBootEnvVariables


-1

Use Kconfigou seus análogos gráficos para desativar a Rede durante a compilação do kernel. Exemplos: veja isso .


2
Não basta postar links, incluir tanto conteúdo relevante diretamente neste site. Se o site ao qual você está vinculando desaparecer, sua resposta se tornará inútil.
Slm
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.