系统一段时间后没有输入总是希望关闭LCD背光延长屏幕的使用寿命,我们目前的项目也是如此。但是一段时间后才发现我的程序在这方面做的不够好。一般个人PC中使用命令
setterm -blank 0关闭屏保 setterm -blank 1开启屏保。其实正确的格式为setterm -blank 【0-60】设置屏保的时间0-60.然后在arm板上是不待setterm 程序的,所以阅读相关资料得知setterm 程序设置屏保时间的源码部分
/* -blank [0-60]. */
if (opt_blank && vcterm)
{
printf("\033[9;%d]", opt_bl_min);
}
所以在程序中我们也可以使用
printf("\033[9;%d]", opt_bl_min);
但是我们并不知道printf是输入到哪个虚拟控制台的,所以就有了变形
system("echo -e \"\033[9;0]\" > /dev/ttyN");
其实ttyN在我程序中是tty4.
后来发现在图形环境下是不起作用的。
ioctl(con_fd, KDSETMODE, KD_GRAPHICS);//con_fd = open(tty4);
将上面一行程序注释掉,使其保持在文本模式KD_TEXT就可以了。
在耐心阅读/drivers/char/vt.c时发现屏保的逻辑。
1)设置定时器
2)将定时器与函数关联
3)时间到调用函数
4)其中有一个中间函数do_blank_screen()是处理黑屏的关键函数
其中有一部分代码
/** don't blank graphics */
if
(vc->vc_mode != KD_TEXT)
{
console_blanked = fg_console + 1;
return
;
}
原来是这部分代码导致KD_GRAPHICS模式下不能使用屏保)
虽然问题已经找到,但是截止到目前还没有找到解决办法。不过从发现vt.c这个文件是关于console,tty设备的关键源代码来看收获还是不小的。