6

Android x86 Nougat (Android v7.1) プロジェクトのフォークをカスタマイズしています。私たちのシステムにはビデオ ディスプレイ ハードウェアがないため、仮想フレーム バッファ (VFB) をセットアップして、カスタムの方法でビデオ ディスプレイを処理できるようにします (たとえば、VNC サーバーを介してビデオ ディスプレイをルーティングするなど)。

システムが起動すると、SurfaceError が初期化を試み、graloc を使用してメモリを割り当てようとすると失敗します。以下は、logcat の抜粋です。

03-02 18:31:21.757   986   986 E gralloc : #### gralloc_alloc
03-02 18:31:21.757   986   986 E gralloc : #### gralloc_alloc_framebuffer
03-02 18:31:21.757   986   986 E gralloc : #### gralloc_alloc_framebuffer_locked
03-02 18:31:21.757   986   986 E Gralloc1On0Adapter: gralloc0 allocation failed: -12 (Out of memory)
03-02 18:31:21.757   986   986 E GraphicBufferAllocator: Failed to allocate (360 x 480) format 5 usage 6656: 5
03-02 18:31:21.757   986   986 V Gralloc1On0Adapter: Destroying descriptor 3
03-02 18:31:21.757   986   986 V Gralloc1On0Adapter: dump(0 (0xbfe341f4), 0x0
03-02 18:31:21.757   986   986 V Gralloc1On0Adapter: dump(0 (0xbfe341f4), 0x0
03-02 18:31:21.757   986   986 D GraphicBufferAllocator: Allocated buffers:
03-02 18:31:21.757   986   986 D GraphicBufferAllocator: 0xab5f60c0:  675.00 KiB |  360 ( 360) x  480 |        5 | 0x00001a00 | FramebufferSurface
03-02 18:31:21.757   986   986 D GraphicBufferAllocator: 0xab5f60f0:  675.00 KiB |  360 ( 360) x  480 |        5 | 0x00001a00 | FramebufferSurface
03-02 18:31:21.757   986   986 D GraphicBufferAllocator: Total allocated (estimate): 1350.00 KB
03-02 18:31:21.757   986   986 E         : GraphicBufferAlloc::createGraphicBuffer(w=360, h=480) failed (Out of memory), handle=0x0
03-02 18:31:21.757   986   986 E BufferQueueProducer: [FramebufferSurface] allocateBuffers: failed to allocate buffer (0 x 0, format 5, usage 0)

完全なログへのリンクは次のとおりです。

初期化ログ (dmesg): http://pastebin.com/sr1rAK43

Logcat: http://pastebin.com/SVYhvgu5

物事を実行するために行ったこと:

  1. kernel/arch/x86/configs/android-x86_defconfig でオプションを設定します: CONFIG_FB_VIRTUAL を VFB モジュール モードの M に設定します</p>

  2. kernel/drivers/video/fbdev/vfb.c で、フレーム バッファ サイズを最大 64MB に更新: #define VIDEOMEMSIZE (64*1024*1024) </p>

  3. device/generic/common/init.sh で、VFB を開始し、UVESA フレーム バッファリングを無効にします。

関数 do_init()

# init_hal_gralloc

modprobe vfb vfb_enable=1 </p>

そして、「return 0」の前のファイルの終わりにある同じ init.sh で:

/system/bin/fbset 360 480 20 </p>

知りたい:

1) メモリ不足エラーを解決するにはどうすればよいですか?


2) カーネル コマンド ラインから vfb を有効にする方法を教えてください。</p>

3) Android 7.x のカーネル 4.4 で VFB を動作させるために見逃した可能性のある構成/セットアップ

4

0 に答える 0