我正在移植/编译 androidvncserver对于我的 android 设备,但是当我运行它时(以 root 用户身份),我不断收到 mmap 错误。
违规代码如下所示:
/* Android does not use /dev/fb0. */
#define FB_DEVICE "/dev/graphics/fb0"
if ((fbfd = open(FB_DEVICE, O_RDONLY)) == -1)
{
printf("cannot open fb device %s\n", FB_DEVICE);
exit(EXIT_FAILURE);
}
<SNIP>
fbmmap = mmap(NULL, pixels * bytespp, PROT_READ, MAP_SHARED, fbfd, 0);
if (fbmmap == MAP_FAILED)
{
printf("mmap failed errno = %d\n", errno);
exit(EXIT_FAILURE);
}
我正在寻找有关如何进一步调试它的想法。
根据记录,pixels=614400 和 bytespp=4。另外,/dev/graphics/fb0 归 root (group=graphics) 所有,权限为 660。
最佳答案
普马塔,
错误代码 22 是 EINVAL
。
来自mmap()
文档告诉您...
EINVAL We don't like start or length or offset. (E.g., they are too large, or not aligned on a page boundary.)
也许你没有页面对齐你的内存?
关于android mmap 失败 : invalid argument (errno 22),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5780524/