zoukankan      html  css  js  c++  java
  • 关于在应用层为何不能设置分辨率的问题

    问题的描述:之前在测试fb的驱动程序的时候,试图在应用层通过ioctl函数设置LCD的分辨率,但是并没有设置成功,原因何在?

    定位问题:肯定是驱动中的事情

    进一步定位问题:因为我们是通过ioctl函数来进行设置的,而应用层的ioctl函数最终会调用到驱动中的ioctl函数,所以问题出在驱动中的ioctl函数中

    在  driversvideofbmem.c  文件中:

    fbmem_init

         register_chrdev(FB_MAJOR,"fb",&fb_fops)      // ioctl函数就封装在fb_fops这个file_operations结构体变量中

    分析ioctl函数的实现:

    fb_ioctl

         do_fb_ioctl

              fb_set_var

                   info->fbops->fb_check_var (对应的就是s3cfb.c中的s3cfb_check_var函数)

                   {

                         if (var->xres > lcd->width)   // 如果需要设置的水平分辨率大于LCD本身的水平分辨率则让他等于LCD本身的水平分辨率

                              var->xres = lcd->width;

                         if (var->yres > lcd->height)  // 如果需要设置的垂直分辨率大于LCD本身的垂直分辨率则让他等于LCD本身的垂直分辨率

                              var->yres = lcd->height;

                         if (var->xres_virtual < var->xres) // 如果需要设置的虚拟水平分辨率小于要设置的水平分辨率则让他等于水平分辨率

                              var->xres_virtual = var->xres;

                         if (var->yres_virtual > var->yres * CONFIG_FB_S3C_NR_BUFFERS) // 如果需要设置的虚拟垂直分辨率大于要设置的垂直分辨率的2倍则让他等于垂直分辨率的两倍

                              var->yres_virtual = var->yres * CONFIG_FB_S3C_NR_BUFFERS;

                         ..........

                   }

    所以从上面我们可以知道,我们要设置的FB的可变参数是需要在内部进行检查确认的,并不是我们想把某个参数设置成多少就能够设置成多少,而是要看这个参数值是不是符合

    人家驱动中的规定,可不能瞎胡乱搞。                  

          

  • 相关阅读:
    sprigboot2.0升级修改配置细节记录
    MAC 以太坊环镜安装
    python3 scrapy+Crontab部署过程
    python3 程序问题解决列表
    位运算--通过总值分解出子值(解析子值)
    springboot war包在tomcat中运行
    【解决方法】macOS 安装Resin失败:fatal error: 'openssl/ssl.h' file not found
    MAC+VMware+CentOS 6.5 上网配置
    python报错UnicodeDecodeError: 'ascii' codec can't decode byte 0xe8 in position 0 解决方案
    解决mac+idea+tomcat没有日志输出问题
  • 原文地址:https://www.cnblogs.com/deng-tao/p/6079693.html
Copyright © 2011-2022 走看看