Linux 부팅 - 출력을 지우는 새 프레임 버퍼 모드로 커널 전환을 중지합니다.

Linux 부팅 - 출력을 지우는 새 프레임 버퍼 모드로 커널 전환을 중지합니다.

저는 임베디드 시스템( 기반 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-like 부팅 출력을 생성합니다. 로그인 프롬프트가 나타나기 직전에 누가, 무엇을 해서 화면을 지웠는지 아직도 이해가 안 되지만, 지금은 꽤 만족스럽습니다. 범인을 정확히 찾아낼 수 있게 되면 이 답변을 업데이트하겠습니다.

편집: 범인 두 명을 찾았습니다.

몇 시간 동안 구글링을 한 끝에 해결책을 찾았습니다.이 스레드그리고이 질문. 이 절차는 Ubuntu 12.04.1 LTS설명된 대로 작동합니다.여기, 그러나 다른 배포판에서는 크게 다르지 않아야 합니다.

먼저 추가하세요.console=tty1GRUB_CMDLINE_LINUX(나는 또한 추가하는 것을 제안 합니다noplymouth금지 plymouth하고 쓸모없는 스플래시 화면).

#> sudo vi /etc/default/grub

GRUB_CMDLINE_LINUX="console=tty1 noplymouth"

이렇게 하면 로그인 프롬프트 이전에 스위치를 전환하는 tty1대신 커널 로그가 인쇄됩니다 .tty7tty

그런 다음 , , , , 또는 중 /etc/init하나 이상을 편집 하세요 . 다 추가해서 편집했어요tty1.conftty2.conftty3.conftty4.conftty5.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

부팅 프로세스 중에 초기에 가상 콘솔을 분리하십시오.

에코 0 > /sys/class/vtconsole/vtcon$console_index/bind

$console_index -> 0,1,2

echo 0 > /dev/tty0에 대한 /sys/class/vtconsole/vtcon0/bind

echo 0 > /dev/tty1에 대한 /sys/class/vtconsole/vtcon1/bind

관련 정보