我正在尝试使用已 root 的 Nexus 5(msm 8974 芯片组)设备,该设备运行 Debian,并带有 X 服务器和 Linux 帧缓冲启动控制台。我已重新编译了默认的 Android hammerhead 内核(使用和CONFIG_FB_MSM_MDSS=y
,CONFIG_FB_MSM=y
并启用了帧缓冲控制台选项(分配给主显示器并使用编译的字体)。使用此内核,我可以使用成功启动 Android fastboot boot -c "console=tty0,115200 fbcon=font:VGA8x8" kernel-fbcon.img
,但在启动过程中没有帧缓冲控制台,只有 Google 徽标和启动动画。
我已经通过停止 Android 框架(stop
)并使用 ADB 中的 root shell 进行了测试,在帧缓冲区上尝试了各种不同的事情(/dev/graphics/fb0
)。
# cat /dev/urandom > /dev/graphics/fb0 # does not affect the screen
cat: write error: No space left on device
在屏幕打开时使用con2fbmap 1 0
没有任何效果,它不会改变显示或显示控制台 tty0 上的任何文本。我还尝试使用命令在显示器上运行 Xorg FRAMEBUFFER=/dev/graphics/fb0 Xorg vt1
,该命令正常运行并终止,没有任何错误,但是当 X 终止(在 shell 中按 ctrl+c)时,屏幕上除了最后显示在屏幕上的内容的短暂闪烁外不显示任何内容。Xorg 配置为使用默认的 fbdev 驱动程序。
我怀疑这些问题是由 MSM 帧缓冲设备的非标准实现引起的(对于 Nexus,这是 kernel_source/drivers/video/msm/mdss/mdss_fb.c)。许多新的 Android 设备都存在此问题,帧缓冲设备无法按预期运行。
我想知道是否可以修改帧缓冲区驱动程序或配置内核,以便当设备启动时,它会在帧缓冲区上显示启动控制台。
感谢任何能提供帮助的人。
编辑:该问题似乎只出现在 Nexus 5 中。Google Nexus 系列中的其他设备似乎在帧缓冲图形和启动控制台方面没有问题。
答案1
检查你的 dts 文件是否存在此类条目qcom,cont-splash-enabled
::
--- a/arch/arm/boot/dts/msm8226-sec-matissewifi-r03.dtsi
+++ b/arch/arm/boot/dts/msm8226-sec-matissewifi-r03.dtsi
@@ -752,5 +752,5 @@
};
&dsi2lvds_wxga_vid_r01 {
- qcom,cont-splash-enabled;
+
};
答案2
我在 Nexus 4 上遇到了同样的问题。此方法可解决问题:
cat /sys/class/graphics/fb0/modes > /sys/class/graphics/fb0/mode