<2026年May24記載>
複数のEmbeddedWizardアプリ設計の動作検証において、GPUが使用されているか再度確認することとなった。
そこでgfx_system_drm.cにてGfxSystemInit( void )関数内にEwPrint関数でdebug表示して再度確認する。
for ( dev = 0; dev < sizeof( DrmDevices ) / sizeof( const char* ); dev++ )
{
EwPrint( "GfxSystemInit_k: *** debug print ***\n");
EwPrint( "GfxSystemInit_k: dev = %d\n", dev);
DrmFd = open( DrmDevices[ dev ], O_RDWR );
if ( DrmFd < 0 )
continue;
EwPrint( "GfxSystemInit: DrmFd = %d\n", DrmFd);
/* retrieve resources */
if ( resources )
break;
}
EwPrint( "Using drm device node '%s'!\n", DrmDevices[ dev ] );
この結果は、以下の通りで、デバイスは『0』をつかまえることなく、正常に『1』(/dev/dri/card1)をつかまえていることが判明した。前の検証ではデバイス0をつかまえていると認識したが、これは勘違いである。
GfxSystemInit_k: *** debug print ***
GfxSystemInit_k: dev = 0
GfxSystemInit: DrmFd = 3
GfxSystemInit_k: *** debug print ***
GfxSystemInit_k: dev = 1
GfxSystemInit: DrmFd = 4
Using drm device node '/dev/dri/card1'!
Display interface 'DSI_1' detected.
更に、watch -n 1 vcgencmd measure_clock v3d にて、900MHz以上出ていることが 確認できており、かつ eglinfo | grep -i renderer の結果、OpenGL ES profile renderer: V3D 7.1.10.2 も確認できているので、EmbeddedWizardアプリの動作においてGPU(グラフィックプロセッサ)が動作していると判断できる。
✅ DRM/KMS使用
✅ renderD128使用
✅ EGL stack正常
✅ V3D renderer存在
✅ V3D 960MHz
✅ drm-engine-render履歴
以上より、GPU(V3D)で動作していると判断できる。
また、CPU占有率90%は、GPU未使用という意味ではなく、1秒周期のtcp通信処理および共有メモリ処理があり、このため他のデーモンより占有率が上がっているためである。
<2026年May5記載>
EmbeddedWizardアプリはGPU(グラフィックプロセッサユニット)で動作することを前提としている。しかし調査の結果、GPUを使うための“入口”であるEGL(Embedded-System Graphics Library)を経由できていないことが判明している。その結果GPUを使えていない。
[ Embedded Wizard ]
↓
[ OpenGL ES ]
↓
(EGL失敗)★
↓
[ llvmpipe(CPU) ]
↓
[ DRM/KMS ]
↓
[ DSI 表示 ]
この状態をさらに調査した結果、接続されているFreenove5インチの表示デバイスはDSI_1に接続されているが、EmbeddedWizardにおける表示デバイスの判定としてDSI_0と認識されていることが判明した。このDSI_0の認識はEmbeddedWizardが提供するソースに依存していることが分かった。gfx_system_drm.c内のGfxSystemInit( void )関数における以下のopen関数コール後の判定が根本原因である。
DrmFd = open( DrmDevices[ dev ], O_RDWR );
resources = drmModeGetResources( DrmFd );
if ( resources )
break;
本来DrmDevicesのconnectを判定条件とするべきであるが、デバイスの存在を判定条件としている。これでは0から始まるDrmDevicesの判定で0にて判定クリアとなりbreakとなる。実際はデバイスは1で接続されているので、EGLは0の表示先が存在しないため間違ったデバイスであると認識することになりEGLの初期化に失敗することになる。
修正としては、DrmDevicesを1で固定として判定する修正を実施している。
修正結果として以下のengineの消費時間が増加していることが確認でき、かつtopでもCPU占有時間を90%から10%以下にダウンできている。
cat /proc/*/fdinfo/* | grep drm-engine
drm-engine-bin: 1435627157 ns
drm-engine-render: 12307580191 ns
現在実現しているEmbeddedWizardアプリにおいては、GPUを使わないCPUオンリーの処理でもグラフィック表示は違和感なくできているが、GPU(グラフィックプロセッサユニット)を使う本来の方式を実現できたので、より動きのあるグラフィックスの表示対応のケースも自信をもって実現できると考える。
