在麒麟操作系统上排查显示异常、GPU加速失效或多屏输出失败的问题时,首要且最关键的一步,就是准确判断当前系统到底在使用哪个显卡驱动。你可能遇到过这样的情况:系统明明识别出了显卡硬件,但3D渲染就是跑不起来,或者高分辨率输出始终无法点亮。这背后大概率是驱动未正确绑定,或者加载了错误的模块——比如本应使用nvidia驱动,却误加载了开源的nouveau。这时候,必须直接从PCI设备层读取内核实际启用的驱动名称,而不是依赖图形界面那些模模糊糊的提示,那些信息有时确实不靠谱。

用lspci -k直接查看PCI设备绑定的驱动名
这一步堪称“硬核查询”。lspci -k读取的是内核PCI子系统实时维护的设备绑定关系,不经过Xorg层,也不依赖任何用户态工具,结果权威且无法绕过。
打开终端,执行:lspci -k | grep -A 3 -B 1 "VGA|3D"
在输出中找到包含“Kernel driver in use:”的那一行,紧随其后的字符串就是当前生效的驱动名称——可能是nvidia、i915、amdgpu,也可能是国产GPU的jm7201。需要注意:如果该行压根未出现,或者只显示了“Kernel modules: nouveau, nvidia”却没有“in use”字段,说明驱动根本没激活,显卡处于UNCLAIMED状态,也就是未被任何驱动接管。
万一输出比较杂乱,或者匹配不到VGA的关键词,可以换用更精准的命令:lspci -vnn | grep -A 12 "VGA compatible controller",然后手动在输出中查找“Kernel driver in use”字段。这里有一个关键判断:如果该字段为空或者根本不存在,意味着显卡硬件没有被任何驱动接管。后续所有关于驱动版本的查询,都建立在空中楼阁上,毫无意义。
用sudo lshw -C display交叉验证驱动名
这个命令从设备树中提取结构化信息,能同时显示产品型号与configuration中声明的driver。其主要作用是反向验证lspci的结果是否可信。
执行:sudo lshw -C display
在输出中找到“configuration”段落,查找driver=xxx字样,例如driver=i915。这个值必须与上一步lspci -k的查询结果完全一致。如果不一致,说明存在驱动冲突或者模块加载顺序异常,这是需要警惕的信号。
如果这里显示driver=none,或者整个configuration段落缺失,说明内核压根没给这个GPU分配驱动模块。这时候,就需要进入下一步,通过lsmod检查对应模块是否真的加载了。
通过lsmod确认驱动模块是否真实载入内存
即使lspci和lshw都显示了一个驱动名,也还不能完全放心。如果对应的内核模块没有载入内存,显卡依然无法工作。这一步验证的是模块的运行状态,是判断“驱动名是否真正生效”的最终依据。
操作很简单:根据前两步得到的驱动名(比如nvidia),执行:lsmod | grep ^nvidia
如果不太确定驱动名,可以先用更宽泛的匹配:lsmod | grep -E "(i915|nvidia|amdgpu|nouveau|jm7201)",把常见的GPU驱动模块都筛选一遍。
只要输出中包含模块名、大小以及使用计数(比如nvidia 45645824 117),就说明驱动模块已经成功加载并被引用了。如果grep之后没有任何输出,那就意味着模块虽被识别但并未载入——此时需要手动执行sudo modprobe 驱动名尝试加载,或者回头检查一下驱动包是否安装完整。
