分析网卡通过i2c总线从e2prom中读取mac地址过程
来源:互联网 发布:怎么查询淘宝客订单 编辑:程序博客网 时间:2024/06/07 01:51
平台:loongson3A系列CPU+loongson2H桥片的开发板.
每个网卡都有一个独一无二的mac地址,一般这个地址就存放在一个e2prom中,这里就是分析一个网卡初始化过程中,怎么从这个e2prom中读取mac地址。
首先这里的e2prom和cpu的i2c控制器相连接,也就是说最后访问这个设备时,使用的是i2c总线的驱动。
i2c总线的时序这里就不介绍了,大家可以看一个i2c设备的手册,其中时序部分讲解的就很详细了。
源码在龙芯开源社区:http://www.loongnix.org/cgit。
网卡的源码:drivers/net/ethernet/stmicro/stmmac
stmmac_open->stmmac_check_ether_addr->stmmac_eep_get_mac_addr->i2c_transfer
这里是网卡初始化过程中函数调用关系,在最后去取mac地址时调用到函数i2c_transfer,这就是i2c驱动中的代码,下面看这个函数的调用关系:
i2c驱动源码:drivers/i2c/busses/i2c-ls2h.c
i2c_transfer-->__i2c_transfer-->adap->algo->master_xfer-->ls2h_i2c_xfer-->ls2h_i2c_doxfer-->ls2h_i2c_start-->ls2h_i2c_read
这里说明一下,adap->algo->master_xfer是一个函数指针,这是在i2c驱动的probe函数初始化的。
ls2h_i2c_probe{...adap->algo = &ls2h_i2c_algo;...}static const struct i2c_algorithm ls2h_i2c_algo = {.master_xfer= ls2h_i2c_xfer,.functionality= ls2h_i2c_func,};
最后一部分函数的调用
ls2h_i2c_doxfer-->ls2h_i2c_start-->ls2h_i2c_read
其实就是模拟i2c时序来和设备进行通信,最后读取出来设备中存储的mac地址。
阅读全文
1 0
- 分析网卡通过i2c总线从e2prom中读取mac地址过程
- I2C 总线 ——E2PROM
- asp 读取网卡mac地址
- asp 读取网卡mac地址
- 读取网卡的MAC地址
- VC++中怎样读取网卡的MAC地址
- ETHERNET中MAC通过MII总线控制PHY的过程
- [转]单片机I2C总线及E2PROM应用实例
- 串行I2C总线E2PROM AT24CXXX的应用1
- 串行I2C总线E2PROM AT24CXXX的应用2
- 串行I2C总线E2PROM AT24CXXX的应用3
- arduino读取I2C总线上连接设备的地址
- dm6467中I2C总线驱动分析
- DM6467中I2C总线驱动分析
- 用vb读取多网卡mac地址
- java通过ip获取网卡MAC地址
- c# 通过NetworkInterface读取网卡Mac
- Delphi自定义获取网卡MAC地址过程
- 写个Demo 来理解 Matrix
- BZOJ 2351 Matrix (Hash)
- 【android】onInterceptTouchEvent与onTouchEvent
- HDU6033Add More Zero
- CAD入门 调整虚线比例
- 分析网卡通过i2c总线从e2prom中读取mac地址过程
- 浏览器内核及js引擎
- chorme flash无法使用问题
- JavaScript基础第一章
- C
- JS 程序设计(数据类型、对象、运算符)
- (6)51单片机入门案列-LCD渐入显示
- 聊聊tcpdump与Wireshark抓包分析
- 回归的正则化模型:岭回归和Lasso回归(套索回归)