我制作了一个小型 Linux 发行版,用于我的涉及橙色 pi one H3 的项目,但 HDMI 输出始终无法工作
为了了解 Linux 内核是否支持该设备,我测试了另一个发行版(armbian),它工作得很好。考虑到这一点,我尝试根据它们更改我的内核配置,添加所有相关功能,但我的版本仍然无法工作
我决定在每次尝试后看一下 dmesg,发现有一个我无法摆脱的错误
[ 0.827899] sun4i-drm display-engine: bound 1100000.mixer (ops 0xc0851c2c)
[ 0.835081] sun4i-drm display-engine: bound 1c0c000.lcd-controller (ops 0xc084e2dc)
[ 0.842821] sun8i-dw-hdmi 1ee0000.hdmi: supply hvcc not found, using dummy regulator
[ 0.851453] sun8i-dw-hdmi 1ee0000.hdmi: Detected HDMI TX controller v1.32a with HDCP (sun8i_dw_hdmi_phy)
[ 0.861330] sun8i-dw-hdmi 1ee0000.hdmi: registered DesignWare HDMI I2C bus driver
[ 0.869108] sun4i-drm display-engine: bound 1ee0000.hdmi (ops 0xc0851228)
[ 0.875927] [drm] Supports vblank timestamp caching Rev 2 (21.10.2013).
[ 0.882941] [drm] Initialized sun4i-drm 1.0.0 20150629 for display-engine on minor 0
[ 0.995934] random: fast init done
[ 1.001697] sun4i-drm display-engine: [drm] *ERROR* fbdev: Failed to setup generic emulation (ret=-12)
[ 1.013330] lima 1c40000.gpu: gp - mali400 version major 1 minor 1
我在互联网上找不到有关此特定错误的任何有用信息,并且在内核源代码上找不到返回代码的解释,我该怎么做才能尝试解决该问题?
我在用着
- Linux version 5.8.13 (arm-linux-musleabihf-gcc (GCC) 10.2.0, GNU ld (GNU Binutils) 2.35)
- No modules, no initrd/initramfs
- Machine model: Xunlong Orange Pi One
- U-boot (orangepi_one_defconfig)
答案1
此错误是 ENOMEM(内存不足错误),因为 CMA 大小需要大于显示器将使用的分辨率的一个原始帧
1920x1080 32bpp 需要大约 8MB,默认为 16MB,所以它可以工作,但 3840x2160 32bpp 需要比 32MB 多一点
Armbian 在内核配置上将默认大小更改为 128M,使用CONFIG_CMA_SIZE_MBYTES=128
但是使用 bootarg 将 CMA 大小设置为 64M cma=64M
,使其无需任何补丁或配置更改即可工作