6

我们正在定制一个 Android x86 Nougat (Android v7.1) 项目的分支。因为我们的系统中没有视频显示硬件,所以我们尝试设置虚拟帧缓冲区 (VFB),以便我们可以以自定义方式处理视频显示(例如,通过 VNC 服务器路由视频显示等)。

我们在系统启动时 SurfaceError 尝试初始化它,当它尝试使用 gralloc 分配内存时失败。以下是 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

日志猫: http ://pastebin.com/SVYhvgu5

我们为使事情正常运行所做的工作:

  1. 在 kernel/arch/x86/configs/android-x86_defconfig 中设置选项: CONFIG_FB_VIRTUAL 为 M 用于 VFB 模块模式</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) 在让 VFB 在 Android 7.x 中的内核 4.4 上工作时我可能错过的任何配置/设置

4

0 回答 0