Вероятно, делаю всё совсем неправильно. Вот код на Vala:
int fd = open("/dev/fb0", O_RDWR);
ioctl(fd, FBIOGET_VSCREENINFO, &vinfo);
long screensize = vinfo.xres * vinfo.yres * vinfo.bits_per_pixel / 8;
uchar[] data = (uchar[])mmap((void *)0, screensize, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
Но вот на mmap ругается:
GLib-ERROR **: gmem.c:100: failed to allocate 4294967295 bytesПричём аналогичная программа на C работает нормально. Явно я где-то накосячил.
Или есть какой-то хитрый GLib-специфичный способ это сделать? Может, при помощи GIO?