Bug: 升级内核后有线网络无法使用

预备知识

1.R8169驱动和R8168驱动区别

R8169驱动是Linux内核自带的开源驱动,支持的硬件范围比较广,但是跟随内核一起发布更新,因此对于新发布的硬件支持不够及时。R8168驱动是Realtek官方提供的闭源驱动,对特定硬件进行了优化,稳定性更高,更新及时。

R8169驱动主要针对Realtek的地段或早期千兆以太网芯片,包括但不限于RTL8101/8102E,RTL8168/8111,RTl8411/8412等。

R8168驱动是Realtek官方为RTL8168系列(如RTL8168B/C/D/E/F等)开发的专用驱动,针对性更强。

因此R8169驱动和R8168驱动都可以支持RTL8168芯片。

2.内核编译配置

编译内核源码之前可以通过make menuconfig配置内核编译选项,也可以基于defconfig创建自己的内核配置,例如 my_x86_desktop_defconfig ,配置完毕后再make my_x86_desktop_defconfig加载自定义配置。

安装内核后,通过 /boot/config-$(uname -r) 文件可以查看当前版本内核的配置选项

一、Bug描述

将内核从4.19-7322升级到4.19-7326后发现有线连接无法使用

二、Bug分析

查看4.19-7322内核的编译配置,发现只有CONFIG_R8168=m,而没有CONFIG_R8169=m;

查看4.19-7326内核的编译配置,发现只有CONFIG_R8169=m,而没有CONFIG_R8168=m;

查找到当前系统中存在/etc/modprobe.d/balcklist-r8169.conf,说明系统禁用了R8169模块。

再根据Bug描述,很容易分析出"由于4.19-7326内核不支持R8168驱动,同时又禁用了R8169驱动,所以才导致有线连接无法使用"的结论。

三、Bug修复

编写deb包,在psotinst中加入如下逻辑:

bash 复制代码
#检查内核配置文件是否存在
CONFIG_FILE="/boot/config-$(uname -r)"
if [ ! -f "$CONFIG_FILE" ]; then
    exit 1
fi

#检查内核配置是否支持R8169驱动且不支持R8168驱动
if grep -q "^CONFIG_R8169=[ym]$" "$CONFIG_FILE" && ( grep -q "^CONFIG_R8168=n$" "$CONFIG_FILE" || ! grep -q "^CONFIG_R8168=" "$CONFIG_FILE" ); then
    #检查R8169驱动是否被加入黑名单
    if [ -f /etc/modprobe.d/blacklist_r8169.conf ]; then
        #删除R8169的黑名单配置文件
        rm -f /etc/modprobe.d/blacklist_r8169.conf
        echo "已删除 /etc/modprobe.d/blacklist_r8169.conf"
    fi
fi
相关推荐
小此方2 天前
「插曲:Git」企业规范篇:DevOps开发模型、Git Flow五类分支设计与测试/预发布/生产环境Bug修复及Hotfix紧急发布流程
git·bug·devops
中文英文-我选中文3 天前
FreeRTOS 玄学Bug:调换任务创建顺序,程序时而正常、时而死机(栈溢出内存踩踏深度复盘)
bug
Keven_114 天前
BUG:UVA116
算法·bug·图论
鬼手点金4 天前
opencode-隐私优先配置
服务器·前端·javascript·bug·openclaw
itmigrate5 天前
异步请求竞态,藏在页面渲染里的隐形bug
bug
今夕资源网6 天前
OmniVoice 今夕整合包 本地语音TTS断网可用 修复了一些BUG 优化生成速度 极速秒生成
bug·语音克隆·omnivoice·断网可用·本地语音tts·语音tts
烧烧的酒0.o10 天前
Codex桌面版更新后不能使用最新模型问题-排查修复总结
chatgpt·bug
sg_knight12 天前
ZCode Bug 定位实战:把报错丢给 ZCode,它是怎么修的
llm·bug·agent·ai编程·glm·智谱·zcode
轩轶子13 天前
Python CLI Todo:一次数据结构错误引发的 Bug
数据结构·python·bug
鬼手点金13 天前
Claude Code示范案例-修复 Bug 工作流
java·服务器·前端·javascript·bug·openclaw