• ホーム
  • ブログとニュース
  • 設計プロジェクト例
  • 顧問契約概要
  • お問い合わせ
  • …  
    • ホーム
    • ブログとニュース
    • 設計プロジェクト例
    • 顧問契約概要
    • お問い合わせ

     

    • ホーム
    • ブログとニュース
    • 設計プロジェクト例
    • 顧問契約概要
    • お問い合わせ
    • …  
      • ホーム
      • ブログとニュース
      • 設計プロジェクト例
      • 顧問契約概要
      • お問い合わせ

      RasPi5でEmbeddedWizardアプリをGPU(グラフィックプロセッサ)で動作させるためのソース修正(不要である)

      <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(グラフィックプロセッサユニット)を使う本来の方式を実現できたので、より動きのあるグラフィックスの表示対応のケースも自信をもって実現できると考える。

      前へ
      EmbeddedWizardアプリの滑らかさの比較検証からの事実
      次へ
      EmbeddedWizardによるグラフィック表示をGPU実行かCPU実行かでゴーストタッチ現象に差異がある
       サイトへ戻る
      strikingly iconStrikinglyを搭載
      クッキーの使用
      ブラウジングエクスペリエンス、セキュリティ、データ収集を向上させるためにクッキーを使用します。 同意すると、広告と分析のための クッキーの使用に同意したことになります。 クッキーの設定はいつでも変更できます。 詳しく見る
      同意する
      設定
      すべて拒否する
      クッキー設定
      こちらのクッキーは、セキュリティ、ネットワーク管理、アクセシビリティなどのコア機能を有効にします。こちらのクッキーをオフにすることはできません。
      こちらのクッキーは、訪問者がサイトをどのように操作しているかをよりよく理解し、エラーを発見するのに役立ちます。
      こちらのクッキーにより、サイトは、拡張機能とパーソナライズを提供するために行った選択を記憶することができます。
      保存