Linux网络驱动之Fixed-Link(8)
接前一篇文章Linux网络驱动之Fixed-Link7本文内容参考linux phy fixed-link-CSDN博客fixed-link 网口驱动设备树-CSDN博客GMAC网卡Fixed-Link模式 - StepForwards - 博客园RTL8367RB的国产P2P替代方案用JL6107-PC的可行性及实现方法-CSDN博客linux phy处理流程一:探测phy设备_phy link过程-CSDN博客设备树 fixed-link 使用说明-CSDN博客Linux 网络驱动-MAC、PHY层驱动框架(三)_ethernet-phy-ieee802.3-c22-CSDN博客特此致谢三、深入了解4. Linux内核中Fixed-Link的相关内容2PHY驱动driver匹配上一回继续讲解of_phy_get_and_connect函数讲到了of_phy_connect函数本回开始解析该函数。为了便于理解和回顾再次贴出of_phy_get_and_connect函数代码在drivers/net/mdio/of_mdio.c中如下/** * of_phy_get_and_connect * - Get phy node and connect to the phy described in the device tree * dev: pointer to net_device claiming the phy * np: Pointer to device tree node for the net_device claiming the phy * hndlr: Link state callback for the network device * * If successful, returns a pointer to the phy_device with the embedded * struct device refcount incremented by one, or NULL on failure. The * refcount must be dropped by calling phy_disconnect() or phy_detach(). */ struct phy_device *of_phy_get_and_connect(struct net_device *dev, struct device_node *np, void (*hndlr)(struct net_device *)) { phy_interface_t iface; struct device_node *phy_np; struct phy_device *phy; int ret; ret of_get_phy_mode(np, iface); if (ret) return NULL; if (of_phy_is_fixed_link(np)) { ret of_phy_register_fixed_link(np); if (ret 0) { netdev_err(dev, broken fixed-link specification\n); return NULL; } phy_np of_node_get(np); } else { phy_np of_parse_phandle(np, phy-handle, 0); if (!phy_np) return NULL; } phy of_phy_connect(dev, phy_np, hndlr, 0, iface); of_node_put(phy_np); return phy; } EXPORT_SYMBOL(of_phy_get_and_connect);前文书讲过通过of_phy_register_fixed_link函数最终是通过fixed_phy_register函数完成了PHY设备struct phy_device设备的注册。接下来就要调用of_phy_connect函数来匹配PHY驱动struct phy_driver。当前正是讲到这个of_phy_connect函数。of_phy_connect函数。其也在drivers/net/mdio/of_mdio.c中代码如下/** * of_phy_connect - Connect to the phy described in the device tree * dev: pointer to net_device claiming the phy * phy_np: Pointer to device tree node for the PHY * hndlr: Link state callback for the network device * flags: flags to pass to the PHY * iface: PHY data interface type * * If successful, returns a pointer to the phy_device with the embedded * struct device refcount incremented by one, or NULL on failure. The * refcount must be dropped by calling phy_disconnect() or phy_detach(). */ struct phy_device *of_phy_connect(struct net_device *dev, struct device_node *phy_np, void (*hndlr)(struct net_device *), u32 flags, phy_interface_t iface) { struct phy_device *phy of_phy_find_device(phy_np); int ret; if (!phy) return NULL; phy-dev_flags | flags; ret phy_connect_direct(dev, phy, hndlr, iface); /* refcount is held by phy_connect_direct() on success */ put_device(phy-mdio.dev); return ret ? NULL : phy; } EXPORT_SYMBOL(of_phy_connect);先来看一下of_phy_connect函数的注释。of_phy_connect函数的作用是获取phy节点并连接到设备树中描述的phy。参数说明dev指向声称拥有phy的net_device的指针phy_np指向PHY设备树节点的指针hndlr网络设备的链路状态回调flags传递给PHY的标志ifacePHY数据接口类型返回值如果成功返回一个指向phy_device的指针其中嵌入的结构设备refcount递增1否则返回NULL。必须通过调用phy_disconnect()或phy_detach()来删除引用计数。下一回开始解析函数具体内容。

相关新闻

3分钟颠覆10年资源管理习惯:教育资源获取效率革命

3分钟颠覆10年资源管理习惯:教育资源获取效率革命

3分钟颠覆10年资源管理习惯:教育资源获取效率革命 【免费下载链接】tchMaterial-parser 国家中小学智慧教育平台 电子课本下载工具 项目地址: https://gitcode.com/GitHub_Trending/tc/tchMaterial-parser 问题诊断:教育资源管理的隐性成本黑洞 …

2026/7/4 12:57:22 阅读更多 →
Vibe Coding:我已经一周没手写代码了

Vibe Coding:我已经一周没手写代码了

“写代码的尽头,是不写代码。”一组颠覆认知的数据 “Vibe Coding”——这个词刚刚被评为 2025 年度词汇。 它的意思是:程序员不再逐行手写代码,而是用自然语言描述需求,让AI生成代码。 掘金开发者调查数据:指标数据使…

2026/7/4 0:29:20 阅读更多 →
抖音视频智能采集系统:从需求洞察到架构实现的全维度技术解析

抖音视频智能采集系统:从需求洞察到架构实现的全维度技术解析

抖音视频智能采集系统:从需求洞察到架构实现的全维度技术解析 【免费下载链接】douyin-downloader 项目地址: https://gitcode.com/GitHub_Trending/do/douyin-downloader 一、需求洞察:数字内容采集的现实挑战与技术缺口 1.1 行业痛点三维分析…

2026/5/17 3:19:25 阅读更多 →

最新新闻

Selenium自动化下载国家知识产权局年报Excel数据实战指南

Selenium自动化下载国家知识产权局年报Excel数据实战指南

1. 项目概述:为什么我们需要自动化下载年报数据? 如果你正在从事专利分析、行业研究或者政策咨询,那么国家知识产权局发布的年度报告绝对是你的核心数据金矿。这些报告里附录的Excel表格,包含了从1985年至今,按年度、地…

2026/7/4 12:57:12 阅读更多 →
GPT-4o真实业务场景能力测评:10大高频工作流实测指南

GPT-4o真实业务场景能力测评:10大高频工作流实测指南

1. 项目概述:这不是一次“跑分”,而是一场真实场景压力测试最近在整理一批面向一线产品、运营和内容团队的AI工具实操资料时,发现一个普遍现象:很多人还在用“能不能回答数学题”“会不会写诗”这类抽象标准去判断大模型能力。结果…

2026/7/4 12:57:12 阅读更多 →
VLA模型在自动驾驶中的两条技术路径:OpenDriveVLA与AutoVLA深度对比

VLA模型在自动驾驶中的两条技术路径:OpenDriveVLA与AutoVLA深度对比

1. 项目概述:当视觉-语言模型真正“看懂”道路并“听懂”指令最近刷到“OpenDriveVLA”和“AutoVLA”这两个名字,不少同行在技术群和论文讨论区里反复提到,但很多人其实没搞清楚——这俩到底不是同一个模型的两个马甲,而是两条截然…

2026/7/4 12:57:12 阅读更多 →
特征工程实战:大数据预处理与模型优化技巧

特征工程实战:大数据预处理与模型优化技巧

1. 特征工程在大数据预处理中的核心价值 数据科学家们常说"数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限"。这句话道出了特征工程在数据预处理环节的关键地位。在实际项目中,我们常常遇到这样的情况:同样的算法&a…

2026/7/4 12:55:11 阅读更多 →
基于ARM Cortex-M4的LED矩阵显示系统设计与优化

基于ARM Cortex-M4的LED矩阵显示系统设计与优化

1. 项目概述:基于MK51DN512CLQ10的LED矩阵信息显示系统 在嵌入式显示领域,16x12像素的LED矩阵提供了一种经济高效的视觉信息传递方案。本项目采用NXP的MK51DN512CLQ10微控制器(基于ARM Cortex-M4内核)驱动IS31FL3733芯片控制的192…

2026/7/4 12:53:11 阅读更多 →
Claude Code Skill功能详解:从重复指令到可复用AI开发技能

Claude Code Skill功能详解:从重复指令到可复用AI开发技能

🚀 30款热门AI模型一站整合,DeepSeek/GLM/Claude 随心用,限时 5 折。 👉 点击领海量免费额度 在实际的 AI 辅助开发工作流中,我们经常需要向 Claude 重复解释项目特定的编码规范、部署流程或复杂的多步骤任务。每次…

2026/7/4 12:51:10 阅读更多 →

日新闻

Memcached 1.6.43 发布:关键安全修复版本,多项问题得到解决

Memcached 1.6.43 发布:关键安全修复版本,多项问题得到解决

Memcached 1.6.43 正式发布,这是一个关键的安全修复版本,修复了多个方面的问题,还对部分功能进行了优化。 安全修复亮点 此次发布在安全修复上表现突出。binprot 避免了项目引用计数溢出,mcmc 因安全问题提升了上游版本号&#xf…

2026/7/4 0:04:29 阅读更多 →
终极指南:使用HMCL启动器跨平台畅玩Minecraft的完整解决方案

终极指南:使用HMCL启动器跨平台畅玩Minecraft的完整解决方案

终极指南:使用HMCL启动器跨平台畅玩Minecraft的完整解决方案 【免费下载链接】HMCL A Minecraft Launcher which is multi-functional, cross-platform and popular 项目地址: https://gitcode.com/gh_mirrors/hm/HMCL HMCL(Hello Minecraft! Lau…

2026/7/4 0:06:29 阅读更多 →
KMX63与PIC18F66K40在嵌入式HMI中的硬件协同与低功耗设计

KMX63与PIC18F66K40在嵌入式HMI中的硬件协同与低功耗设计

1. KMX63与PIC18F66K40的硬件协同架构解析KMX63作为一款三轴加速度计和磁力计组合传感器,与PIC18F66K40微控制器的搭配堪称嵌入式HMI开发的黄金组合。这套硬件组合的核心优势在于KMX63提供的高精度运动感知能力与PIC18F66K40强大的信号处理能力形成了完美互补。KMX6…

2026/7/4 0:06:29 阅读更多 →

周新闻

月新闻