I'm currently setting up a CUDA-Workstation that is running on Debian GNU/Linux.
The system is equipped with two nVidia GFX cards (for the CUDA stuff), and features an onboard VGA adapator.
In the end, the machine is going to live in a remote location and will be managed via IPMI, which means that I would like to have the onboard VGA as my primary display device (while the nVidia cards do feature a total of 8 DP/HDMI outputs, they are not going to be connected; the onboard VGA is not going to be connected either, but is captured by IPMI/BMC so I can access it via KVM-over-IP).
So what I need is the Linux framebuffer console to show up on the VGA.
Currently I'm facing two problems here:
onboard VGA only used in early boot
After setting the primary output device in the BIOS to "onboard" (from "dedicated gfx card"), the onboard VGA works nicely in the early boot phase: I can see POST, access the BIOS, handle the UEFI boot loader (grub2
in my case) and start the OS. Hooray!
After that however, the output freezes and I am left with the grub2-printout (and nothing else):
Booting Debian GNU/Linux
Loading Linux 6.1.0-5-amd64 ...
Loading initial ramdisk ...
And it stays like that until the system goes down.
This is only an output issue, the system boots up just fine (and I can ssh
into the machine and do whatever).
I can also use the attached USB keyboard to log in via the login on tty1
and issue commands there... but the screen stays frozen (so I don't see what I type and what the system answers)
I've tried other kernels (5.x, 6.x) and distros (like grml
, which uses isolinux instead of grub), but the problem persists:
- i can view the bootloader
- but as soon as the actual system starts, the output freezes
I've tried adding noplymouth
, textonly
, text
and vga=ask
to the kernel-cmdline, but to no avail...
dedicated GFX-card not showing boot messages with newer kernels
If I switch to using one of my dedicated GFX cards as the primary device (in the BIOS), things are slightly different.
With Debian/bullseye (current stable Debian release), using the dedicated GFX output works just fine. However, if I upgrade the kernel to 6.x (either via Debian/bullseye-backports; or by upgrading to Debian/bookworm (the upcoming stable release), I no longer see any boot messages or login screen.
Instead my screen only shows this:
[ 2.418707] xhci_hcd 0000:23:00.0: init 0000:23:00.0 fail, -16
[ 2.418805] xhci_hcd 0000:29:00.1: init 0000:29:00.1 fail, -16
[ 2.418861] xhci_hcd 0000:29:00.3: init 0000:29:00.3 fail, -16
/dev/nvme0n1p2: clean, 78970/122003456 files, 8917355/487997184 blocks
Also, I cannot switch to other terminals ((Ctrl+)Alt+F2). But again, keyboard input actually works (only the display is frozen).
I can switch between the working console and a non-working by booting into a linux-5.x kernel (working) resp. a linux-6.x kernel (broken).
While my system is equipped with 2 nVidia GFX cards, there are currently no dedicated (proprietary) drivers installed. So I see this behaviour with a pristine Debian main
installation.
However, in the end I will have to use Debian/bookworm (with the linux-6.x kernel), as i need the newest nVidia drivers to make use of the CUDA cards. (and before you ask: the problem persists if I install the proprietary drivers).
I cannot reproduce the problem on my Laptop (which runs Debian/sid - thus has a kernel 6.1.0-5-amd64; all tty work as expected) or on a freshly installed VM.
NOTE: There are other drawbacks to using the dedicated GFX card anyhow: I won't be able to access its output via IPMI/BMC once the machine is in the remote location. So this part of the problem is somewhat academic...
system setup
component | name |
---|---|
motherboard | ASUS Pro WS WRX80E-SAGE SE WIFI |
CPU | AMD Ryzen Threadripper PRO 5965WX |
memory | 132GB |
onboard VGA | ASPEED Technology, Inc. ASPEED Graphics Family (rev 41) |
dedicated GFX | 2* NVIDIA Corporation AD102 [GeForce RTX 4090] (rev a1) |
OS | Debian bullseye (fresh installation), resp bookworm (apt dist-upgrade ) from bullseye |
I conducted the tests right after doing a fresh minimal installation of Debian/bullseye, and then upgraded to Debian/bookworm.
No X-server or similar is installed. No proprietary drivers are installed.
diagnostic output
after installing the proprietary nvidia
drivers (which I did by now), here's some relevant system output:
# uname -a
Linux petrou 6.1.0-5-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.12-1 (2023-02-15) x86_64 GNU/Linux
# dmesg | egrep -i "(vga|console|efifb)"
[ 0.078684] Console: colour dummy device 80x25
[ 0.078873] printk: console [tty0] enabled
[ 1.888692] pci 0000:28:00.0: BAR 0: assigned to efifb
[ 1.903739] pci 0000:41:00.0: vgaarb: setting as boot VGA device
[ 1.903739] pci 0000:41:00.0: vgaarb: bridge control possible
[ 1.903739] pci 0000:41:00.0: vgaarb: VGA device added: decodes=io+mem,owns=none,locks=none
[ 1.903739] pci 0000:28:00.0: vgaarb: setting as boot VGA device (overriding previous)
[ 1.903739] pci 0000:28:00.0: vgaarb: bridge control possible
[ 1.903739] pci 0000:28:00.0: vgaarb: VGA device added: decodes=io+mem,owns=io+mem,locks=none
[ 1.903739] pci 0000:2b:00.0: vgaarb: bridge control possible
[ 1.903739] pci 0000:2b:00.0: vgaarb: VGA device added: decodes=io+mem,owns=none,locks=none
[ 1.903739] vgaarb: loaded
[ 2.144244] efifb: probing for efifb
[ 2.144245] pci 0000:28:00.0: BAR has moved, updating efifb address
[ 2.144247] efifb: cannot reserve video memory at 0x0
[ 2.144249] efifb: video memory @ 0x0 spans multiple EFI memory regions
[ 5.273136] systemd[1]: Started systemd-ask-password-console.path - Dispatch Password Requests to Console Directory Watch.
[ 5.277559] systemd[1]: Starting keyboard-setup.service - Set the console keyboard layout...
[ 5.315244] systemd[1]: Finished keyboard-setup.service - Set the console keyboard layout.
[ 5.521188] snd_hda_intel 0000:41:00.1: Handle vga_switcheroo audio client
[ 5.521370] snd_hda_intel 0000:2b:00.1: Handle vga_switcheroo audio client
[ 5.592959] nvidia 0000:41:00.0: vgaarb: changed VGA decodes: olddecodes=io+mem,decodes=none:owns=none
[ 5.639620] nvidia 0000:2b:00.0: vgaarb: changed VGA decodes: olddecodes=io+mem,decodes=none:owns=none
# lsmod | egrep -i "(vga|fb)"
# cat /proc/fb
# cat /etc/modprobe.d/blacklist-framebuffer.conf
cat: /etc/modprobe.d/blacklist-framebuffer.conf: No such file or directory
# find /etc/modprobe.d/ -not -type d -exec grep blacklist {} +
/etc/modprobe.d/nvidia-blacklists-nouveau.conf:blacklist nouveau
# lspci | grep -i vga
28:00.0 VGA compatible controller: ASPEED Technology, Inc. ASPEED Graphics Family (rev 41)
2b:00.0 VGA compatible controller: NVIDIA Corporation AD102 [GeForce RTX 4090] (rev a1)
41:00.0 VGA compatible controller: NVIDIA Corporation AD102 [GeForce RTX 4090] (rev a1)
# lspci -vvnn -s 28:00.0
28:00.0 VGA compatible controller [0300]: ASPEED Technology, Inc. ASPEED Graphics Family [1a03:2000] (rev 41) (prog-if 00 [VGA controller])
Subsystem: ASPEED Technology, Inc. ASPEED Graphics Family [1a03:2000]
Control: I/O+ Mem+ BusMaster- SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
Interrupt: pin A routed to IRQ 75
IOMMU group: 48
Region 2: I/O ports at 1000 [size=128]
Expansion ROM at 000c0000 [virtual] [disabled] [size=128K]
Capabilities: [40] Power Management version 3
Flags: PMEClk- DSI- D1+ D2+ AuxCurrent=375mA PME(D0+,D1+,D2+,D3hot+,D3cold+)
Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-
Capabilities: [50] MSI: Enable- Count=1/2 Maskable- 64bit+
Address: 0000000000000000 Data: 0000
Kernel modules: ast
So what is the question?
Well: How do I get a full console output for my terminal on my onboard VGA (or at least on the dedicated GFX card?)
less /etc/modprobe.d/blacklist-framebuffer.conf
?noplymouth
,textonly
,text
andvga=ask
to the kernel-cmdline" -- Huh? Where are the first three documented as valid Linux kernel parameters? Did you tryconsole=tty0
? Have you bothered to thoroughly review the boot log for "VGA" and "console" status messages (e.g. using the dmesg command)? Beside "console output", are you also expecting a login console, which is a completely different specification?dmesg
(and have now added that info to the "diagnostic output" section). i have not tried settingconsole=tty0
explicitely (but I think thedmesg
output hints that this is already the case anyhow).