Linux boot - остановить переключение ядра на новый режим очистки кадрового буфера

5167
Avio

Я работаю над встроенной системой (на основе Ubuntu 12.04 LTS) и настраиваю ее ядро. У меня возникли проблемы с upstart, mountallи plymouth. Полагаю, ничего неразрешимого, но настоящая проблема в том, что я не могу правильно диагностировать происходящее, потому что ядро ​​(или, может быть 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конфигом. Я хотел бы иметь единый поток сообщений на одной консоли (с сохранением одного разрешения экрана) от логотипа загрузки до приглашения к входу. Кто-нибудь знает, что я должен настроить, чтобы добиться этого?

2

1 ответ на вопрос

1
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похожий на вывод загрузки. Я до сих пор не понимаю, кто или что очищает экран непосредственно перед появлением приглашения на вход в систему, но сейчас я вполне доволен. Я обновлю этот ответ, если смогу точно определить виновника.

РЕДАКТИРОВАТЬ: обнаружил (два) виновного (ых).

После нескольких часов поисков я нашел решение в этой теме и в этом вопросе . Эта процедура работает Ubuntu 12.04.1 LTSтак же, как описано здесь, но она не должна сильно отличаться для других дистрибутивов.

Во-первых, добавьте console=tty1в свой GRUB_CMDLINE_LINUX(я также предлагаю добавить noplymouthзапретить plymouthи его бесполезный экран-заставку).

#> sudo vi /etc/default/grub  GRUB_CMDLINE_LINUX="console=tty1 noplymouth" 

Это вынуждает печатать журнал ядра tty1вместо tty7и избегать ttyпереключения перед приглашением входа в систему.

Тогда просто зайдите в /etc/initи редактировать один или несколько tty1.conf, tty2.conf, tty3.conf, tty4.conf, tty5.conf, tty6.confили console.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не очищая его.