网卡驱动调试

网卡驱动架构理解

网卡一般分为MAC和PHY两个部分。

  • MAC (Media Access Control):

    • 功能:数据过滤,位于CPU和PHY之间。
    • 类别:EMAC(以太网MAC)、GMAC(千兆以太网MAC)。
    • 接口:MII(10/100 Mbps)、GMII(1000 Mbps)、RGMII(减少引脚的GMII)。
  • PHY (Physical Layer Device):

    • 功能:负责数据的物理传输。
    • 地址:0-31,由板卡电路图决定。
    • ID:由硬件厂商决定,用于识别PHY芯片。

MAC组件与功能

  • 帧发送:接收上层数据,增加以太网帧头尾。
  • 帧接收:检查数据有效性,转发或丢弃。
  • GMAC控制:全双工模式下控制帧生成和检测。
  • GMII管理:控制物理层输入输出,检查状态信息。

工作模式

  • 半双工模式:GMAC client将数据传给GMAC后,GMAC先给数据加上Preamble、FSD、FCS,组成以太网帧;
    然后检查载波侦听信号(CRS);
    若有载波信号,表示有数据正在 本地网段上传播,就等待直到载波信号消失;
    载波信号消失后,GMAC还要等待一个帧间延时(interFrame Spacing);
    若在帧间延时期间,一直没有载波信号,该以太网帧就可以开始向物理层传输。

  • 全双工模式:GMAC从GMAC Client接收到数据后,不需要载波侦听和冲突检测,
    直接向物理层传送,其它操作与半双工相同。

调试工具与准备

抓包工具安装

  • 查看系统是否有这个包
    1
    # dpkg -l |grep wrieshark
  • 如果没有,在网络配置好的情况下
    1
    # sudo apt-get update
  • 等待安装完成
    1
    # sudo apt-get install wireshark
  • 完成后,找到wireshark 后面增加用户名
1
#sudo vim /etc/group

网络配置与调试命令

以下是一些常用的网络调试命令。

  • ifconfig:管理网络接口状态和配置
1
2
3
4
5
6
7
8
//  启动/关闭指定网卡    
ifconfig xxx(eth0) up/down

// 配置ip地址,并配上子掩码
ifconfig eth0 192.168.1.22 netmask 255.255.255.0

// 配置ip,配置子掩码与广播
ifconfig eth0 192.168.0.123 netmask 255.255.255.0 broadcast 192.168.0.255 地址
  • mii-tool:显示工作模式

  • ethtool:查询和修改网卡设置。

系统网络服务管理

  • 重启网络服务

    1
    service network-manager restart
  • 显示网卡信息

    1
    nmcli conn show
1
2
3
4
WARNING: terminal is not fully functional
NAME UUID TYPE DEVICE
Wired connection 1 1a3b5429-c92a-35a3-beec-b0d996e54fcd ethernet eth0

如果除了上述信息没新网卡信息

  • 检查并添加网络配置

    1
    nmcli conn add ifname eth0 con-name eth0 type ethernet
  • 编辑网络配置文件
    编辑 /etc/sysconfig/network-scripts/ifcfg-eth0 文件,配置如下参数:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
TYPE=Ethernet
BOOTPROTO=static
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no
NAME=eth0 ## 要改
UUID=1a3b5429-c92a-35a3-beec-b0d996e54fcd ## 要改
DEVICE=eth0 ## 要改
ONBOOT=yes
HWADDR=7e:d4:ff:47:49:4f ## 要改

IPADDR=192.168.0.123 ## 要改

PREFIX=24
NETMASK="255.255.255.0" # 子网掩码
GATEWAY=192.168.0.1 # 根据需要配置

  • 重启网络服务

执行以下命令以应用更改:

1
sudo systemctl restart network-manager
  • 安装network-manager和netplan

在 Ubuntu 系统上,如果需要管理网络配置,确保已安装以下软件包:

1
2
apt-get install netplan.io
apt-get install network-manager
  • 配置静态 IP 地址

对于 Ubuntu 20.04 及以后版本,在 /etc/netplan/01-network-manager-all.yaml 中设置静态 IP:

1
2
3
4
5
6
7
8
9
10
11
network:
version: 2
renderer: NetworkManager
ethernets:
eth0: // 修改网卡名字
dhcp4: no
addresses:
192.168.0.123/24 // 设置的ip地址
gateway4: 192.168.0.1 // 网关
nameservers:
addresses: [8.8.8.8, 1.1.1.1] // dns解析
  • 配置 DHCP 自动获取 IP

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    network:
    ethernets:
    eth0:
    dhcp4: true
    eth1:
    dhcp4: true
    nameservers:
    addresses: [8.8.8.8, 1.1.1.1]
    version: 2

  • 应用 Netplan 配置

使用以下命令测试并应用 Netplan 配置:

1
2
3
4
sudo dhclient -r //release ip 释放IP 
sudo dhclient //获取IP
# netplan 配置文件 测试
sudo netplan --debug apply
  • 通过图形界面配置网络

在桌面环境中,可以通过 NetworkManager 的图形界面进行配置:
1、打开设置
2、选择 “Wired connected”
3、选择 “Wire settings”
4、新建 Profile 并配置 IPv4 设置

20.04之后网络配置文件目录:
/etc/NetworkManager/system-connections

  • 网络接口启动与 IP 获取

启动网卡并自动获取 IP 地址:

1
2
sudo ifconfig eth0 up
sudo dhclient eth0
  • 安装networking

如果没出现/etc/network/interfaces 文件,则需要networking
apt install ifupdown -y

  • 其他

/etc/resolv.conf 链接文件,但是修改无效
vim /run/systemd/resolve/stub-resolv.conf

  • wifi 调试指令
1
2
3
4
wpa_cli -i wlan0 scan  扫描

wpa_cli -i wlan0 scan_results