ubuntu20解决intel wifi 驱动问题
产生问题条件
1. 内核版本 5.15.0-139-generic
bash
uname -a
Linux wj 5.15.0-139-generic #149~20.04.1-Ubuntu SMP Wed Apr 16 08:29:56 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux
2. wifi 硬件型号 Intel AX211
bash
lspci -nn | grep -i net
00:14.3 Network controller [0280]: Intel Corporation Device [8086:51f1] (rev 01)
02:00.0 Ethernet controller [0200]: Intel Corporation Device [8086:15f3] (rev 03)
03:00.0 Ethernet controller [0200]: Intel Corporation Device [8086:15f3] (rev 03)
快速解决方法
1、 更新最新固件
bash
wget https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git/plain/iwlwifi-so-a0-hr-b0-77.ucode
cd linux-firmware/
覆盖之前wifi 固件
sudo cp iwlwifi-* /lib/firmware/
2、 驱动安装
bash
git clone https://git.kernel.org/pub/scm/linux/kernel/git/iwlwifi/backport-iwlwifi.git
cd backport-iwlwifi
失败处理之 修改为本系统当前版本 API接口
将下面代码差异diff 到backport-iwlwifi/backport-include/linux/timer.h
c
diff --git a/backport-include/linux/timer.h b/backport-include/linux/timer.h
index d4faec0a5..d8a661da9 100644
--- a/backport-include/linux/timer.h
+++ b/backport-include/linux/timer.h
@@ -3,6 +3,8 @@
#include_next <linux/timer.h>
+
+
#ifndef setup_deferrable_timer
/*
* The TIMER_DEFERRABLE flag has not been around since 3.0 so
@@ -67,6 +69,7 @@ static inline void timer_setup(struct timer_list *timer,
__TIMER_INITIALIZER(_function, 0, 0, 0)
#endif
+#if 0
#if LINUX_VERSION_IS_LESS(6,2,0)
static inline int timer_shutdown(struct timer_list *t)
{
@@ -79,6 +82,7 @@ static inline int timer_shutdown_sync(struct timer_list *t)
}
#endif
+#endif
/* This was backported to 4.19.312 and 5,4,274, but we do not support such high minor numbers use 255 instead. */
#if LINUX_VERSION_IS_LESS(6,1,84) && \
!LINUX_VERSION_IN_RANGE(4,19,255, 4,20,0) && \
@@ -91,6 +95,7 @@ static inline int timer_delete_sync(struct timer_list *timer)
}
#endif /* < 6.1.84 */
+#if 0
#if LINUX_VERSION_IS_LESS(6,2,0)
static inline int timer_delete(struct timer_list *timer)
{
@@ -98,6 +103,33 @@ static inline int timer_delete(struct timer_list *timer)
}
#endif
+
+#endif
+
+#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 15, 0)
+
+static inline int timer_shutdown(struct timer_list *t)
+{
+ del_timer(t);
+ return 0;
+}
+
+static inline int timer_shutdown_sync(struct timer_list *t)
+{
+ del_timer_sync(t);
+ return 0;
+}
+
+static inline int timer_delete(struct timer_list *timer)
+{
+ del_timer(timer);
+ return 0;
+}
+
+#endif /* < 5.15 */
+
+
+
#ifndef timer_container_of
#define timer_container_of from_timer
#endif
安装驱动
bash
make defconfig-iwlwifi-public
sudo make install
bash
重启电脑
reboot
重启电脑大工搞成
