嵌入式系统建立NFS服务器时的eth0 link up link down 错误

本文介绍了在使用Fedora9作为NFS服务器时遇到的问题及解决方法。目标机启动后无法成功连接到NFS服务器,通过调整网络连接方式,直接使用网线连接主机与目标机解决了该问题。

环境:

主机:VMware + Fedora 9 (IP:192.168.100.23)

目标机:友善之臂MINI2440 (IP:192.168.100.24)

 

问题:

在Fedora9中建立了NFS服务器,通过路由器和目标机相连。

目标机启动vivi后,设置启动命令:

param set linux_cmd_line "console=ttySAC0 root=/dev/nfs nfsroot=192.168.100.23:/opt/FriendlyARM/mini2440/rootfs_qtopia_qt4 ip=192.168.100.24:192.168.100.23:255.255.255.0:sbc2440.arm9.net:eth0:off"

 

输入boot命令启动内核,NFS连接失败。终端不停输出:

eth0:link up, 100Mbps, full-duplex, lpa 0x45

 

解决方法:

不要用路由器等连接主机和目标机,直接用网线连接。

所给引用中未提及Zynq7000在lwip裸机环境下ETH_LINK_UPETH_LINK_DOWN循环问题的解决方案。不过可以从网线连接状态监测、PHY链接状态检测等方面推测解决思路。 对于网线连接状态监测,可使用`ETH_PLUG = netif_is_link_up(&server_netif);`函数来监测网线是否插拔,返回1表示连上,0表示没连上。确保此监测机制正常工作,若出现循环问题,可检查该函数调用是否正确,是否存在误判情况,可添加调试信息,打印该函数的返回值,观察其变化是否符合实际网线插拔情况[^1]。 在PHY链接状态检测方面,`eth_link_detect`函数用于检测以太网链接状态。当出现ETH_LINK_UPETH_LINK_DOWN循环时,可检查该函数中状态判断和处理逻辑是否正确。比如在`ETH_LINK_NEGOTIATING`状态下,若`phy_link_status && phy_autoneg_status(xemacp, phyaddrforemac)`条件判断有误,可能导致状态频繁切换。可添加调试信息,打印`phy_link_status`和`phy_autoneg_status`函数的返回值,确认条件判断是否符合预期。同时,检查`phy_setup_emacps`或`phy_setup_axiemac`函数是否能正确获取链接速度,若获取速度失败,可能会影响链接状态的正常切换[^2]。 ```c // 示例:添加调试信息到eth_link_detect函数 void eth_link_detect(struct netif *netif) { u32_t link_speed, phy_link_status; struct xemac_s *xemac = (struct xemac_s *)(netif->state); /***********此处省略无关代码*************/ switch (eth_link_status) { case ETH_LINK_UNDEFINED: case ETH_LINK_UP: return; case ETH_LINK_DOWN: netif_set_link_down(netif); eth_link_status = ETH_LINK_NEGOTIATING; xil_printf("Ethernet Link down\r\n"); break; case ETH_LINK_NEGOTIATING: xil_printf("phy_link_status: %d, phy_autoneg_status: %d\r\n", phy_link_status, phy_autoneg_status(xemacp, phyaddrforemac)); if (phy_link_status && phy_autoneg_status(xemacp, phyaddrforemac)) { /* Initiate Phy setup to get link speed */ #if defined(XLWIP_CONFIG_INCLUDE_GEM) link_speed = phy_setup_emacps(xemacp, phyaddrforemac); XEmacPs_SetOperatingSpeed(xemacp, link_speed); xil_printf("link_speed: %d\r\n", link_speed); #elif defined(XLWIP_CONFIG_INCLUDE_AXI_ETHERNET) link_speed = phy_setup_axiemac(xemacp); XAxiEthernet_SetOperatingSpeed(xemacp, link_speed); xil_printf("link_speed: %d\r\n", link_speed); #endif netif_set_link_up(netif); eth_link_status = ETH_LINK_UP; xil_printf("Ethernet Link up\r\n"); } break; } } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值