Nao sou programor C mas me parece que o erro vem deste trecho do codigo:
// Map the device to memory
fbp = (char *)mmap(0, screensize, PROT_READ | PROT_WRITE, MAP_SHARED,
fbfd, 0);
if ((int)fbp == -1) {
printf("Error: failed to map framebuffer device to memory.\n");
exit(4);
}
(espero nao falar besteira) fbp recebe umvalor inteiro de acordo com o
teste feito , pelo visto ele recebeu valor -1 (negativo) no teste. O que
o teste faz exatamente eu nao sei mas ele obviamente esta testando mapeamento
de memoria.
Voce acrescentou suporte a framebuffer no seu kernel ?
Aquele setor... VGA for console etc e tal...
'>'
'>'Pessoal,
'>'
'>'Estou com um problema com o Framebuffer com a placa "VGA compatible
controller:
'>'Intel Corp. 82845G/GL [Brookdale-G] Chipset Integrated Graphics Device
(rev
'>'01)" ou i845. No meu caso tenho o seguinte erro ao tentar executar o
teste
'>'de Frambuffer:
'>'
'>'The framebuffer device was opened successfully.
'>'640x480, 4bpp
'>'Error: failed to map framebuffer device to memory.
'>'
'>'A script de teste que estou usando �:
'>'
'>'#include <unistd.h>
'>'#include <stdio.h>
'>'#include <fcntl.h>
'>'#include <linux/fb.h>
'>'#include <sys/mman.h>
'>'
'>'int main()
'>'{
'>' int fbfd = 0;
'>' struct fb_var_screeninfo vinfo;
'>' struct fb_fix_screeninfo finfo;
'>' long int screensize = 0;
'>' char *fbp = 0;
'>' int x = 0, y = 0;
'>' long int location = 0;
'>'
'>' // Open the file for reading and writing
'>' fbfd = open("/dev/fb0", O_RDWR);
'>' if (!fbfd) {
'>' printf("Error: cannot open framebuffer device.\n");
'>' exit(1);
'>' }
'>' printf("The framebuffer device was opened successfully.\n");
'>'
'>' // Get fixed screen information
'>' if (ioctl(fbfd, FBIOGET_FSCREENINFO, &finfo)) {
'>' printf("Error reading fixed information.\n");
'>' exit(2);
'>' }
'>'
'>' // Get variable screen information
'>' if (ioctl(fbfd, FBIOGET_VSCREENINFO, &vinfo)) {
'>' printf("Error reading variable information.\n");
'>' exit(3);
'>' }
'>'
'>' printf("%dx%d, %dbpp\n", vinfo.xres, vinfo.yres, vinfo.bits_per_pixel
'>');
'>'
'>' // Figure out the size of the screen in bytes
'>' screensize = vinfo.xres * vinfo.yres * vinfo.bits_per_pixel / 8;
'>'
'>' // Map the device to memory
'>' fbp = (char *)mmap(0, screensize, PROT_READ | PROT_WRITE, MAP_SHARED,
'>' fbfd, 0);
'>' if ((int)fbp == -1) {
'>' printf("Error: failed to map framebuffer device to memory.\n");
'>' exit(4);
'>' }
'>' printf("The framebuffer device was mapped to memory successfully.\n");
'>'
'>' x = 100; y = 100; // Where we are going to put the pixel
'>'
'>' // Figure out where in memory to put the pixel
'>' for ( y = 100; y < 300; y++ )
'>' for ( x = 100; x < 300; x++ ) {
'>'
'>' location = (x+vinfo.xoffset) * (vinfo.bits_per_pixel/8)
+
'>' (y+vinfo.yoffset) * finfo.line_length;
'>'
'>' if ( vinfo.bits_per_pixel == 32 ) {
'>' *(fbp + location) = 100; // Some blue
'>' *(fbp + location + 1) = 15+(x-100)/2; // A little
green
'>' *(fbp + location + 2) = 200-(y-100)/5; // A lot of
red
'>' *(fbp + location + 3) = 0; // No transparency
'>' } else { //assume 16bpp
'>' int b = 10;
'>' int g = (x-100)/6; // A little green
'>' int r = 31-(y-100)/16; // A lot of red
'>' unsigned short int t = r<<11 | g << 5 | b;
'>' *((unsigned short int*)(fbp + location)) = t;
'>' }
'>'
'>' }
'>' munmap(fbp, screensize);
'>' close(fbfd);
'>' return 0;
'>'}
'>'
'>'No /etc/lilo.conf tenho:
'>'
'>' append="hdc=ide-scsi root=/dev/hda2 vga=792 video=vesa:ywrap,mtrr"
'>'
'>'
'>'
'>'Tks,
'>'
'>'Daniel.
---------------------------------------------------------------------------
Esta lista � patrocinada pela Conectiva S.A. Visite http://www.conectiva.com.br
Arquivo: http://bazar2.conectiva.com.br/mailman/listinfo/linux-br
Regras de utiliza��o da lista: http://linux-br.conectiva.com.br
FAQ: http://www.zago.eti.br/menu.html