当前位置: 首页 > news >正文

demo说明

代码说明

MDIO总线的注册和初始化:分配并注册MDIO总线,用于与PHY设备通信。

网络设备的创建:分配网络设备(如以太网接口)。

PHY设备连接:通过phy_connect函数连接PHY设备,指定回调函数my_adjust_link处理链路状态变化。

PHY设备配置与启动:设置PHY的支持模式和配置,然后使用phy_start启动PHY设备。

使用说明

编译并插入该模块:

sh

复制代码

make

sudo insmod my_phy_driver.ko

在dmesg或系统日志中查看输出,以确认PHY设备是否成功初始化和连接。

 

新增的部分说明

PHY驱动结构体 (phy_driver):定义了PHY设备的基本信息和回调函数,例如config_init、config_aneg、read_status等。这些函数用于初始化配置、管理状态、挂起和恢复PHY设备。

phy_id:用于匹配设备的PHY ID。

config_aneg:配置自动协商。

read_status:读取设备状态,这里使用了通用的genphy_read_status。

PHY驱动注册 (phy_driver_register):在初始化时注册PHY驱动,并在卸载时取消注册。

状态机检查:read_status回调将读取PHY的状态,并在链路状态变化时更新状态机。

 

增加的内容说明

扫描PHY设备:在my_scan_and_register_phy函数中,通过mdiobus_get_phy()函数扫描MDIO总线的每个地址(通常为0到31),检查是否存在可用的PHY设备,并尝试连接。

注册找到的PHY设备:如果找到了PHY设备,通过try_module_get()来确保该设备的驱动模块被引用,然后使用phy_connect()连接到网络设备,并配置PHY的支持模式。

错误处理:在扫描和注册过程中,加入了错误处理逻辑,确保在没有找到PHY设备或连接失败时,能够清理资源并退出。

 

代码自定义部分说明

my_config_init:在config_init回调中可以添加PHY的特定初始化配置,比如写入特定寄存器以启用特定功能。在本例中,写入寄存器0x1F来执行初始化配置。

my_config_aneg:配置自动协商功能,通常使用通用的genphy_config_aneg即可,同时可以在该函数中扩展或自定义自动协商的细节。

my_read_status:自定义状态读取函数。此函数读取PHY的链路状态,并打印当前链路的速度和双工模式。这一部分通常是通过调用genphy_read_status来获取当前状态。

my_suspend 和 my_resume:挂起和恢复函数。在挂起时写入BMCR_PDOWN以进入低功耗模式,在恢复时退出低功耗模式,确保PHY恢复到工作状态。

 

 

在Linux系统中增加一个PHY驱动并实现其编译、加载和使用的步骤如下:

步骤 1:编写PHY驱动代码

  1. 创建驱动代码:首先编写一个支持标准10M、100M、1000M速率的PHY驱动。可以参考前面提供的示例代码,将代码保存为my_phy_driver.c
  2. 确保代码结构:该驱动应包含PHY的基本初始化、自动协商、状态读取、挂起和恢复功能。

步骤 2:配置驱动的Makefile

  1. 创建一个Makefile,用于编译驱动模块。Makefile示例:
     

    makefile

    复制代码

    obj-m += my_phy_driver.o all: make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules clean: make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean

  2. Makefile中的obj-m定义驱动模块文件my_phy_driver.o$(PWD)表示当前工作目录。该配置将编译驱动到当前的Linux内核版本中。

步骤 3:编译驱动

在终端中进入保存驱动和Makefile的目录,执行以下命令进行编译:

 

bash

复制代码

make

成功编译后,会生成.ko文件,例如my_phy_driver.ko,表示该驱动的可加载内核模块文件。

步骤 4:加载驱动模块

  1. 加载模块:使用insmod命令加载模块:
     

    bash

    复制代码

    sudo insmod my_phy_driver.ko

  2. 检查加载状态:通过以下命令确认模块是否正确加载:
     

    bash

    复制代码

    lsmod | grep my_phy_driver

  3. 查看日志:可以使用dmesg命令查看内核日志输出,确保驱动正常加载并初始化:
     

    bash

    复制代码

    dmesg | tail

步骤 5:测试PHY驱动

  1. 连接设备:将支持的以太网设备连接到系统网络接口,以便PHY驱动可以检测到链路并自动协商速率。
  2. 检查PHY状态:驱动中的状态函数会在检测到链路后打印信息(如10M、100M、1000M的速率以及双工模式)。
  3. 使用 ethtool 测试:可以通过ethtool命令查询接口状态,验证PHY是否正常工作:
     

    bash

    复制代码

    sudo ethtool <network-interface-name>

步骤 6:卸载驱动

完成测试后,可以通过以下命令卸载驱动:

 

bash

复制代码

sudo rmmod my_phy_driver

总结

  • 编写PHY驱动并配置Makefile
  • 编译驱动以生成.ko模块文件。
  • 使用insmod加载驱动,检查加载状态。
  • 使用ethtooldmesg等工具测试驱动功能。

 

相关文章:

demo说明

代码说明 MDIO总线的注册和初始化&#xff1a;分配并注册MDIO总线&#xff0c;用于与PHY设备通信。 网络设备的创建&#xff1a;分配网络设备&#xff08;如以太网接口&#xff09;。 PHY设备连接&#xff1a;通过phy_connect函数连接PHY设备&#xff0c;指定回调函数my_adj…...

【c++篇】:从基础到实践--c++内存管理技巧与模版编程基础

✨感谢您阅读本篇文章&#xff0c;文章内容是个人学习笔记的整理&#xff0c;如果哪里有误的话还请您指正噢✨ ✨个人主页&#xff1a;余辉zmh–CSDN博客 ✨ 文章所属专栏&#xff1a;c篇–CSDN博客 文章目录 前言一.c/c内存分布二.c/c的动态内存管理方式2.1.c语言的动态内存管…...

如何减小 Maven 项目生成的 JAR 包体积 提升运维效率

在使用 Maven 构建 Java 项目时&#xff0c;有时需要减小生成的 JAR 包的体积&#xff0c;以提高部署效率或减少资源消耗。以下是一些有效的方法来减小 JAR 包的体积&#xff1a; 排除不必要的依赖打包时&#xff0c;依赖jar包独立于应用jar包 1. 排除不必要的依赖 通过排除项目…...

Python自动化会议记录与摘要生成

前言 在现代工作环境中&#xff0c;会议是团队沟通和决策的重要方式。然而&#xff0c;整理会议记录和生成摘要往往是一项耗时且容易出错的任务。幸运的是&#xff0c;借助Python编程语言以及一些强大的库&#xff0c;我们可以自动化这一过程&#xff0c;让机器帮助我们完成这…...

SwiftUI 中 List 或 Form 子视图关联的 swipeAction 导致展开动画异常的解决

问题现象 小伙伴们都知道,在 SwiftUI 中更快捷的增强 List 或 Form 子视图(Cell)交互功能的方法是使用 swipeAction 修改器。不过,对其使用稍有不慎也会横生枝节。 如上图所示,不适当的设置 Cell 视图布局会使 swipeAction 无法生成正确的收缩和展开动画。对此我们有什么…...

Apache Paimon Catalog

Paimon Catalog可以持久化元数据&#xff0c;当前支持两种类型的metastore&#xff1a; 文件系统&#xff08;默认&#xff09;&#xff1a;将元数据和表文件存储在文件系统中。hive&#xff1a;在 hive metastore中存储元数据。用户可以直接从 Hive 访问表。 2.2.1 文件系统…...

C++基础:三个字符串也能搞大小?

上一篇说了三个整数比较大小&#xff0c;按照顺序输入的&#xff0c;这次我们看看字符串的&#xff0c;顺便把那个简化以下&#xff1a; 题目:这次输入三个字符串。如果用户输入“Stenbeck", “Hemingway”,“Fitzgerald”,输出将是“Fitzgerald&#xff0c;Hemingway&…...

了解AIGC——自然语言处理与生成

AIGC——自然语言处理与生成&#xff1a;揭秘AI如何生成语言 近年来&#xff0c;AIGC&#xff08;AI Generated Content&#xff09;技术迅猛发展&#xff0c;自然语言处理&#xff08;Natural Language Processing, NLP&#xff09;与生成技术的结合&#xff0c;使得机器不仅…...

Modern CMake 简明教程(8)- 集成Qt

在项目中集成 Qt 库需要先使用 find_package 查找 Qt 的安装位置。对于 Qt4, CMake 使用 Module 模式进行查找(FindQt4.cmake 由 CMake 提供),而 对于 Qt5、Qt6,则是使用 Config 模式进行查找,相应的 config 文件位于类似下面的目录中 D:\Qt\5.15.2\msvc2019\lib\cmake。…...

人脸应用实例:性别年龄预测

在当今科技飞速发展的时代&#xff0c;人脸识别技术已经从科幻电影走进了我们的日常生活。通过算法来识别人脸的特征&#xff0c;进而判断身份、年龄和性别&#xff0c;这一技术正逐步改变着我们的生活方式。今天&#xff0c;我们就来探讨一下基于深度学习的人脸应用实例——性…...

学习threejs,通过THREE.Raycaster给模型绑定点击事件

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;threejs gis工程师 文章目录 一、&#x1f340;前言1.1 ☘️THREE.Raycaster光线投射概…...

Jackson Json序列化反序列化的两个坑

Jackson is a suite of data-processing tools for Java (and the JVM platform) Jackson最常用的Json序列化功能&#xff0c;引入如下的包即可&#xff1a; <properties>...<!-- Use the latest version whenever possible. --><jackson.version>2.17.1<…...

k8s_Pod健康检查

Kubernetes 3种探针介绍 LivenessProbe&#xff08;存活探针&#xff09; LivenessProbe 用于检查容器是否仍然活着。如果探针检测到容器已经失去响应&#xff0c;Kubernetes 将重启该容器。这通常用来修复由于内部状态错误或死锁引起的程序失效问题。 作用&#xff1a;检测容器…...

基于DDPG算法的股票量化交易

项目源码获取方式见文章末尾&#xff01; 回复暗号&#xff1a;13&#xff0c;免费获取600多个深度学习项目资料&#xff0c;快来加入社群一起学习吧。 **《------往期经典推荐------》**项目名称 1.【基于PyQTFaceNet卷积神经网络实现的学生人脸识别考勤系统】 2.【卫星图像道…...

eIQ笔记(UI介绍+Loss曲线+OpenART例程)

This is a very beginner-friendly article ^o^ 目录 🍂一、训练器设置 input size: learning rate: learning rate decay: Epochs: Decay Rate: Linear Decay: Batch Size: Epochs to Train: QAT(Quantization Aware Training)量化感知训练: Pruning剪枝…...

微信小程序——消息订阅

首先用到的就是wx.requestSubscribeMessage接口。 注意&#xff1a;用户发生点击行为或者发起支付回调后&#xff0c;才可以调起订阅消息界面 requestSubscribeMessage() {uni.requestSubscribeMessage({tmplIds: [],//需要订阅的消息模板的id的集合&#xff0c;一次调用最多可…...

网络原理(传输层)->TCP协议解

前言 大家好&#xff01;我是小帅&#xff0c;今天我们来学习TCP协议&#xff0c;个人主页 文章目录 1. TCP协议2. TCP的核心机制2.1TCP核心机制一&#xff1a;确认应答2.2 TCP核心机制二&#xff1a;超时重传2.3 TCP核心机制三&#xff1a;连接管理2.4 TCP核心机制四&#xf…...

oracle imp和exp 导入不同库的用户和表空间

参考&#xff1a; oracle 导入(imp)数据时的表空间(tablespace users)问题_imp tablespace-CSDN博客 网上的解决办法大概都是这种&#xff0c;但是实际测试19c数据库并不能成功&#xff0c;所以最后采取在导出文件上强行修改表空间的办法&#xff0c;改完后再继续执行导出导入…...

滚珠丝杆的精度级别如何分?

滚珠丝杆是一种常见的线性传动装置&#xff0c;广泛应用于各种机械设备和自动化系统中。滚珠丝杆的精度等级划分是评估其传动精度和运动平稳度的重要标准&#xff0c;滚珠丝杆的精度级别划分主要基于传动中实际移动距离与理想移动距离的偏差&#xff0c;偏差越小&#xff0c;精…...

ComfyUI初体验

ComfyUI 我就不过多介绍了&#xff0c;安装和基础使用可以看下面大佬的视频&#xff0c;感觉自己靠图文描述的效果不一定好&#xff0c;大家看视频比较方便。 ComfyUI全球爆红&#xff0c;AI绘画进入“工作流时代”&#xff1f;做最好懂的Comfy UI入门教程&#xff1a;Stable D…...

AI Agent 的难点,不在搭 Demo,而在让人敢交任务

Agent难在让人敢托付 很多团队做 Agent 的误会&#xff0c;是把跑通一次当成好用。 现在搭一个 Demo 确实不难。一个大模型&#xff0c;几段提示词&#xff0c;接几个搜索、表格、浏览器或数据库工具&#xff0c;很快就能演示一个会拆任务、会调用工具、会输出结果的流程。看起…...

3分钟掌握完全离线的实时语音转文字:TMSpeech让你彻底告别云端依赖

3分钟掌握完全离线的实时语音转文字&#xff1a;TMSpeech让你彻底告别云端依赖 【免费下载链接】TMSpeech 腾讯会议摸鱼工具 项目地址: https://gitcode.com/gh_mirrors/tm/TMSpeech 在数字时代&#xff0c;语音转文字已成为现代办公和学习的高效助手&#xff0c;但你是…...

taotoken模型广场功能体验与主流模型选型建议

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 taotoken模型广场功能体验与主流模型选型建议 1. 平台入口与模型广场概览 登录Taotoken控制台后&#xff0c;最直观的功能入口之一…...

3个步骤解决Mac Boot Camp驱动部署难题:Brigadier自动化方案详解

3个步骤解决Mac Boot Camp驱动部署难题&#xff1a;Brigadier自动化方案详解 【免费下载链接】brigadier Fetch and install Boot Camp ESDs with ease. 项目地址: https://gitcode.com/gh_mirrors/bri/brigadier 还在为Mac电脑安装Windows系统后的驱动问题而烦恼吗&…...

3步精通UE4SS游戏Mod开发:从注入到实战完全指南

3步精通UE4SS游戏Mod开发&#xff1a;从注入到实战完全指南 【免费下载链接】RE-UE4SS Injectable LUA scripting system, SDK generator, live property editor and other dumping utilities for UE4/5 games 项目地址: https://gitcode.com/gh_mirrors/re/RE-UE4SS UE…...

深入浅出MCP:从零开始的完整学习指南(保姆级教程)

手把手带你理解MCP是什么、怎么用、如何开发&#xff0c;每个步骤都有详细说明 写在前面 很多朋友看完MCP的介绍还是一头雾水&#xff1a;“这到底是什么&#xff1f;跟我有什么关系&#xff1f;我该怎么用&#xff1f;” 别急&#xff0c;这篇文章我会用最通俗的方式&#x…...

AgenticROS:用自然语言操控ROS2机器人的AI Agent接口实践

1. 项目概述&#xff1a;当AI大模型遇见机器人操作系统如果你和我一样&#xff0c;既对AI大模型的能力着迷&#xff0c;又对机器人开发充满兴趣&#xff0c;那么你肯定想过一个问题&#xff1a;能不能让Claude、Gemini这样的AI&#xff0c;像我们人类工程师一样&#xff0c;直接…...

从SPI模式0到Quad I/O:手把手带你玩转W25Q128JV的性能压榨与接口升级

从SPI模式0到Quad I/O&#xff1a;W25Q128JV性能优化实战指南 在嵌入式系统设计中&#xff0c;存储器的性能往往成为整个系统响应速度的瓶颈。W25Q128JV这颗128Mbit容量的串行Flash芯片&#xff0c;凭借其灵活的接口配置和出色的性价比&#xff0c;已成为众多物联网设备、消费电…...

AgentLimb:基于肌肉记忆的AI浏览器自动化,降低85% Token消耗

1. 项目概述&#xff1a;当AI学会“肌肉记忆”&#xff0c;浏览器自动化迎来新范式如果你和我一样&#xff0c;每天都在和AI助手打交道&#xff0c;让它们帮你写代码、分析数据&#xff0c;甚至尝试控制浏览器完成一些重复性任务&#xff0c;那你一定遇到过这个痛点&#xff1a…...

RedwoodJS熔断器:构建高可用应用的熔断机制与故障隔离终极指南 [特殊字符]

RedwoodJS熔断器&#xff1a;构建高可用应用的熔断机制与故障隔离终极指南 &#x1f527; 【免费下载链接】redwood RedwoodGraphQL 项目地址: https://gitcode.com/gh_mirrors/re/redwood 在当今微服务架构盛行的时代&#xff0c;应用的高可用性成为了开发者的首要关注…...