gpt4 book ai didi

linux - MMAP 尝试加倍缓冲 framebuffer 失败

转载 作者:太空宇宙 更新时间:2023-11-04 10:30:55 24 4
gpt4 key购买 nike

我正在尝试使用 ioctl(fd, FBIOPAN_DISPLAY...我的单缓冲区代码工作正常

screensize = vinfo.xres * vinfo.yres * vinfo.bits_per_pixel / 8;

fbp = (char*)mmap(0, screensize, PROT_READ | PROT_WRITE, MAP_SHARED, fbfd, 0);

当我尝试使用 screensize*2 增加“长度参数”时,mmap 失败并返回 EINVAL。我认为它不喜欢我的长度参数。

单缓冲区的屏幕大小为 6,220,800,双缓冲区的屏幕大小为 12,441600。这是一个嵌入式系统,但它有 1 G 的 RAM。

长度参数是 size_t,在这个系统上它只有 4 个字节,这让我认为我可以使用的最大大小是 4 兆字节,但 6 兆字节工作正常,所以我想我遗漏了一些非常简单的东西。有没有办法 mmap 大于 size_t 的缓冲区?

最佳答案

The man page说长度(第二个参数)是 size_t 类型,所以我认为传递更大的类型是不安全的。

我建议您只映射第一部分,然后重新映射第二部分,如图所示 in this SO Q&A .

关于 EINVAL:手册页中说明如下:

EINVAL We don't like addr, length, or offset (e.g., they are too large, or not aligned on a page boundary).

EINVAL (since Linux 2.6.12) length was 0.

EINVAL flags contained neither MAP_PRIVATE or MAP_SHARED, or contained both of these values.

你确定你是页面对齐的吗?

关于linux - MMAP 尝试加倍缓冲 framebuffer 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39969673/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com