Linux 启动 - 停止内核切换到新的帧缓冲模式清除输出

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

看来我终于找到了一个合理的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类似 的启动输出。我仍然不明白是谁或什么在登录提示出现之前清除了屏幕,但目前我对此很满意。如果我能找出罪魁祸首,我会更新此答案。

编辑:找到了(两名)罪魁祸首。

经过几个小时的谷歌搜索,我找到了解决方案此主题这个问题.此程序适用于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.conf或。我编辑了它们全部添加tty5.conftty6.confconsole.conf--noclear选项getty。例如,编辑tty1.conf

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

你必须更换:

respawn
exec /sbin/getty -8 38400 tty1

和:

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

就这样,现在您的系统应该可以单独启动tty而无需清除它。

答案2

在启动过程尽早分离虚拟控制台。

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

$console_index->​​0,1,2 复制代码

echo 0 > /sys/class/vtconsole/vtcon0/bind 用于 /dev/tty0

echo 0 > /sys/class/vtconsole/vtcon1/bind 用于 /dev/tty1

相关内容