在Xilinx的Linux启动过程中禁用PHY自动协商


9

我正在尝试在FPGA板上安装Linux。linux版本是Xilinx FPGA芯片的petalinux

当前的Xilinx SoC具有Cortex A9处理器和可编程硬件逻辑,即FPGA。我在终端上捕获了启动消息:

.....................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

我对这些行特别感兴趣:

[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

问题1:我猜这些行是针对TCP / IP的?

可以看出,这里浪费了大约12秒钟。问题是我需要一个快速启动系统,而最终应用程序中根本不需要TCP / IP。

到目前为止,我安装的Linux使用的是Xilinx提供的预构建映像。现在要摆脱TCP / IP部分(因为我不需要它,并且如果我在操作系统中没有它,则可以节省这12秒的时间-这是我的理解),我正计划构建我的自己的Linux内核。

因此,假设需要从主机系统交叉编译,我下载了PetaLinux的源代码。

问题2:但是我想知道如何从操作系统源中排除TCP / IP部分,以便在操作系统启动时永远不会执行那些耗时的TCP / IP例程?

问题3:我也不确定在预制映像中是否可以选择禁用TCP / IP部分?

我的目标是在引导过程中摆脱这些限制:

[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

步骤1:找出正在使用的初始化系统。步骤2:戳一下其配置文件。
2014年

你有内核源码吗?您现在如何启动它?是否有涉及的设备树?
Stark07年

该消息来自U-Boot,那时Linux尚未启动。
吉尔斯(Gilles)“所以

Answers:


2

问题2:我相信这些照片来自uboot。如果是这样,我相信您已经定义了“ CONFIG_PHY_RESET”-您可以为此检查uboot配置吗?要禁用此功能,您可能必须检查配置,通常类似于:./include/configs/YourBoardConfigFile.h,这是uboot会使用的配置。

另一个要求使用Kconfig的答案之一-我检查了uboot的menuconfig,但该选项不存在。

如果您查看uboot源文件: ./drivers/net/4xx_enet.c,搜索“ CONFIG_PHY_RESET”,似乎正在执行代码:

#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) {

此后不久,您会看到打印了“等待PHY自动协商完成”文本,因此这应该是您问题所在的位置(或接近它的位置-根据体系结构,还有一些其他文件具有相似的初始化)。

出于某种原因,顶级uboot源文件中的README文件会调用CONFIG_PHY_RESET_DELAY,但不会调用CONFIG_PHY_RESET,因此您可能在这里错过了它。

问题3:如果CONFIG_PHY_RESET是问题,则需要在编译时进行设置。您应该能够为您的开发板下载 Xilinx的uBoot源代码。

我不确定为什么需要重置,所以我并没有真正回答您的问题1,但是似乎某些PHY在初始化时重置有不同的要求,甚至有些需要一定的延迟。


0

该系统显然希望对IP地址10.10.70.101进行ping操作,这可能是因为它正在检查自己的IP地址或网关。这部分意味着系统配置有带有该IP地址或类似地址的网络接口。

之所以会出现这种暂停,是因为在配置IP的过程中,它会加载以太网网络驱动程序,该驱动程序会进行PHY自动协商,实际上它会尝试查看连接的内容。由于没有任何连接,因此超时。

您可能应该寻找该Linux发行版保留网络接口设置的位置。粗略的Google搜索表明,此U-Boot具有ipaddr每个http://www.denx.de/wiki/view/DULG/UBootEnvVariables的变量


-1

使用Kconfig或其图形类似物在内核编译时禁用联网。例子:看这个


2
请不要仅仅发布链接,直接在此站点上包含尽可能多的相关内容。如果您链接的站点消失了,那么您的答案将变得毫无价值。
slm
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.