🏆本文收录于《CSDN问答解惑-专业版》专栏,主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
问题描述
使用国产裕泰8521phy芯片,芯片工作在sgmac-to-rgphy 模式,对端接东土的交换芯片,交换芯片已经设置为强制前兆,sgmii 模式。使用的phy驱动为yt8521的专用驱动motircomm,我启动时需要设置一下寄存器的值以便phy工作在正常模式,相关启动脚本如下:
第一次启动后,可以正常link 到千兆模式,但我使用ifconfig eth1 down 后,发现不再自动link ,如下
但是速度与双工模式均正确,此时我再执行命令mdio eth1 0 0x1200 midi eth1 0 0x140 后又可再次link ,查阅芯片手册寄存器写1200是使能自协商,写140是工作在千兆全双工模式,现在想要实现使用ifconfig eth1 up时自动link,而不是手动执行,我在phy驱动的resume 函数和config_aneg函数中均做过修改,但似乎没有效果,应该如何修改?或者跟哪些函数有关?
解决方案
如下是上述问题的解决方案,仅供参考:
在处理嵌入式设备网口在 down 和 up 状态之间的自动链接问题时,有几个关键点和步骤需要注意。以下是一些可能帮助你解决问题的建议和步骤:
1. 检查 PHY 驱动程序配置
确保你的 PHY 驱动程序正确地处理了 PHY 的自动协商和链接恢复。通常,PHY 驱动程序的 resume
函数和 config_aneg
函数需要确保在网络接口被重新启用时,PHY 能够自动恢复到正常工作状态。
-
resume
函数:该函数应重新初始化 PHY 的配置,确保 PHY 在ifconfig eth1 up
时能够恢复到正确的状态。检查该函数是否调用了 PHY 配置函数,例如设置自协商、速度和双工模式。 -
config_aneg
函数:该函数负责配置 PHY 的自协商和其它相关参数。确保在该函数中对 PHY 进行正确的配置,特别是在接口重新启用时。
2. 检查网络接口驱动
确保网络接口的驱动(如 ethtool
的配置)在 ifconfig eth1 up
时能够正确地处理 PHY 的状态恢复。驱动可能需要在网络接口恢复时重新配置 PHY 参数。
3. 调整 PHY 初始化过程
PHY 初始化过程应确保在接口变为 up
时,PHY 能够执行必要的初始化步骤以恢复正常工作状态。你可以检查和调整 PHY 驱动的初始化流程。
4. 检查 PHY 寄存器设置
确保 PHY 寄存器的设置在接口被重新启用时是正确的。具体来说,检查以下寄存器设置:
-
自协商寄存器(如寄存器
0x00
):确保自协商被启用(写入0x1200
)。 -
速度和双工模式寄存器(如寄存器
0x01
):确保速度和双工模式被正确设置(写入0x140
)。
5. 调试和日志记录
增加调试信息和日志记录以帮助识别问题所在。可以在 resume
和 config_aneg
函数中添加日志输出,记录寄存器设置和状态变化情况。这有助于确定问题发生的确切位置。
6. 参考 PHY 和交换机文档
查阅 PHY 和交换机芯片的文档,确保理解所有寄存器的作用和设置要求。确认 PHY 和交换机的配置完全符合文档中的要求。
7. 补丁和更新
检查是否有可用的驱动程序补丁或更新,这些可能修复了你遇到的问题。检查 PHY 和交换机厂商的支持网站和社区。
示例修改(假设在 resume
函数中)
假设你在 resume
函数中添加了必要的寄存器设置代码,如下所示:
static int yt8521_resume(struct net_device *dev) {
struct phy_device *phydev = dev->phydev;
// Enable auto-negotiation
phy_write(phydev, MII_BMCR, BMCR_ANENABLE);
// Set speed and duplex mode
phy_write(phydev, MII_ADVERTISE, ADVERTISE_1000FULL);
// Perform a software reset
phy_write(phydev, MII_BMCR, BMCR_RESET);
return 0;
}
总结
确保 PHY 驱动程序和网络接口驱动在 ifconfig eth1 up
时能够正确地恢复 PHY 状态,可能需要检查和调整 PHY 寄存器的配置。增加调试信息和日志记录以帮助诊断问题,并确保你的 PHY 驱动程序和网络接口驱动都符合硬件的要求和规范。
希望如上措施及解决方案能够帮到有需要的你。
PS:如若遇到采纳如下方案还是未解决的同学,希望不要抱怨&&急躁,毕竟影响因素众多,我写出来也是希望能够尽最大努力帮助到同类似问题的小伙伴,即把你未解决或者产生新Bug黏贴在评论区,我们大家一起来努力,一起帮你看看,可以不咯。
若有对当前Bug有与如下提供的方法不一致,有个不情之请,希望你能把你的新思路或新方法分享到评论区,一起学习,目的就是帮助更多所需要的同学,正所谓「赠人玫瑰,手留余香」。
☀️写在最后
如上问题有的来自我自身项目开发,有的收集网站,有的来自读者…如有侵权,立马删除。再者,针对此专栏中部分问题及其问题的解答思路或步骤等,存在少部分搜集于全网社区及人工智能问答等渠道,若最后实在是没能帮助到你,还望见谅!并非所有的解答都能解决每个人的问题,在此希望屏幕前的你能够给予宝贵的理解,而不是立刻指责或者抱怨!如果你有更优解,那建议你出教程写方案,一同学习!共同进步。
ok,以上就是我这期的Bug修复内容啦,如果还想查找更多解决方案,你可以看看我专门收集Bug及提供解决方案的专栏《CSDN问答解惑-专业版》,都是实战中碰到的Bug,希望对你有所帮助。到此,咱们下期拜拜。
码字不易,如果这篇文章对你有所帮助,帮忙给 bug菌 来个一键三连(关注、点赞、收藏) ,您的支持就是我坚持写作分享知识点传播技术的最大动力。
同时也推荐大家关注我的硬核公众号:「猿圈奇妙屋」 ;以第一手学习bug菌的首发干货,不仅能学习更多技术硬货,还可白嫖最新BAT大厂面试真题、4000G Pdf技术书籍、万份简历/PPT模板、技术文章Markdown文档等海量资料,你想要的我都有!
📣关于我
我是bug菌,CSDN | 掘金 | InfoQ | 51CTO | 华为云 | 阿里云 | 腾讯云 等社区博客专家,C站博客之星Top30,华为云2023年度十佳博主,掘金多年度人气作者Top40,掘金等各大社区平台签约作者,51CTO年度博主Top12,掘金/InfoQ/51CTO等社区优质创作者;全网粉丝合计 30w+;硬核微信公众号「猿圈奇妙屋」,欢迎你的加入!免费白嫖最新BAT互联网公司面试真题、4000G PDF电子书籍、简历模板等海量资料,你想要的我都有,关键是你不来拿哇。