Inicialização do Linux - interrompe a troca do kernel para uma nova saída de limpeza do modo framebuffer

2

Estou trabalhando em um sistema embarcado (baseado em Ubuntu 12.04 LTS ) e estou personalizando seu kernel. Estou tendo algum problema com upstart , mountall e plymouth . Nada insolúvel, suponho, mas o verdadeiro problema é que não consigo diagnosticar adequadamente o que está acontecendo porque o kernel (ou talvez plymouth ) altera o modo de vídeo no meio do processo de inicialização. Isso limpa completamente linhas inteiras de log e impede qualquer depuração de configurações incorretas do kernel.

Meu Grub2 config parece estar ok com:

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

GRUB_GFXMODE=1024x768x32
GRUB_GFXPAYLOAD_LINUX=keep

Aqui está uma saída relevante 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)

E aqui está a parte relevante da configuração do meu 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 os demais boot de kernel personalizado / estoque com esse Grub2 config. O que eu gostaria de ter é um fluxo único de mensagens em um único console (mantendo uma resolução de tela) desde o logotipo de inicialização até o prompt de login. Alguém sabe o que eu tenho que ajustar para conseguir isso?

    
por Avio 27.09.2012 / 16:52

1 resposta

1

Parece que finalmente cheguei a uma configuração razoável de framebuffer . Estas são as configurações relevantes dentro do meu 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

e este é o diff entre a configuração antiga e a nova 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

Essa configuração produz uma saída de inicialização semelhante a Knoppix . Eu ainda não entendo quem ou o que limpa a tela antes que o prompt de login apareça, mas estou bastante satisfeito por enquanto. Vou atualizar esta resposta se conseguir identificar o culpado.

EDIT: encontrou o (dois) culpado (s).

Após horas de pesquisa, encontrei a solução em este tópico e esta questão . Este procedimento funciona para Ubuntu 12.04.1 LTS como também descrito aqui , mas não deve diferir muito para outras distribuições.

Primeiro, adicione console=tty1 ao seu GRUB_CMDLINE_LINUX (também sugiro adicionar noplymouth para inibir o plymouth e seu splashscreen inútil).

#> sudo vi /etc/default/grub

GRUB_CMDLINE_LINUX="console=tty1 noplymouth"

Isso força o log do kernel a ser impresso em tty1 em vez de tty7 e evita a opção tty antes do prompt de login.

Em seguida, basta acessar /etc/init e editar um ou mais tty1.conf , tty2.conf , tty3.conf , tty4.conf , tty5.conf , tty6.conf ou console.conf . Eu os editei adicionando a opção --noclear ao comando getty . Por exemplo, editando tty1.conf :

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

você terá que substituir:

respawn
exec /sbin/getty -8 38400 tty1

com:

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

Isso é tudo, agora seu sistema deve inicializar em um único tty sem limpá-lo.

    
por 01.10.2012 / 17:37