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:
- El valor de bogoMIPS está cambiando
- ¿Cómo funciona la piedra sepulcral en android-kernel
- Obtención de adiciones de invitados de vbox para android x86
- Cómo utilizar V4L o V4L2 (Video para Linux) en Android?
- ¿Cómo se interpreta WAKEUP_STAT y WAKEUP_INTx_PEND en exynos SoC kmsg?
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:
-
En kernel / arch / x86 / configs / android-x86_defconfig, configure la opción: CONFIG_FB_VIRTUAL a M para el modo de módulo VFB
-
En kernel / drivers / video / fbdev / vfb.c tamaño de buffer de cuadro actualizado hasta 64MB: #define VIDEOMEMSIZE (64 * 1024 * 1024)
-
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
- Flujo de trabajo de desarrollo de núcleo linux / android incorporado
- ¿Cuál es la necesidad de cargador de arranque de segunda etapa? ¿Por qué diferentes bootloaders como la primera etapa y la segunda etapa?
- ¿Dónde está el reporte git de la fuente del kernel de Android?
- / dev / mem y / dev / kmem no existe?
- Linux rt- patch para Android de nadie?
- Android: leer "atributo de dispositivo" falla con error "longitud no válida"
- ¿Soporta Android memoria virtual?
- ¿Cómo puedo crear un nuevo dispositivo de ratón virtual en mi dispositivo Android?
- MockRetrofit y BehaviorDelegate ignoran el OkHttpClient
- Consulte los datos de ingresos de AdMob en Analytics.