天嵌 ARM开发社区

 找回密码
 注册
查看: 1800|回复: 1

奇怪问题:linux视频子系统,ioctl出错!

[复制链接]
itspy 发表于 2012-5-10 16:07:47 | 显示全部楼层 |阅读模式
本帖最后由 itspy 于 2012-5-10 17:48 编辑

今天写一个应用程序测试linux 视频子系统frame buffer设备,发现ioctl竟然出错,均返回-1,不知到为什么?
fd = open("/dev/fb0",O_RDWR) < 0)打开成功,但fd = 0 ,这个也有点奇怪。。。
更奇怪的是,在内核端fb_ioctl加入printk调式,竟然也没有输出,说明用户程序ioctl的时候,根本不会执行fb_ioctl!!!
求助达人,指点一下linux菜鸟!
static const struct file_operations fb_fops = {
        .owner =        THIS_MODULE,
        .read =                fb_read,
        .write =        fb_write,
        .unlocked_ioctl = fb_ioctl,
#ifdef CONFIG_COMPAT
        .compat_ioctl = fb_compat_ioctl,
#endif
        .mmap =                fb_mmap,
        .open =                fb_open,
        .release =        fb_release,
#ifdef HAVE_ARCH_FB_UNMAPPED_AREA
        .get_unmapped_area = get_fb_unmapped_area,
#endif
#ifdef CONFIG_FB_DEFERRED_IO
        .fsync =        fb_deferred_io_fsync,
#endif
};
用户程序如下:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/ioctl.h>
//#include <sys/types.h>
#include <fcntl.h>     
#include <linux/fb.h>
#include <sys/mman.h>

struct fb_var_screeninfo vinfo;
struct fb_fix_screeninfo finfo;

int main(void)
{
        int fd;
        int fbsize;
        unsigned char *fbbuf;
           char buf[10];
        int i,res,adc_data;

        if ((fd = open("/dev/fb0",O_RDWR)) < 0) {
            printf("open fb0 failed\n"undefined;
             return 1;
        }

          if((res = ioctl(fd,FBIOGET_FSCREENINFO,&finfo)) == -1)
            {
                printf("ERROR reading fixed information.error = %d\n",res);

        }

        if ((res = ioctl(fd, FBIOGET_VSCREENINFO, &vinfo)) ==-1) {
                printf("bad vscreeninfo ioctl.error = %d\n",res);
        }

        fbsize = vinfo.xres * vinfo.yres * (vinfo.bits_per_pixel/undefined;
        printf("fbisze: %d",fbsize);

        if ((fbbuf = mmap(0, fbsize, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0)) == (void*) -1)
        {
                printf("map video error.\n"undefined;
        }

        for (i = 0; i< fbsize; i++) {
                *(fbbuf+i) = 0x0;
        }
        munmap(fbbuf, fbsize);
        close(fd);

        return 0;
}
 楼主| itspy 发表于 2012-5-10 17:48:24 | 显示全部楼层

解决了
犯了一个及其低级的错误!
楼主位的程序改正了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

i.MX8系列ARM cortex A53 M4 工控板上一条 /1 下一条

Archiver|手机版|小黑屋|天嵌 嵌入式开发社区 ( 粤ICP备11094220号-2 )

GMT+8, 2024-6-25 14:25 , Processed in 1.078125 second(s), 19 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表