Tinha que fazer um segundo% deioctl()
para ativar o buffer de quadros, então funcionou.
/* Refresh buffer manually */
vi.activate |= FB_ACTIVATE_NOW | FB_ACTIVATE_FORCE;
if(0 > ioctl(fd, FBIOPUT_VSCREENINFO, &vi)) {
printf("Failed to refresh\n");
return -1;
}