Ubuntu18.04环境下I219-LM网卡不能识别问题解决

Ubuntu18.04环境下I219-LM网卡不能识别问题解决

背景介绍

使用的某品牌的PC机,CPU型号为I5-1145G7(笔记本)或者I5-11500(PC机和笔记本),因为某些原因的限制,只能安装Ubuntu18.04版本的操作系统。安装操作系统完毕之后,发现网卡不能识别,经过各种尝试之后,问题终于解决,特此记录一下。
(本文介绍的内容涉及笔记本和PC机,因此硬件型号有所差异)

硬件信息

PC机自带的windows11操作系统网卡是能够正常工作的。从设备管理器里面看到的网卡类型为I219-V(笔记本) 或者I219-LM(PC机)
这两款型号的硬件并不是最新才出现的
(后来发现我自己3年前的笔记本网卡就是I219-LM,而且当时安装Ubuntu18.04的操作系统并没有出现网卡不识别的问题,这样给我带来极大的信心,认为这个问题肯定可以解决)

驱动信息

首先是联系电脑的厂家,不过在厂家的支持列表里面,Ubuntu最低的版本就是20.04了,所以支持进度有些慢。不过他们也认为是网卡驱动的问题,并提供了下载地址:

https://www.intel.cn/content/www/cn/zh/download/14611/15817/intel-network-adapter-driver-for-pcie-intel-gigabit-ethernet-network-connections-under-linux.html?product=46827
(我这里选择的是当前最新的3.8.4版本,最后也是靠重新编译驱动解决的问题。)

解决过程

一开始也知道是驱动的问题,而且最开始尝试的也是e1000e-3.8.4.tar.gz文件,无奈编译错误,导致一度想要放弃。

后来发现自己的笔记本(三年前购买)也是同样类型的网卡I219-LM。两三年前安装的Ubuntu18.04,当时没有出现网卡不能识别的问题,所以我坚信这个问题肯定可以解决。这给我带来极大的信心。

开始尝试各种低版本的Ubuntu18.04,想办法将PC机的操作系统以及内核版本跟我自己笔记本的内核版本一致,这样加载对应的ko文件就应该可以了。在不断的尝试过程中,发现跟操作系统版本和内核版本没有强制的关系。而且我的笔记本在使用过程中也使用apt-get upgrade升级过内核版本,并没有出现升级前后网卡不识别的问题。所以最后提出一个通用的方法。

解决方案

下面介绍一下Ubuntu18.04操作系统下,I219-V I219-LM类型网卡不识别问题的解决方法:

  1. 正常安装Ubuntu18.04的操作系统(经过测试发现对小版本并没有强制限制和要求)
  2. 检查网卡是否被识别。如果有线网卡被识别,则就不用继续操作了。注意针对笔记本,这里需要确认一下是有线还是无线。一些同学使用的是无线网卡进行的网络连接,而对有线网卡不能被识别的现象忽略了。
  3. 使用lsmod | grep e1000e命令确认一下网卡模块是否已经加载,如果为空的话,表示没有被加载
  4. 使用外置网卡或者无线网卡。配置临时IP地址,以便可以访问公网进行软件依赖包的安装。
  5. 参考如下命令,进行依赖的软件安装(切换到root用户下执行)
// 软件源更新
apt-get update
// 编译需要
apt-get install gcc
// make命令需要
apt-get install make
apt-get install make-guile
  1. 将下载的文件e1000e-3.8.4.tar.gz 放置到Ubuntu环境的普通用户的home目录。解压之后,参考README进行手动编译。
// 解压
tar zxf e1000e-3.8.4.tar.gz
// 编译
make
// root用户执行
make install

在181行左右将1改成0(也有的人说这里不需要修改,试过也是可行,同样也能编译出来e1000e.ko文件)

编译完毕之后,首先使用lsmod | grep e1000e 看看是否已经加载,如果加载的话,需要使用rmmod e1000e 删除, 然后尝试使用insmod e1000e.ko看看是否能够加载成功,没有报错,并且执行lsmod |grep e1000e有内容的话,说明编译的没有问题,执行rmmod e1000e删除

  1. 模块加载
// 操作
modprobe pps_core
modprobe ptp
// 在e1000e-3.8.4/src目录下执行
insmod e1000e.ko
// 编译
  1. 验证
  • 使用modinfo e1000e | grep filename确认文件的来源,

  • 使用md5sum进行校验,确认文件是否与编译出来的e1000e.ko是否一致

  • 将机器进行重启, 检查网卡是否被识别 做进一步确认

注意事项

问题虽然得到解决,但是还有几个细节的地方后续需要进一步确认:

  1. 网卡速率的问题 正常情况下网卡显示是千兆速率,如果不是的话,需要确认一下是否为网线的问题。
  2. 外置网卡的问题 网卡不识别问题的解决,需要手动重新进行编译。在板载网卡不能被识别的时候,我们是通过外置网卡或者无线网卡来解决gcc等软件包安装的问题。在使用USB转网卡的扩展坞(具体型号为:绿联 USB转千兆网口扩展坞 笔记本外置有线网卡网线转换头3.0分线器适用苹果电脑拓展坞HUB集线器RJ45转接器 ) 发现内核为4.15.0和内核为5.4.0的时候,两者表现不一样。内核为4.15.0的时候不能识别USB外置网卡。当时参考链接: Ubuntu Linux内核版本升级或降级到指定版本 在高内核版本进行gcc make make-guile的软件依赖包安装,然后在低内核版本下进行编译。最后发现,高内核版本(等于或者低于5.4.0-84-generic)同样可以解决网卡不能被识别的问题。
  3. 内核版本支持 我们在测试中发现,Ubuntu18.04系统的内核版本最高可支持5.4.0-84-generic 如果再高的话,同样的操作也会出现网卡不能识别的情况,因此需要把内核版本降到可用的范围内。因此需要禁止系统内核的自动更新操作。

因为时间匆忙和水平有限,难免有所纰漏,请大家多多指教。

### 如何在 Ubuntu 中根据 MAC 地址查找网卡详情 在 Ubuntu 系统中,可以通过多种方式利用 MAC 地址查询对应的网卡信息。以下是具体的方法: #### 方法一:使用 `lshw` 命令 通过执行命令 `lshw -C network` 可以查看系统的网络设备及其详细信息,其中包括每个网卡的 MAC 地址和其他属性[^1]。 此命令会返回类似于以下的内容: ```bash *-network description: Ethernet interface product: Ethernet Connection I217-LM vendor: Intel Corporation physical id: 19 bus info: pci@0000:00:1f.6 logical name: eno1 version: 00 serial: xx:xx:xx:xx:xx:xx # 这里的serial即为MAC地址 capacity: 1Gbit/s width: 32 bits clock: 33MHz capabilities: pm msi bus_master cap_list ethernet physical tp 10bt 10bt-fd 100bt 100bt-fd 1000bt-fd autonegotiation configuration: autonegotiation=on broadcast=yes driver=e1000e driverversion=3.2.6-k firmware=0.1-4 latency=0 link=no multicast=yes port=twisted pair resources: irq:35 memory:f7c00000-f7c1ffff ioport:f080(size=32) memory:f7c20000-f7c20fff ``` 上述输出中的 `serial` 字段表示该网卡的 MAC 地址。 --- #### 方法二:使用 `ip` 或 `ifconfig` 命令 可以运行如下命令来列出所有活动的网络接口以及它们的 MAC 地址: ```bash ip link show ``` 或者(如果安装了 `net-tools` 工具包): ```bash ifconfig -a ``` 这些命令将提供类似下面的结果: ```plaintext eno1: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500 ether xx:xx:xx:xx:xx:xx txqueuelen 1000 (Ethernet) RX packets 0 bytes 0 (0.0 B) TX packets 0 bytes 0 (0.0 B) ... ``` 其中 `ether` 后面的部分就是对应网卡的 MAC 地址[^2]。 --- #### 方法三:结合 `/sys/class/net/` 路径筛选真实网卡 为了区分物理网卡和虚拟网卡,可采用以下脚本逻辑获取真正的物理网卡并匹配其 MAC 地址: ```bash ls /sys/class/net/ ls /sys/devices/virtual/net/ # 获取实际物理网卡列表 for dev in $(ls /sys/class/net/); do [[ ! -d "/sys/devices/virtual/net/$dev" ]] && echo $dev; done ``` 之后针对某个特定的真实网卡名称(比如 `eth0`),可以直接读取它的 MAC 地址文件: ```bash cat /sys/class/net/<interface_name>/address ``` 例如: ```bash cat /sys/class/net/enp0s3/address ``` 这一步骤能够精确找到指定网卡所关联的具体 MAC 地址[^4]。 --- #### 方法四:借助 Netplan 配置文件验证 IP-MAC 映射关系 对于基于 Netplan 的现代 Ubuntu 版本(如 18.04+),还可以查阅位于 `/etc/netplan/*.yaml` 文件内的定义数据确认各接口设置情况,尽管这种方法主要用于静态分配场景而非动态 DHCP 客户端环境[^3]: ```yaml network: version: 2 ethernets: eno1: dhcp4: no addresses: [192.168.1.100/24] gateway4: 192.168.1.1 nameservers: search: [mydomain, otherdomain] addresses: [8.8.8.8, 1.1.1.1] ``` 虽然这里并未显式提及 MAC 参数,但通常情况下 YAML 结构里不会遗漏重要字段;因此当存在疑问时仍需回溯至前述工具手段进一步核实。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值