我有一台运行我构建的 Linux From Scratch 系统的 Apple MacBook。这是一个最小的系统,只是启动到一个 bash 提示符,没有安装 X Window 系统。图形芯片是 Intel GMA 950,它使用 i915 驱动程序。以前,我让它启动到帧缓冲控制台;但是,前几天我调整了一些内核配置设置,现在帧缓冲区控制台似乎不再加载(尽管屏幕变黑然后在启动过程中重置)。
愚蠢的是,我没有为我正在工作的设置保存内核配置文件,尽管我确实打印了lsmod
该设置的命令,其中显示了加载了哪些内核模块:
Module Size Used by
ccm 20480 6
hid_generic 16384 0
isight_firmware 16384 0
usbhid 32768 0
i915 1343488 1
i2c_algo_bit 16384 1 i915
arc4 16384 2
fbcon 49152 70
bitblit 16384 1 fbcon
fbcon_rotate 16384 1 bitblit
fbcon_ccw 16384 1 fbcon_rotate
fbcon_ud 20480 1 fbcon_rotate
fbcon_cw 16384 1 fbcon_rotate
softcursor 16384 4 fbcon_ud,fbcon_cw,fbcon_ccw,bitblit
drm_kms_helper 114688 1 i915
ath9k 81920 0
cfbfillrect 16384 1 drm_kms_helper
ath9k_common 16384 1 ath9k
syscopyarea 16384 1 drm_kms_helper
cfbimgblt 16384 1 drm_kms_helper
ath9k_hw 389120 2 ath9k,ath9k_common
sysfillrect 16384 1 drm_kms_helper
sysimgblt 16384 1 drm_kms_helper
mac80211 405504 1 ath9k
fb_sys_fops 16384 1 drm_kms_helper
cfbcopyarea 16384 1 drm_kms_helper
drm 282624 3 i915,drm_kms_helper
ath 28672 3 ath9k_hw,ath9k,ath9k_common
pata_acpi 16384 0
intel_agp 16384 0
coretemp 16384 0
video 36864 1 i915
uhci_hcd 40960 0
pcspkr 16384 0
backlight 16384 2 video,i915
ehci_pci 16384 0
ehci_hcd 73728 1 ehci_pci
ata_piix 36864 0
rng_core 16384 0
intel_gtt 20480 2 intel_agp,i915
fb 65536 8 fbcon_ud,fbcon_cw,fbcon_ccw,bitblit,softcursor,i915,fbcon,drm_kms_helper
agpgart 32768 3 intel_agp,intel_gtt,drm
evdev 24576 0
fbdev 16384 2 fb,fbcon
mac_hid 16384 0
因此,您可以看到fbcon(它是帧缓冲区控制台的驱动程序)已加载。
但是,lsmod
较新的内核版本(未加载控制台)的输出如下:
Module Size Used by
hid_generic 12288 0
arc4 12288 2
i915 1314816 0
usbhid 28672 0
prime_numbers 12288 1 i915
i2c_algo_bit 12288 1 i915
drm_kms_helper 98304 1 i915
cfbfillrect 12288 1 drm_kms_helper
syscopyarea 12288 1 drm_kms_helper
cfbimgblt 12288 1 drm_kms_helper
pata_acpi 12288 0
sysfillrect 12288 1 drm_kms_helper
ath9k 73728 0
ath9k_common 12288 1 ath9k
ath9k_hw 368640 2 ath9k,ath9k_common
sysimgblt 12288 1 drm_kms_helper
fb_sys_fops 12288 1 drm_kms_helper
cfbcopyarea 12288 1 drm_kms_helper
mac80211 356352 1 ath9k
coretemp 12288 0
ata_piix 32768 0
ath 24576 3 ath9k_hw,ath9k,ath9k_common
drm 241664 3 i915,drm_kms_helper
uhci_hcd 36864 0
video 32768 1 i915
intel_agp 12288 0
pcspkr 12288 0
intel_gtt 16384 2 intel_agp,i915
fb 57344 2 i915,drm_kms_helper
ehci_pci 12288 0
ehci_hcd 65536 1 ehci_pci
agpgart 28672 3 intel_agp,intel_gtt,drm
rng_core 12288 0
fbdev 12288 1 fb
backlight 12288 2 video,i915
evdev 20480 0
mac_hid 12288 0
fb,fbdev,i915,drm,intel_agp都在那里,但fbcon不是。
有谁知道fbcon没有加载的可能原因?
编辑:(回答评论中的问题)
的输出grep CONFIG_FRAMEBUFFER_CONSOLE .config
是:
$ grep CONFIG_FRAMEBUFFER_CONSOLE .config
CONFIG_FRAMEBUFFER_CONSOLE=m
CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y
# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
fbcon
被配置为一个模块(就像在以前的设置中一样)。我相信第二行意味着它应该默认将 fbcon 设置为主显示设备。
更新:
我手动加载了模块,使用modprobe fbcon
它并且它工作 - 所有文本都出现在屏幕上。我仍然需要弄清楚为什么它没有在启动时加载,以及如何让它做到这一点。
另外,我跑cat $(readlink -f /sys/class/graphics/fb0/name)
并打印了inteldrmfb
. 因此,它似乎正在使用内置于 i915 Intel 驱动程序的帧缓冲区。
要发布我自己的问题的答案:
它不工作的原因是因为
fbcon
模块在引导期间没有被加载,即使它已经被构建和安装。立即运行modprobe fbcon
加载模块使控制台出现在我的屏幕上。我已经添加fbcon
到/etc/sysconfig/modules
它现在再次在启动时正确初始化。不过,这似乎有点奇怪,该模块之前是自动加载的,而我无需做任何事情。