Linux-Boot - Stoppen Sie den Kernelwechsel in einen neuen Framebuffer-Modus und löschen Sie die Ausgabe

Linux-Boot - Stoppen Sie den Kernelwechsel in einen neuen Framebuffer-Modus und löschen Sie die Ausgabe

Ich arbeite an einem eingebetteten System (basierend auf Ubuntu 12.04 LTS) und passe seinen Kernel an. Ich habe ein Problem mit upstart, mountallund plymouth. Nichts Unlösbares, nehme ich an, aber das eigentliche Problem ist, dass ich nicht richtig diagnostizieren kann, was los ist, weil der Kernel (oder vielleicht plymouth) den Videomodus mitten im Startvorgang ändert. Dadurch werden ganze Protokollzeilen gelöscht und jegliches Debuggen von Kernel-Fehlkonfigurationen verhindert.

Meine Grub2Konfiguration scheint in Ordnung zu sein mit:

GRUB_CMDLINE_LINUX=""
GRUB_CMDLINE_LINUX_DEFAULT="acpi=force noplymouth"

GRUB_GFXMODE=1024x768x32
GRUB_GFXPAYLOAD_LINUX=keep

Hier sind einige relevante Ausgaben von lspci:

00:00.0 Host bridge: Intel Corporation Mobile 945GSE Express Memory Controller Hub (rev 03)
00:02.0 VGA compatible controller: Intel Corporation Mobile 945GSE Express Integrated Graphics Controller (rev 03)
00:02.1 Display controller: Intel Corporation Mobile 945GM/GMS/GME, 943/940GML Express Integrated Graphics Controller (rev 03)

Und hier ist der relevante Teil meiner Kernelkonfiguration:

CONFIG_AGP=y
CONFIG_AGP_INTEL=y
CONFIG_VGA_ARB=y
CONFIG_VGA_ARB_MAX_GPUS=16
CONFIG_DRM=y
CONFIG_DRM_KMS_HELPER=y
CONFIG_DRM_I915=y
CONFIG_DRM_I915_KMS=y
CONFIG_VIDEO_OUTPUT_CONTROL=y
CONFIG_FB=y
CONFIG_FB_BOOT_VESA_SUPPORT=y
CONFIG_FB_CFB_FILLRECT=y
CONFIG_FB_CFB_COPYAREA=y
CONFIG_FB_CFB_IMAGEBLIT=y
CONFIG_FB_MODE_HELPERS=y
CONFIG_FB_VESA=y
CONFIG_BACKLIGHT_LCD_SUPPORT=y
CONFIG_BACKLIGHT_CLASS_DEVICE=y
CONFIG_VGA_CONSOLE=y
CONFIG_VGACON_SOFT_SCROLLBACK=y
CONFIG_VGACON_SOFT_SCROLLBACK_SIZE=640
CONFIG_DUMMY_CONSOLE=y
CONFIG_FRAMEBUFFER_CONSOLE=y
CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y
CONFIG_FONT_8x8=y
CONFIG_FONT_8x16=y
CONFIG_LOGO=y
CONFIG_LOGO_LINUX_MONO=y
CONFIG_LOGO_LINUX_VGA16=y
CONFIG_LOGO_LINUX_CLUT224=y

Jeder andere benutzerdefinierte/Standard-Kernel bootet mit dieser Grub2Konfiguration problemlos. Was ich gerne hätte, ist ein einziger Nachrichtenfluss auf einer einzigen Konsole (unter Beibehaltung einer Bildschirmauflösung) vom Startlogo bis zur Anmeldeaufforderung. Weiß jemand, was ich optimieren muss, um dies zu erreichen?

Antwort1

Es scheint, dass ich endlich eine vernünftige Konfiguration gefunden habe framebuffer. Dies sind die relevanten Einstellungen in meinem Kernel .config:

CONFIG_AGP=y
CONFIG_AGP_INTEL=y
CONFIG_VGA_ARB=y
CONFIG_VGA_ARB_MAX_GPUS=16
CONFIG_VIDEO_OUTPUT_CONTROL=y
CONFIG_FB=y
CONFIG_FIRMWARE_EDID=y
CONFIG_FB_BOOT_VESA_SUPPORT=y
CONFIG_FB_CFB_FILLRECT=y
CONFIG_FB_CFB_COPYAREA=y
CONFIG_FB_CFB_IMAGEBLIT=y
CONFIG_FB_VESA=y
CONFIG_VGA_CONSOLE=y
CONFIG_VGACON_SOFT_SCROLLBACK=y
CONFIG_VGACON_SOFT_SCROLLBACK_SIZE=640
CONFIG_DUMMY_CONSOLE=y
CONFIG_FRAMEBUFFER_CONSOLE=y
CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y
CONFIG_FONT_8x8=y
CONFIG_FONT_8x16=y
CONFIG_LOGO=y
CONFIG_LOGO_LINUX_MONO=y
CONFIG_LOGO_LINUX_VGA16=y
CONFIG_LOGO_LINUX_CLUT224=y

und dies ist der diffUnterschied zwischen der alten und der neuen framebufferKonfiguration:

#> diff oldcfg.txt newcfg.txt
--- oldcfg.txt  2012-10-01 17:30:01.000000000 +0200
+++ newcfg.txt  2012-10-01 17:29:43.000000000 +0200
@@ -2,20 +2,14 @@
 CONFIG_AGP_INTEL=y
 CONFIG_VGA_ARB=y
 CONFIG_VGA_ARB_MAX_GPUS=16
-CONFIG_DRM=y
-CONFIG_DRM_KMS_HELPER=y
-CONFIG_DRM_I915=y
-CONFIG_DRM_I915_KMS=y
 CONFIG_VIDEO_OUTPUT_CONTROL=y
 CONFIG_FB=y
+CONFIG_FIRMWARE_EDID=y
 CONFIG_FB_BOOT_VESA_SUPPORT=y
 CONFIG_FB_CFB_FILLRECT=y
 CONFIG_FB_CFB_COPYAREA=y
 CONFIG_FB_CFB_IMAGEBLIT=y
-CONFIG_FB_MODE_HELPERS=y
 CONFIG_FB_VESA=y
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
 CONFIG_VGA_CONSOLE=y
 CONFIG_VGACON_SOFT_SCROLLBACK=y
 CONFIG_VGACON_SOFT_SCROLLBACK_SIZE=640

Diese Konfiguration erzeugt eine Knoppix-ähnliche Boot-Ausgabe. Ich verstehe immer noch nicht, wer oder was den Bildschirm löscht, kurz bevor die Anmeldeaufforderung erscheint, aber ich bin vorerst ziemlich zufrieden. Ich werde diese Antwort aktualisieren, wenn ich den Schuldigen ausfindig machen kann.

EDIT: habe den (die) Täter gefunden.

Nach stundenlangem Googeln fand ich die Lösung indieser ThreadUnddiese FrageDieses Verfahren funktioniert Ubuntu 12.04.1 LTSwie auch beschriebenHier, sollte sich bei anderen Verteilungen aber nicht allzu sehr unterscheiden.

Fügen Sie zunächst hinzuconsole=tty1zu Ihrem GRUB_CMDLINE_LINUX(ich schlage auch vor, hinzuzufügennoplymouthzu hemmen plymouthund sein nutzloser Begrüßungsbildschirm).

#> sudo vi /etc/default/grub

GRUB_CMDLINE_LINUX="console=tty1 noplymouth"

Dadurch wird das Kernelprotokoll ausgedruckt tty1und der Wechsel vor der Anmeldeaufforderung tty7vermieden .tty

Dann gehen Sie einfach in /etc/initund bearbeiten Sie einen oder mehrere von tty1.conf, tty2.conf, tty3.conf, tty4.conf, tty5.conf, tty6.confoder console.conf. Ich habe sie alle bearbeitet und hinzugefügt--noclearOption zum gettyBefehl. Zum Beispiel das Bearbeiten von tty1.conf:

#> sudo vi /etc/init/tty1.conf

Sie müssen Folgendes ersetzen:

respawn
exec /sbin/getty -8 38400 tty1

mit:

respawn
exec /sbin/getty -8 38400 --noclear tty1

Das ist alles, jetzt sollte Ihr System in einem einzigen Vorgang hochfahren, ttyohne es zu löschen.

Antwort2

Trennen Sie die virtuelle Konsole frühzeitig während des Startvorgangs.

echo 0 > /sys/klasse/vtconsole/vtcon$console_index/binden

$console_index -> 0,1,2

echo 0 > /sys/class/vtconsole/vtcon0/bind für /dev/tty0

echo 0 > /sys/class/vtconsole/vtcon1/bind für /dev/tty1

verwandte Informationen