linux以太网驱动总结

本文是对linux以太网驱动的全面总结,包括硬件部分如MAC、PHY的介绍,软件初始化流程,数据发送和接收过程,设备无关层,以及以太网功能启动和中断问题的处理。重点探讨了MAC与PHY的接口、软件初始化步骤、数据传输机制以及故障排查方法。

linux以太网驱动总结

工作中涉及linux以太网驱动,涉及代码:drivers/net/ethernet/stmicro/,drivers/net/phy/,进行一下总结。
概要:
1.以太网硬件
2.软件初始化probe, open
3.数据发送过程
4.数据接收过程
5.设备无关层
6.bring up以太网功能
7.传输过程中传输中断的问题

1.以太网硬件
MAC:通常集成在ARM芯片中,功能类似于一个controller,以太网协议层数据传送给MAC,由MAC通过DMA发送到外部接口,外部接口连接着PHY。或者接收从PHY传过来的信号,DMA搬运到内存中存储。
PHY:通常是一个独立芯片,有数字和模拟两部分,也可以集成在ARM芯片内部。负责把从MAC传送过来的数据转换成可以在网线上传输的信号,或者接收网线上传输过来的信号,转换成数字信号回传给MAC。分为百兆PHY和千兆PHY。
PHY配置:自协商模式开启/关闭; 自协商关闭状态下,配置为强制full duplex, half duplex, 强制1000Mbps/100Mbps/10Mbps;WOL开启/关闭。
MAC和PHY之间的接口分为RMII接口(百兆),RGMII接口(千兆)。
RMII接口:
这里写图片描述
数据传输信号线TX0, TX1, RX0,RX1,clock
控制口:MDC, MDIO
RGMII接口:

### Linux以太网驱动开发、配置及常见问题解决 #### 一、以太网驱动开发概述 在Linux系统中,网络子系统的架构设计使得开发者可以方便地实现各种类型的网络设备驱动以太网驱动作为最常见的网络设备之一,在其开发过程中通常涉及以下几个方面:硬件初始化、数据包接收与发送、中断处理以及注册到内核中的必要操作。 对于硬件初始化阶段,需要确保网卡能够被正确识别并与主机通信。这一步骤可能包括设置寄存器值来控制MAC地址分配、PHY状态管理等功能[^3]。例如: ```c static int my_eth_probe(struct platform_device *pdev) { struct net_device *ndev; ndev = alloc_etherdev(sizeof(struct my_priv_data)); if (!ndev) return -ENOMEM; /* 初始化私有数据 */ SET_NETDEV_DEV(ndev, &pdev->dev); ... } ``` 接着就是定义如何收发数据帧的方法。这部分逻辑主要通过`net_device_ops`结构体成员函数指针指向实际执行这些动作的具体方法实现出来[^4]。 关于中断机制的应用,则遵循之前提到过的上下文分离原则——即快速响应部分放在顶半部(top-half),而耗时的任务则交由底半部(bottom-half)完成[^2]。 #### 二、配置环境准备 为了便于调试新编写的驱动模块或者修改现有开源项目里的相关内容,建议按照如下方式搭建适合的工作区: 1. 进入目标SDK路径下创建必要的文件夹树形结构; 2. 添加所需的Kconfig条目以便于后续菜单选项显示; 3. 编辑Makefiles使构建工具知道哪些源代码应该参与链接过程; 具体命令序列可参照下面例子所示[^1]: ```bash cd ~/your_project_path/linux-kernel/ mkdir -p drivers/network/ethernet/my_custom_driver/ touch {drivers/network/ethernet/my_custom_driver/,}Kconfig Makefile *.c ``` #### 三、常见错误分析及其对策 当遇到无法加载自定义驱动的情况时,请核查以下几点可能性原因并采取相应措施加以修正: - **符号未导出**: 如果尝试访问其他已存在但受保护资源失败的话,记得添加EXPORT_SYMBOL宏声明共享接口。 - **版本匹配**: 使用modinfo查看ko文件属性确认是否一致; 同时注意保持kernel headers同步更新至相同level. - **缺少依赖库支持**: 安装完整的build chain environment including gcc,g++,make etc., plus any additional packages required by your specific driver codebase.
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值