前言:
网卡工作在OSI七层协议中的链路层,是主机与网络对接的重要接口,它完成了网络连接的物理和电信号之间的转换,同时还对网络数据包帧进行发送、接收、校验等,是上层网络应用的基石。在计算机架构中,通常是CPU通过内部总线(AHB BUS 或者 PCI BUS)与MAC控制单元通信,然后由MAC控制单元通过MII接口协议与PHY设备进行数据交互,PHY设备则负责与外部网络通信(RJ45网络接口)。通常将MAC控制单元与PHY设备集成在一起,构成我们所熟悉的网卡(ethn设备),在嵌入式开发中,经常需要获取网卡设备的一些信息,比如说网卡的工作模式、网卡的带宽等等,虽然有现成的ethtool等开源软件来实现,但是对于存储空间有限的嵌入式设备,我们可以通过代码写socket然后ioctl来实现。下图是参考了网友的MAC控制单元与PHY设备的功能框图
网卡信息
先来了解一下网卡设备信息的结构体内容,里面包括了我们所熟知的网卡模式支持,网卡特性、网卡带宽、全双工模式、PHY地址等等网卡信息。
struct ethtool_cmd {
__u32 cmd;
__u32 supp