Ich arbeite an einem eingebetteten System (basierend auf Ubuntu 12.04 LTS
) und passe seinen Kernel an. Ich habe ein Problem mit upstart
, mountall
und 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 Grub2
Konfiguration 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 Grub2
Konfiguration 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 diff
Unterschied zwischen der alten und der neuen framebuffer
Konfiguration:
#> 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 LTS
wie auch beschriebenHier, sollte sich bei anderen Verteilungen aber nicht allzu sehr unterscheiden.
Fügen Sie zunächst hinzuconsole=tty1
zu Ihrem GRUB_CMDLINE_LINUX
(ich schlage auch vor, hinzuzufügennoplymouth
zu hemmen plymouth
und sein nutzloser Begrüßungsbildschirm).
#> sudo vi /etc/default/grub
GRUB_CMDLINE_LINUX="console=tty1 noplymouth"
Dadurch wird das Kernelprotokoll ausgedruckt tty1
und der Wechsel vor der Anmeldeaufforderung tty7
vermieden .tty
Dann gehen Sie einfach in /etc/init
und bearbeiten Sie einen oder mehrere von tty1.conf
, tty2.conf
, tty3.conf
, tty4.conf
, tty5.conf
, tty6.conf
oder console.conf
. Ich habe sie alle bearbeitet und hinzugefügt--noclear
Option zum getty
Befehl. 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, tty
ohne 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