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

ALPHA开发板上的PHY芯片驱动:LAN8720驱动

一.  简介

前面文章了解到,Linux内核是有提供 PHY通用驱动的。

本文来简单了解一下ALPHA开发板上的 PHY网络芯片LAN8720的驱动。是 LAN8720芯片的公司提供的 PHY驱动。

二.  ALPHA开发板上的PHY芯片驱动:LAN8720驱动

我 们 来 看 一 下 LAN8720A Linux 驱动, LAN8720A 的 驱 动 文 件 为
drivers/net/phy/smsc.c ,这个文件是 SMSC 针对自家的一些 PHY 芯片编写的驱动文件,其中就 包含了 LAN8720A 这个 PHY 芯片。默认情况下, LAN8720A 这个驱动是没有打开的,我们需 要配置 linux 内核,打开Linux内核配置界面(运行 "make menuconfig" 命令),进入驱动选项,配置路径如下:
-> Device Drivers -> Network device support -> PHY Device support and infrastructure -> Drivers for SMSC PHYs

配置界面如下图 所示:
选中上面配置界面 中的 “ Drivers for SMSC PHYs ”,然后重新编译内核即可。

注意:这里只是暂时将新更改的配置保存到  .config文件中,当不小心 "make clean" 命令后就会删除掉更改的配置。

永久保存新配置:选中 "Drivers for SMSC PHYs"选项后,再选中上面Linux内核配置界面上的 "<Save>" 选项,可以保存到我创建自己开发板的内核配置文件 imx_v7_alientek_nand_defconfig文件中(之前移植实验):

上面输入 配置文件的路径,选中"OK" 选项即可实现永久保存新配置。可以通过查看 配置文件 imx_v7_alientek_nand_defconfig文件内容确认。

2.  LAN8720驱动

打开 smsc.c ,找到如下所示内容 ( 限于篇幅,有删减 )
static struct phy_driver smsc_phy_driver[] = {
{.phy_id		= 0x0007c0a0, /* OUI=0x00800f, Model#=0x0a */.phy_id_mask	= 0xfffffff0,.name		= "SMSC LAN83C185",
....................
}, {.phy_id		= 0x0007c0b0, /* OUI=0x00800f, Model#=0x0b */.phy_id_mask	= 0xfffffff0,.name		= "SMSC LAN8187",
....................
}, {.phy_id		= 0x0007c0c0, /* OUI=0x00800f, Model#=0x0c */.phy_id_mask	= 0xfffffff0,.name		= "SMSC LAN8700",
....................
}, {.phy_id		= 0x0007c0d0, /* OUI=0x00800f, Model#=0x0d */.phy_id_mask	= 0xfffffff0,.name		= "SMSC LAN911x Internal PHY",
....................
}, {.phy_id		= 0x0007c0f0, /* OUI=0x00800f, Model#=0x0f */.phy_id_mask	= 0xfffffff0,.name		= "SMSC LAN8710/LAN8720",.features	= (PHY_BASIC_FEATURES | SUPPORTED_Pause| SUPPORTED_Asym_Pause),.flags		= PHY_HAS_INTERRUPT | PHY_HAS_MAGICANEG,/* basic functions */.config_aneg	= genphy_config_aneg,.read_status	= lan87xx_read_status,.config_init	= smsc_phy_config_init,.soft_reset	= smsc_phy_reset,/* IRQ related */.ack_interrupt	= smsc_phy_ack_interrupt,.config_intr	= smsc_phy_config_intr,.suspend	= genphy_suspend,.resume		= genphy_resume,.driver		= { .owner = THIS_MODULE, }
} };module_phy_driver(smsc_phy_driver);

可以看出, smsc_phy_driver 还是支持了不少 SMSC 家的 PHY 芯片,
比如, LAN83C185 LAN8187 LAN8700 等等,当然了,肯定也包括了 LAN8720 系列。
22~45 ,就是 LAN8710/LAN8720 系列 PHY 驱动。

23 行,PHY ID 0X0007C0F0

24 行,PHY ID 掩码为 0XFFFFFFF0,也就是前 28 位有效,在进行匹配的时候只需要比较前 28 位,第 4 位不用比较。

25 行,驱动名字为“SMSC LAN8710/LAN8720”,系统启动以后,打开网卡就会提示当前 PHY 驱动名字为“SMSC LAN8710/LAN8720”。

47 行,使用 module_phy_driver(本质是一个宏)来完成 smsc_phy_driver 的注册。

此驱动里面的成员函数有一些是 SMSC 自己编写的,有一些是直接用的通用 PHY 驱动的, 比如,第 32 行的 genphy_config_aneg、第 41 行的 genphy_suspend 等。

关于ALPHA开发板上的 PHY网络芯片LAN8720的驱动,简单 了解到这里。


 

http://www.lryc.cn/news/330245.html

相关文章:

  • C语言游戏实战(9):球球大作战
  • 【Windows】关闭自动更新
  • mac如何检测移动硬盘 mac硬盘检测工具 Tuxera怎么用 Tuxera NTFS官网
  • 1038 Recover the Smallest Number
  • 【Go】四、包名、访问范围控制、标识符、运算符
  • 达梦数据库日志文件管理
  • zookeeper 监控 与 JVM 设置
  • 【java】关于String、StringBuffer和StringBuilder的那些事
  • Spring 的 Ioc配置
  • 基于Java-SpringBoot+vue实现的前后端分离信息管理系统设计和实现
  • 用Python实现办公自动化(自动化处理PDF文件)
  • 银河麒麟操作系统Kylin Linux 离线安装Nginx1.21.5
  • ApiFox 使用教程
  • github拉取的项目添加至自己的仓库
  • ZooKeeper 的持久化机制
  • VS2022+QT5.9 提示找不到qtmain.lib
  • HTTP和HTTPS谁传输数据更安全?
  • 竞赛常考的知识点大总结(七)图论
  • NOSQL - Redis的简介、安装、配置和简单操作
  • 书生·浦语大模型开源体系(二)笔记
  • docker-compse安装es(包括IK分词器扩展)、kibana、libreoffice
  • Electron 读取本地配置 增加缩放功能(ctrl+scroll)
  • docker中配置交互式的JupyterLab环境的问题
  • SQLAlchemy 来查询并统计 MySQL 中 JSON 字段的一个值
  • HTTPS ECDHE 握手解析(计算机网络)
  • 在git上先新建仓库-把本地文件提交远程
  • Redis 过期删除策略
  • MySQL 锁合集与事务隔离级别
  • 题解 -- 第六届蓝桥杯大赛软件赛决赛C/C++ 大学 C 组
  • Lua脚本的使用