Я работаю над встроенной системой (на основе 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
конфигурацией. Мне бы хотелось иметь единый поток сообщений на одной консоли (сохраняя одно разрешение экрана) от логотипа загрузки до приглашения на вход в систему. Кто-нибудь знает, что мне нужно настроить, чтобы добиться этого?
решение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
-подобный загрузочный вывод. Я все еще не понимаю, кто или что очищает экран прямо перед появлением приглашения на вход, но на данный момент я вполне удовлетворен. Я обновлю этот ответ, если смогу определить виновника.
EDIT: найдены (два) виновника(ов).
После нескольких часов гугления я нашел решение вэта темаиэтот вопрос. Эта процедура работает 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
без очистки.
решение2
Отключите виртуальную консоль на раннем этапе процесса загрузки.
эхо 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