On 19.01.21 09:30, Ard Biesheuvel wrote:
On Tue, 19 Jan 2021 at 05:54, Dong Wei Dong.Wei@arm.com wrote:
There is also the SPCR table https://docs.microsoft.com/en-us/windows-hardware/drivers/serports/serial-po... This is the primary serial console
One of the issues we still have not fixed in Linux is the inconsistency in interpretation of what 'serial console' actually means.
On Windows, the serial console is a low-level admin interface that may be exposed in addition to the full blown graphical user interface, which is always available. The SPCR describes how this admin interface is exposed, but does not affect what happens on the GUI.
In Linux, the console *is* the primary interface, either graphical or serial. Currently, the mere presence of a SPCR is taken as an indication that only the serial console should be enabled; for this reason, the UEFI ports we have for platforms with PCIe expansion carry a driver that removes the SPCR again if UEFI detects the presence of a graphical interface.
Unfortunately, this is not something we can easily change without breaking existing systems. Note that annotating device objects in the DSDT is probably not the right approach here, given that this requires the AML interpreter to be up and running before we can decide where the console lives.
As Heinrich points out, we have a similar problem today when it comes to the graphical interface on DT systems, i.e., it is not clear how to convey that the user expects the interaction with the system to occur via the graphical UI and not via a serial port. For a bootloader such as u-boot, it should be fairly easy to suppress the stdout-path if u-boot itself is running on the graphical display, but it would be better to communicate the presence of this GUI *in addition to* a serial port serving as a console.
In U-Boot you can use the serial console and keyboard/video in parallel.
It is not defined how we should decide which of the consoles shall be used for the Linux kernel messages and rescue console.
Even if you detect a monitor via the EDID I2C interface you would not be able to tell if the user is sitting in front of the system or remote controlling via the serial port.
Furthermore GRUB interferes with the console. I had to set
GRUB_TERMINAL_OUTPUT="console"
to get serial output on a system without a monitor attached.
Best regards
Heinrich