Arranque de Linux: detiene el cambio del kernel a un nuevo modo framebuffer borrando la salida

Arranque de Linux: detiene el cambio del kernel a un nuevo modo framebuffer borrando la salida

Estoy trabajando en un sistema integrado (basado en Ubuntu 12.04 LTS) y estoy personalizando su kernel. Tengo algún problema upstartcon mountally plymouth. Supongo que no hay nada irresoluble, pero el verdadero problema es que no puedo diagnosticar adecuadamente lo que está pasando porque el kernel (o tal vez plymouth) cambia el modo de video en medio del proceso de arranque. Esto borra por completo líneas enteras de registro y evita cualquier depuración de configuraciones erróneas del kernel.

Mi Grub2configuración parece estar bien con:

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

GRUB_GFXMODE=1024x768x32
GRUB_GFXPAYLOAD_LINUX=keep

Aquí hay algunos resultados relevantes de 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)

Y aquí está la parte relevante de la configuración de mi kernel:

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

Todos los demás kernels personalizados/stock arrancan bien con esa Grub2configuración. Lo que me gustaría tener es un flujo único de mensajes en una sola consola (conservando una resolución de pantalla) desde el logotipo de inicio hasta el mensaje de inicio de sesión. ¿Alguien sabe qué tengo que modificar para lograr esto?

Respuesta1

Parece que finalmente he llegado a una framebufferconfiguración razonable. Estas son las configuraciones relevantes dentro de mi 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

y esta es la diffdiferencia entre la configuración antigua y la nueva framebuffer:

#> 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

Esta configuración produce una Knoppixsalida de arranque similar a -. Todavía no entiendo quién o qué borra la pantalla justo antes de que aparezca el mensaje de inicio de sesión, pero por ahora estoy bastante satisfecho. Actualizaré esta respuesta si puedo identificar al culpable.

EDITAR: encontré a los (dos) culpables.

Después de horas de buscar en Google, encontré la solución eneste hiloyesta pregunta. Este procedimiento funciona Ubuntu 12.04.1 LTScomo también se describeaquí, pero no debería diferir demasiado para otras distribuciones.

Primero, agregaconsole=tty1a tu GRUB_CMDLINE_LINUX(también sugiero agregarnoplymouthinhibir plymouthy su inútil protector de pantalla).

#> sudo vi /etc/default/grub

GRUB_CMDLINE_LINUX="console=tty1 noplymouth"

Esto obliga a imprimir el registro del kernel tty1en lugar de tty7y evita el ttycambio antes del mensaje de inicio de sesión.

Luego simplemente ingrese y edite uno /etc/inito más de tty1.conf, tty2.conf, tty3.conf, tty4.conf, tty5.confo . Los edité todos agregandotty6.confconsole.conf--noclearopción al gettycomando. Por ejemplo, editando tty1.conf:

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

tendrás que reemplazar:

respawn
exec /sbin/getty -8 38400 tty1

con:

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

Eso es todo, ahora su sistema debería iniciarse de una sola vez ttysin borrarlo.

Respuesta2

Desconecte la consola virtual al principio del proceso de inicio.

eco 0 > /sys/class/vtconsole/vtcon$console_index/bind

$console_index -> 0,1,2

eco 0 > /sys/class/vtconsole/vtcon0/bind para /dev/tty0

eco 0 > /sys/class/vtconsole/vtcon1/bind para /dev/tty1

información relacionada