主题 : 自带的交叉编译器,编译时缺少头文件,求救 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 29591
精华: 0
发帖: 33
金钱: 2790 两
威望: 558 点
综合积分: 66 分
注册时间: 2010-09-30
最后登录: 2012-12-18
楼主  发表于: 2010-10-30 14:25

 自带的交叉编译器,编译时缺少头文件,求救

在做framebuffer编程时,交叉编译出错。
错误提示:
fatal error: asm/page.h: No such file or directory


是交叉编译器缺少这个头文件吗? 是不是要从对应的源码里面找到相应的头文件,添加到交叉编译器里面?
请说话具体做法
自由,自强,共享,共创。
级别: 论坛版主
UID: 12573
精华: 27
发帖: 8838
金钱: 46490 两
威望: 9298 点
综合积分: 18216 分
注册时间: 2010-01-09
最后登录: 2019-07-16
1楼  发表于: 2010-10-31 09:11
板子里的所有qt也是frame buffer的,可能你的路径不对
新手如何向我们反馈有效的信息,以便解决问题,见此贴:
http://www.arm9home.net/read.php?tid-14431.html

[注]: 此处签名链接仅为指引方向,而非解答问题本身.
级别: 新手上路
UID: 29591
精华: 0
发帖: 33
金钱: 2790 两
威望: 558 点
综合积分: 66 分
注册时间: 2010-09-30
最后登录: 2012-12-18
2楼  发表于: 2010-10-31 18:48
路径应该没错
级别: 新手上路
UID: 29591
精华: 0
发帖: 33
金钱: 2790 两
威望: 558 点
综合积分: 66 分
注册时间: 2010-09-30
最后登录: 2012-12-18
3楼  发表于: 2010-10-31 18:51
头文件
fbtools.h
#ifndef _FBTOOLS_H_
#define _FBTOOLS_H_

#include <linux/fb.h>

//a framebuffer device structure;
typedef struct fbdev{
               int fb;
               unsigned long fb_mem_offset;
               unsigned long fb_mem;
               struct fb_fix_screeninfo fb_fix;
               struct fb_var_screeninfo fb_var;
               char dev[20];
} FBDEV, *PFBDEV;

//open & init a frame buffer
//to use this function,
//you must set FBDEV.dev="/dev/fb0"
//or "/dev/fbX"
//it's your frame buffer.
int fb_open(PFBDEV pFbdev);

//close a frame buffer
int fb_close(PFBDEV pFbdev);

//get display depth
int get_display_depth(PFBDEV pFbdev);


//full screen clear
void fb_memset(void *addr, int c, size_t len);

#endif

测试文件,其中深颜色的注释部分为在我机器上测得的结果
fbtools.c
代码:

#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
#include <sys/ioctl.h>
#include <sys/mman.h>
#include <asm/page.h>

#include "fbtools.h"

#define TRUE          1
#define FALSE         0
#define MAX(x,y)        ((x)>(y)?(x):(y))
#define MIN(x,y)        ((x)<(y)?(x):(y))

//open & init a frame buffer
int fb_open(PFBDEV pFbdev)
{
               pFbdev->fb = open(pFbdev->dev, O_RDWR);// pFbdev->fb==3
               if(pFbdev->fb < 0)
               {
                               printf("Error opening %s: %m. Check kernel confign", pFbdev->dev);
                               return FALSE;
               }
               if (-1 == ioctl(pFbdev->fb,FBIOGET_VSCREENINFO,&(pFbdev->fb_var)))
               {
                               printf("ioctl FBIOGET_VSCREENINFOn");
                               return FALSE;
               }
               if (-1 == ioctl(pFbdev->fb,FBIOGET_FSCREENINFO,&(pFbdev->fb_fix)))
               {
                               printf("ioctl FBIOGET_FSCREENINFOn");
                               return FALSE;
               }
              
               //map physics address to virtual address
               // pFbdev->fb_fix.smem_start=f0000000
               pFbdev->fb_mem_offset = (unsigned long)(pFbdev->fb_fix.smem_start) & (~PAGE_MASK);
// pFbdev->fb_fix.smem_len=100 0000 pFbdev->fb_mem_offset=0
// pFbdev->fb_mem =0
               pFbdev->fb_mem = (unsigned long int)mmap(NULL, pFbdev->fb_fix.smem_len +
                                          pFbdev->fb_mem_offset,
                               PROT_READ | PROT_WRITE, MAP_SHARED, pFbdev->fb, 0);
               if (-1L == (long) pFbdev->fb_mem)
               {
                               printf("mmap error! mem:%d offset:%dn", pFbdev->fb_mem,
                                                      pFbdev->fb_mem_offset);
                               return FALSE;
               }
              
               return TRUE;
}

//close frame buffer
int fb_close(PFBDEV pFbdev)
{
               close(pFbdev->fb);
               pFbdev->fb=-1;
}

//get display depth
int get_display_depth(PFBDEV pFbdev);
{
               if(pFbdev->fb<=0)
               {
                               printf("fb device not open, open it firstn");
                               return FALSE;
               }
               return pFbdev->fb_var.bits_per_pixel;
}

//full screen clear
void fb_memset (void *addr, int c, size_t len)
{
    memset(addr, c, len);
}

//use by test
#define DEBUG
#ifdef DEBUG
main()
{
               FBDEV fbdev;
               memset(&fbdev, 0, sizeof(FBDEV));
               strcpy(fbdev.dev, "/dev/fb0");
               if(fb_open(&fbdev)==FALSE)
               {
                               printf("open frame buffer errorn");
                               return;
               }
               //注意,下面一行有bug
               fb_memset(fbdev.fb_mem + fbdev.fb_mem_offset, 0, fbdev.fb_fix.smem_len);
              
               fb_close(&fbdev);
}
#endif
级别: 新手上路
UID: 29591
精华: 0
发帖: 33
金钱: 2790 两
威望: 558 点
综合积分: 66 分
注册时间: 2010-09-30
最后登录: 2012-12-18
4楼  发表于: 2010-10-31 18:52
就是fbtools.c 文件中 #include <asm/page.h>
编译时找不到头文件