先说结论:如果你手里的海光GM9-5602整机装完银河麒麟V11后,开机自检正常、硬盘灯在闪、键盘也能响应,但屏幕就是一片黑,连个光标都看不见,那大概率是显卡驱动和内核的KMS模式设置打架了。第一步不用重装,也不用进什么救援模式,只要在GRUB启动菜单里按一下e,找到linux开头的那一行,在末尾加上nomodeset,再按F10或Ctrl+X启动,基本就能进系统。这个操作我前后在信创项目里试了不下十次,成功率非常高,属于典型的一步修复。
我在第一次遇到这个黑屏时,差点被折腾到怀疑人生。当时是给一台新到的海光GM9-5602台式机装银河麒麟V11,U盘安装走得顺风顺水,分区、复制文件、重启,一切看起来都完美。结果重启之后,屏幕从开机LOGO开始就一直黑着,没有鼠标指针,没有登录框,只有主机电源键亮着,风扇呼呼转。我一开始判断可能是安装没写好引导,果断重装了一遍,结果依旧黑屏。后来无意中按了Ctrl+Alt+F2,发现能跳到字符终端,这才确认系统内核其实已经跑起来了,只是图形界面没有输出到显示器上。
1. 问题背景与根因分析
1.1 现象描述:安装成功却卡在最后一步
海光GM9-5602是当前国产化整机里很常见的一颗x86处理器,兼容性好、配套主板方案成熟,照理说装银河麒麟V11不应该出这种幺蛾子。但现实就是,越是在常规平台上看起来稳的组合,越容易在显示输出这种细节上翻车。黑屏的表现也很有迷惑性:系统自检能过,屏幕会黑一下然后彻底无信号;硬盘指示偶尔闪一下,说明系统在读写;键盘上的NumLock灯还可以控制,说明系统没死。这种状态下新手很容易把它当成“安装失败”去重装,我见过不少同行在这上面反复折腾一下午,最后才发现只是显示驱动没加载起来。
如果你遇到黑屏,建议先做三个测试:第一,按Ctrl+Alt+F2看能不能进tty;第二,按Ctrl+Alt+Delete看能不能触发重启;第三,耐心等三分钟再动键盘,有时候内核在后台反复重试驱动模块,需要一段时间。只要前面任一测试有响应,就说明系统和键盘工作正常,问题大概率出在显卡模式设置上,而不是系统根本没装好。
1.2 为什么会黑屏:内核模式设置与显示驱动的那点事
Linux系统在启动图形界面前,内核会做一件叫“Kernel Mode Setting”的事情,简称KMS。这个过程由显卡驱动模块接管,模块会初始化显存、探测显示器接口、设置分辨率、启动输出通道。系统里常见的驱动模块比如amdgpu、radeon、i915、nouveau,如果加载的模块跟当前硬件不兼容,或者驱动的初始化顺序和固件交互有问题,KMS就会失败。内核发现设备初始化失败后,会放弃把画面输出到屏幕,于是你就只能对着黑屏发呆。
信创平台上这类问题尤其容易碰到。一方面,整机制造商搭配的显卡未必是发行版默认驱动能完美覆盖的型号;另一方面,银河麒麟V11的内核版本较新,而很多显卡的适配驱动还停留在厂商提供的旧版本,两者一冲突,KMS就崩了。nomodeset参数的出现,就是为了解决这一类问题。它告诉内核“不要碰显卡的模式设置”,把显示初始化工作交回给BIOS或UEFI固件,内核用最基础的framebuffer把画面输出出来。这个操作不属于修复驱动,而是绕开故障点,先让系统能见到图形界面,再腾出手来装正确的驱动。
我打个比方:KMS正常工作时,相当于你请了一个专业电工帮你接家里的电线。现在这个电工一上门就捅短路了,你与其反复换人,不如先把总闸拉掉,自己用蜡烛照明把桌面整理好,然后再决定是再请电工还是自己学接线。nomodeset就是那根蜡烛,虽然光线暗一点,但至少能让你看到东西。
2. 一步修复:GRUB加参数进入系统
2.1 操作前准备:先确认你能进GRUB菜单
做这个修复的前提,是你得先看到GRUB启动菜单。银河麒麟V11默认的GRUB配置往往不会给用户留出倒计时,装完系统重启后直接就进系统了,黑屏状态下你根本没有机会按e。所以你要先学会如何把GRUB菜单叫出来。
我常用的方法是:重启电脑,在主板LOGO消失后、系统开始加载内核之前,快速并有节奏地连按Shift键。按住不放也行,如果机器是UEFI启动,通常有效;如果是传统BIOS启动,可能需要按Esc。注意这两个键可以都试,不用怕按错,反正最多就是重新进一次黑屏而已。如果连按十几次都没有菜单出现,那就需要进BIOS关闭“快速启动”,或者检查启动模式是不是被设置成跳过GRUB了。
还有一个小技巧值得注意:有些机器开机速度非常快,你还没反应过来,GRUB已经过了。这时候可以把显示器切换到另一个输入源,然后再开机,屏幕上能多给你零点几秒的缓冲。我测试下来,这个方法对部分显示模式切换迟钝的电脑确实有用。
一旦GRUB菜单出现,你会看到几个启动项,比如“银河麒麟”或者“Ubuntu”(取决于系统基于哪个发行版做二次定制),一般还会有高级选项子菜单。用上下方向键选中默认启动项,然后按字母e,就能进入启动命令编辑界面。如果按e没反应,可能是你的键盘布局在GRUB阶段没被识别,换一个USB口再试,或者检查BIOS里USB Legacy Support是否开启。
2.2 核心动作:编辑linux启动行加nomodeset
进入GRUB的编辑界面后,你会看到一屏密密麻麻的文本,类似这样(实际内容根据版本略有差异):
setparams ' 银河麒麟 Linux' load_video insmod gzio insmod part_msdos insmod ext2 ... linux /boot/vmlinuz-xxx-generic root=UUID=xxx ro quiet splash initrd /boot/initrd.img-xxx-generic盯住以linux开头的那一行,别碰initrd行。这一行的后半部分通常包含ro、quiet、splash这几个参数,它们的作用分别是只读挂载根文件系统、静默模式、显示启动动画。我们要做的就是把光标用方向键移到这一行的末尾,先敲一个空格,再输入:
nomodeset整行最终看起来是这样:
linux /boot/vmlinuz-xxx-generic root=UUID=xxx ro quiet splash nomodeset如果你担心后面的字体/分辨率问题,也可以把quiet splash改成nomodeset,效果一样。改完之后,按F10或者Ctrl+X即可启动。不同版本GRUB识别快捷键有差异,我一般先按F10,没反应再按Ctrl+X,两个都试不算多余。
理论上,这次启动你应该能看到图形登录界面,或者至少能看到一个鼠标光标。如果加nomodeset后依旧黑屏,不要慌,可以再试以下替代参数,每试一次重启一次,直到屏幕有反应:
| 参数 | 适用场景 |
|---|---|
nomodeset | 通用选项,对多数显卡有效 |
amdgpu.modeset=0 | AMD Radeon系列显卡(含部分国产卡) |
radeon.modeset=0 | 老一代AMD/ATI显卡 |
nouveau.modeset=0 | NVIDIA显卡,禁用nouveau开源驱动 |
这三个参数的作用逻辑和nomodeset类似,都是跳过对应驱动的模式设置阶段。不过在实际信创设备里,我遇到的90%都是nomodeset一步解决,所以它始终是第一优先级。
2.3 永久生效:把参数写进grub配置文件
通过GRUB编辑加的nomodeset只对本次启动生效,下次重启又会黑屏。所以进了桌面之后,第一件事就是把参数写进GRUB配置文件,让它永久生效。
打开终端,先备份一下原配置文件,别嫌多此一举,改错了还能回滚:
sudo cp /etc/default/grub /etc/default/grub.bak然后用你习惯的编辑器打开:
sudo nano /etc/default/grub找到这一行:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"把它改成:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash nomodeset"如果你不想看开机画面,也可以只写nomodeset,但我觉得保留原参数更安全,至少不会因为删掉quiet导致一堆内核日志刷屏,吓到旁边的同事。保存退出后,执行:
sudo update-grub看到输出里有generating grub configuration file且没有报错,就说明配置已经重新写入。再重启试一下,这次不用按键,应该能直接进入图形界面。
有一点必须提醒你:nomodeset只是权宜之计,它会让显卡以基础兼容模式工作,你可能会发现分辨率最高只有1024x768,窗口拖动不流畅,甚至某些图形应用报错。等系统正常后,建议安装对应的适配驱动。驱动安装好以后,再回来把nomodeset从/etc/default/grub里删掉,执行update-grub重启,让显卡驱动接管硬件。很多人忽略了“删除参数”这一步,结果装了一堆驱动却始终不生效,图形性能一直上不去。
3. 其他常见黑屏诱因与排查顺序
3.1 不只是显卡:遇到黑屏后先用这套流程扫一遍
nomodeset虽然能解决大部分黑屏,但并不是万能的。有些时候你折腾半天参数,最后发现是显示器线插错了口,那就尴尬了。为了避免走弯路,我给自己定了一个排查顺序。
第一,先看显示器信号源。不要想当然以为插上就自动识别,我遇到过多次DP线和HDMI线同时接着不同显示器或者不同主板接口的情况,系统默认输出了错误的接口。你先在显示器菜单里切换到物理信号线对应的输入源,然后再重启一次。这一步成本最低,但经常被忽略。
第二,检查BIOS里的主显示设备。很多国产主板不止有一个显示输出口,有的板载核显输出,有的通过独显输出。如果你把显示器接在第一个接口上,而BIOS默认从第二个接口初始化显示,那就会黑屏。开机按Del或F2进BIOS,找到类似Primary Display、Init Display First、VGA Priority的选项,设置成你实际接显卡的那个槽位。
第三,确认UEFI/CSM设置。如果机器是用传统Legacy模式装的系统,但BIOS里只开了UEFI,引导阶段就黑屏直接卡死;反过来也会出现GRUB菜单能看但进系统后黑屏的情况。建议在安装前就统一用UEFI模式,并把CSM Support设为开启,兼容性最好。
第四,再看内核日志。如果硬件检查都做了还是黑屏,那就切到tty看日志。黑屏状态下按Ctrl+Alt+F2,登录后执行:
journalctl -b -p err | tail -n 50重点找包含drm、gpu、firmware、failed的报错条目。比如我看到过drm:amdgpu_init [amdgpu] *ERROR* amdgpu_display_verify_cursor: 3这种内容,基本就能确定是图形加速没起来。日志会告诉你更精确的方向,而不是让你瞎猜参数。
3.2 针对海光GM9-5602平台的补充调整
海光GM9-5602采用x86架构,所以很多原生的Linux排障思路都能直接套用。但有几个细节是这类平台特有的。
首先是内存映射和PCIe地址问题。部分国产整机默认没有开启Above 4G Decoding,这个选项如果关闭,显卡显存映射会被限制在低地址,导致驱动初始化异常。进BIOS找到Above 4G Decoding,把它设为Enabled。同时如果你看到Re-Size BAR Support选项,也可以一并打开。这两个选项对新一代显卡特别重要,尤其是显存比较大的型号,改了之后黑屏概率明显降低。
其次是显卡驱动模块的黑名单管理。有些国产显卡厂商会要求禁用开源驱动模块,避免它们和闭源驱动抢设备。你可以在/etc/modprobe.d/下新建一个配置文件,比如:
sudo nano /etc/modprobe.d/blacklist-gpu.conf内容写:
blacklist amdgpu或者根据实际厂商模块名写。需要说明的是,这步操作要在你能进系统之后做,而且只有当你已经安装好厂商闭源驱动时才有意义。如果闭源驱动还没装,禁用了开源驱动反而更容易黑屏。
最后是核显/独显切换。海光GM9-5602整机一般不带核显,但有些主板自带的显示输出芯片会干扰。如果你发现加参数之后偶尔能进系统、偶尔又黑屏,可以试试在BIOS里把IGPU Multi-Monitor关闭,强制只输出独显。这一类选项在中老年主板上叫法五花八门,但大致意思都差不多。
4. 日常信创装机避坑清单
4.1 装机前的BIOS设置要点
如果你还没开始装系统,那就赚到了。以下这些BIOS设置先做对,后面能少踩很多坑。
第一,统一启动模式。我建议所有信创x86机器都使用UEFI启动,分区表选GPT。因为银河麒麟V11默认UEFI支持情况最好,Legacy虽然能用,但后续在驱动签名、安全启动兼容上会多出很多麻烦。如果旧机器只支持Legacy,那就保持Legacy,但装系统的时候启动U盘也要用Legacy模式制作,否则引导会错位。
第二,关闭快速启动。快速启动会让GRUB菜单一闪而过,导致你无法进入编辑界面。对于普通用户来说,少两秒开机时间远比“出问题好排查”次要。
第三,根据显卡类型调整CSM。如果你用的显卡是比较老的型号,可以在BIOS里打开CSM,让UEFI固件以传统兼容方式初始化显卡。如果显卡本身很新,建议保持纯UEFI模式,反而更稳。关键是,每次改完CSM后,都建议重启一次,看能否正常显示,再安装系统。
第四,防范Power Supply和PCIe Lane不够的问题。这不是开玩笑,有些整机的电源适配器功率不够,插上高性能显卡后,启动瞬间电压跌落导致黑屏。如果你发现一台新机器什么都不装能亮,一插显卡就黑屏,先量一下电源额定功率是否满足整机需求。
4.2 驱动安装优先级与验证方法
进系统后不要急着开浏览器瞎逛,先解决显卡驱动。常规流程是:
lspci -nn | grep -i vga把输出里的设备编号记下来,对照显卡厂商和芯片型号。接着查看银河麒麟软件源里推荐的驱动包:
ubuntu-drivers devices如果列出了recommended项,直接安装。如果没有合适项,就去厂商官网下载适配驱动。下载驱动时注意两点:一是选择匹配银河麒麟V11内核版本的包,二是安装顺序必须先卸载掉开源驱动模块,再装闭源驱动,否则容易冲突。
装完驱动后,不要急着验证。先执行:
sudo modprobe -r 旧模块名 sudo modprobe 新模块名然后再查内核模块状态:
lsmod | grep 驱动模块名最后重启一次,检查分辨率是否能自动达到显示器的原生数值。如果分辨率正确且没有花屏,基本就大功告成。如果分辨率还是被锁定在nomodeset状态,记得把/etc/default/grub里的nomodeset删掉,执行update-grub再重启。否则驱动再正常,也会被视为“未初始化”而不被使用。
4.3 可以在别的平台照抄吗
经常有人问:我那是飞腾CPU或者鲲鹏CPU,能直接用nomodeset吗?答案是不一定。飞腾、鲲鹏采用的是ARM架构,GRUB和内核加载机制虽然相似,但显卡固件交互方式不同。ARM平台的黑屏问题更多出在内核设备树、ACP表格或者引导程序对显示设备的描述缺失,盲目加nomodeset可能不起作用,甚至导致无法启动。如果是兆芯、海光这类x86平台,那放心照抄,通用性很高。
另外,不同发行版的刷新GRUB命令有差别。银河麒麟V11走的是Debian/Ubuntu路线,命令是update-grub。如果你以后在Fedora或基于RedHat的发行版上遇到类似问题,第一步可以在GRUB编辑界面加nomodeset临时进系统,但永久写入的命令要变成:
sudo grub2-mkconfig -o /boot/grub2/grub.cfg配置文件路径也可能是/etc/default/grub,虽然相同,但千万别把update-grub用错地方,否则配置没生效,重启又黑屏,你会以为方法不通用而放弃正确方向。
最后再分享一个我个人的操作习惯:信创机上装完任何Linux系统,我不是先去改hostname、配IP,而是第一时间就确认GRUB参数里有没有nomodeset。如果机器能正常进桌面,我会把这个参数额外加进去,再顺手装驱动,最后删掉参数再重启验证。如果这一连串流程走完都还黑屏,说明问题根本不是KMS,而是硬件配置或显示器链路的问题,这时候我会立刻转去查BIOS和线材,绝不恋战。这样做的好处是,你永远只在一个层面排查,不会像我早期那样一边怀疑驱动、一边怀疑安装镜像、一边怀疑主板,最后全乱套。这个方法帮我少加了很多次班,也建议你试一试。