web-dev-qa-db-ja.com

Linuxブート-カーネルが新しいフレームバッファーモードに切り替わって出力をクリアするのを停止します

私は(Ubuntu 12.04 LTSに基づく)組み込みシステムに取り組んでおり、そのカーネルをカスタマイズしています。 upstartmountallplymouthに問題があります。解決できないことは何もないと思いますが、本当の問題は、カーネル(またはplymouth)が起動プロセスの途中でビデオモードを変更するため、何が起こっているのかを正しく診断できないことです。これにより、ログの行全体が完全に消去され、カーネルの設定ミスのデバッグが防止されます。

私のGrub2設定は問題ないようです:

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

GRUB_GFXMODE=1024x768x32
GRUB_GFXPAYLOAD_LINUX=keep

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)

そして、これが私のカーネル構成の関連部分です:

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

他のすべてのカスタム/ストックカーネルは、そのGrub2構成で正常に起動します。私が欲しいのは、起動ロゴからログインプロンプトまで、単一のコンソール(1つの画面解像度を保持)でのメッセージの単一のフローです。これを達成するために私が何を微調整しなければならないか誰かが知っていますか?

2
Avio

ようやく私は妥当なframebuffer構成に到達したようです。これらは私のカーネル内の関連する設定です.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

これは、古い構成と新しい構成の間のdiffです。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

この構成は、Knoppixのようなブート出力を生成します。ログインプロンプトが表示される直前に誰が、または何が画面をクリアするのかはまだわかりませんが、今のところ非常に満足しています。犯人を特定できれば、この回答を更新します。

編集:(2つの)犯人を見つけました。

何時間もグーグルした後、私は このスレッドこの質問 で解決策を見つけました。この手順は、 ここ でも説明されているように、Ubuntu 12.04.1 LTSで機能しますが、他のディストリビューションでもそれほど違いはありません。

まず、console=tty1GRUB_CMDLINE_LINUXを追加します(noplymouthとその役に立たないスプラッシュ画面を禁止するためにplymouthを追加することもお勧めします)。

#> Sudo vi /etc/default/grub

GRUB_CMDLINE_LINUX="console=tty1 noplymouth"

これにより、カーネルログがtty1ではなくtty7に出力され、ログインプロンプトの前にttyスイッチが回避されます。

次に、/etc/initに移動し、tty1.conftty2.conftty3.conftty4.conftty5.conftty6.confの1つ以上を編集します。またはconsole.confgettyコマンドに--noclearオプションを追加してすべて編集しました。たとえば、tty1.confを編集します。

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

交換する必要があります:

respawn
exec /sbin/getty -8 38400 tty1

と:

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

これで、システムをクリアせずに1つのttyで起動する必要があります。

1
Avio