1. 项目概述
在嵌入式Linux开发中,网络驱动的移植和调试往往是让开发者最头疼的环节之一。最近我在为i.MX6ULL平台移植Linux内核时,遇到了LAN8720A网卡驱动的适配问题。经过反复调试和验证,终于成功实现了双网口的稳定工作。本文将详细记录整个调试过程的关键步骤和注意事项,希望能为遇到类似问题的同行提供参考。
2. 核心修改步骤解析
2.1 时钟引脚配置修改
在i.MX6ULL平台上使用LAN8720A网卡时,首先需要修改的是fec_main.c文件中的时钟引脚配置。这个修改看似简单,但理解其背后的原理非常重要:
c复制void __iomem *IMX6U_ENET1_TX_CLK;
void __iomem *IMX6U_ENET2_TX_CLK;
IMX6U_ENET1_TX_CLK = ioremap(0X020E00DC, 4);
writel(0X14, IMX6U_ENET1_TX_CLK);
IMX6U_ENET2_TX_CLK = ioremap(0X020E00FC, 4);
writel(0X14, IMX6U_ENET2_TX_CLK);
这段代码的关键点在于:
- 0x020E00DC和0x020E00FC分别是ENET1和ENET2的TX_CLK引脚在i.MX6ULL内存映射中的寄存器地址
- 写入0x14值实际上是设置了SION(Software Input On Field)位为1,这个位控制着引脚是否可以作为输入
- 对于LAN8720A这类PHY芯片,需要确保时钟引脚能够正确接收外部时钟信号
注意:不同型号的i.MX6ULL芯片,这些寄存器地址可能会有所不同,务必查阅对应版本的数据手册确认。
2.2 内核配置使能LAN8720驱动
在内核配置阶段,需要通过menuconfig界面启用SMSC PHY驱动支持:
bash复制make menuconfig
配置路径为:
code复制Device Drivers →
Network device support →
PHY Device support and infrastructure →
Drivers for SMSC PHYs
这个配置项实
