Black screen after booting sometimes in the Apalis imx8 board

Good analysis! Your testing confirms that the HDMI connection is physically detected correctly (EDID present and status “connected”), but the display pipeline isn’t working properly. This suggests the issue is deeper in the graphics stack.

Framebuffer Content Monitoring

To monitor if the framebuffer is actually outputting content, you can use these methods:

1. DRM/KMS Status Check

Use the modetest utility to check the actual display pipeline status (1):

apt update && apt install libdrm-tests
modetest -M imx-drm

(1)

This will show you the current mode, whether the CRTC (display controller) is active, and if there are any connected planes.

2. Check Active Display Mode

Verify if Weston has actually set a display mode:

modetest -M imx-drm -c

(1)

Look for the HDMI connector and check if it shows an active mode or if it’s in a disconnected state despite the physical connection.

3. Monitor Weston’s DRM Backend

Check if Weston’s DRM backend is functioning properly by examining the compositor state:

docker exec weston weston-info

(2)

This should show active outputs and their current modes.

Additional Diagnostic Indicators

4. Check GPU/Display Controller Status

Since you’re seeing OpenGL context creation failures, check the GPU status:

cat /sys/kernel/debug/dri/1/clients
cat /sys/kernel/debug/dri/1/gem_names

5. Monitor Display Controller Registers

For the i.MX8, you can check if the display controller is actually outputting:

cat /sys/kernel/debug/clk/clk_summary | grep -i display

This shows if the display clocks are running.

Automated Detection Script

Based on your findings, here’s a detection approach that combines multiple indicators:

#!/bin/bash
# Check if display pipeline is working
EDID_EXISTS=$(find /sys/devices -name "edid" | wc -l)
HDMI_CONNECTED=$(cat /sys/class/drm/*HDMI*/status)
WESTON_RUNNING=$(docker ps --filter "name=weston" --filter "status=running" -q)

# Check if modetest shows active display
ACTIVE_MODE=$(modetest -M imx-drm -c 2>/dev/null | grep -c "HDMI.*connected.*[0-9]x[0-9]")

if [ "$EDID_EXISTS" -gt 0 ] && [ "$HDMI_CONNECTED" = "connected" ] && [ -n "$WESTON_RUNNING" ] && [ "$ACTIVE_MODE" -eq 0 ]; then
    echo "Black screen detected - restarting Weston"
    docker restart weston
fi

Root Cause Analysis

From your logs and the fact that EDID is present but no display output occurs, this appears to be a timing issue in the display pipeline initialization (3). The OpenGL context warnings you mentioned are likely symptoms, not the cause.

Alternative Solutions

1. Force Mode Setting

Try explicitly setting the display mode in your Weston configuration:

[output]
name=HDMI-A-1
mode=1024x768@60

(2)

2. Use Software Rendering

As a fallback, you can force software rendering to bypass GPU issues:

docker run ... -e WESTON_DISABLE_ATOMIC=1 -e WESTON_USE_PIXMAN=1 ...

(2)

3. Delayed Weston Startup

Add a delay before starting Weston to ensure the display subsystem is fully initialized:

sleep 5 && docker run ...

The most reliable detection method for your case would be checking if modetest shows an active display mode, as this directly indicates whether the display pipeline is functioning regardless of physical connection status.

Best regards, Toradex AI Assistant.


Did you like my answer? :+1: :-1:

If I answered your question, please tick the “Solution” checkbox.

For follow-up questions to me, please use @ToradexAI in your post.