SurfaceFlinger / gralloc Error de memoria insuficiente al asignar memoria intermedia para su uso con el buffer de marco virtual en Android x86 Turrón

Estamos personalizando un tenedor del proyecto Android x86 Nougat (Android v7.1). Debido a que no hay hardware de visualización de vídeo en nuestro sistema, estamos tratando de configurar el búfer de trama virtual (VFB) para que podamos manejar la pantalla de vídeo de una manera personalizada (por ejemplo, la ruta de la pantalla de vídeo a través de un servidor VNC etc).

Cuando el sistema arranca SurfaceError intenta inicializar falla cuando intenta asignar memoria usando gralloc. El siguiente es un extracto de 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) 

Aquí hay enlaces a los registros completos:

Registro de inicio (dmesg): http://pastebin.com/sr1rAK43

Logcat: http://pastebin.com/SVYhvgu5

Lo que hemos hecho para que las cosas funcionen:

  1. En kernel / arch / x86 / configs / android-x86_defconfig, configure la opción: CONFIG_FB_VIRTUAL a M para el modo de módulo VFB

  2. En kernel / drivers / video / fbdev / vfb.c tamaño de buffer de cuadro actualizado hasta 64MB: #define VIDEOMEMSIZE (64 * 1024 * 1024)

  3. En el dispositivo / genérico / common / init.sh Inicie VFB y deshabilite la memoria intermedia del cuadro UVESA:

Function do_init ()

# Init_hal_gralloc

Modprobe vfb vfb_enable = 1

Y en el mismo init.sh en el archivo final antes de "return 0":

/ System / bin / fbset 360 480 20

Me gustaría saber:

1) ¿Cómo puedo resolver el error de memoria insuficiente?

2) ¿Cómo se habilita vfb desde la línea de comandos del kernel?

3) Cualquier configuraciones / configuraciones que puede haber faltado en conseguir VFB trabajar en kernel 4.4 en Android 7.x

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.