- 论坛徽章:
- 0
|
本帖最后由 Lethe_Ascetic 于 2014-08-27 21:21 编辑
论文里的各位大虾好,小弟最近在做一个项目,关于LCD背光的控制问题,劳烦大神们帮我仔细看看。
下面我详细叙述下我的情况:
ARM板:Te6410的ARM 11核心板
Linux内核:linux-3.0.1
问题:想编写一个测试程序,实现对LCD的背光灯的控制(开启和关闭)
为了写测试程序,我先仔细看了下linux中LCD驱动的架构。先把我了解的LCD驱动的架构情况简单介绍下,如有理解上的错误,劳烦您指出:
/linux-3.0.1/inculde/fb.h文件中声明了lcd使用的framebuffer结构体;
/linux-3.0.1/arch/arm/plat-s3c64xx中的mach-smdk6410中有lcd驱动相关的平台设备信息,并注册了平台设备
/linux-3.0.1/drivers/video/fbmem.c向上给应用程序 “提供并实现“ 了完善的设备文件操作接口。文件中声明了对应的file_operation结构体如下:
因此我个人认为,当我在应用程序中执行 open("/dev/fb0",xxx), ioctl(fd,xxx,xxx) 时,就是调用了fbmem.c中定义的file_operation结构体中对应的函数
其中的ioctl()函数如下,其调用了do_fb_ioctl函数:
static long fb_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
{
struct fb_info *info = file_fb_info(file);
if (!info)
return -ENODEV;
return do_fb_ioctl(info, cmd, arg);
}
追踪do_fb_ictol()函数,其部分代码如下,可见其调用了fbmem.c中定义的fb_blank函数:
case FBIOBLANK:
if (!lock_fb_info(info))
return -ENODEV;
console_lock();
info->flags |= FBINFO_MISC_USEREVENT;
ret = fb_blank(info, arg);
info->flags &= ~FBINFO_MISC_USEREVENT;
console_unlock();
unlock_fb_info(info);
break;
fbmem.c中的fb_blank函数最终会调用硬件驱动层中的fb_blank函数(该函数在/linux-3.0.1/drivers/video/samsung的s3cfb.c文件中定义),其代码如下:
static int s3cfb_blank(int blank_mode, struct fb_info *info)
{
DPRINTK("blank(mode=%d, info=%p)\n", blank_mode, info);
switch (blank_mode) {
case VESA_NO_BLANKING: /* lcd on, backlight on */
s3cfb_set_lcd_power(1);
s3cfb_set_backlight_power(1);
break;
case VESA_VSYNC_SUSPEND: /* lcd on, backlight off */
case VESA_HSYNC_SUSPEND:
s3cfb_set_lcd_power(1);
s3cfb_set_backlight_power(0);
break;
case VESA_POWERDOWN: /* lcd and backlight off */
s3cfb_set_lcd_power(0);
s3cfb_set_backlight_power(0);
break;
default:
return -EINVAL;
}
return 0;
}
代码不难看懂,就是根据输入的参数,执行对背光的集中不同的控制。
按照上述的理解,我觉得只要在测试程序中,1、fd=open("/dev/fb0",O_RDWD),打开设备;2、执行ioctl(fd,FBIOBLANK,val),通过不同的val值,控制背光灯即可
我按此想法,编写了测试程序,代码很短。但是失败了。
网上有关于ioctl(fd,FBIOGET_VSCREENINFO,&val)的操作介绍,是用来读取LCD屏的参数,并对LCD屏设置颜色的。我执行了网上的这个程序,是可以成功执行的
附地址:http://blog.csdn.net/lonlycorner520/article/details/8035378
但是网上没有LCD的” FBIOBLANK “的使用介绍,有哪位大神懂的,真心求教。现在读硕士,之前师兄没人做arm-linux开发的。没人请教,很痛苦。
|
|