控制台VT篇:
控制台VT有一个定时器,默认为10分钟,只要时间一到就会blank screen,会导致fb黑屏,会导致给人“电源管理的假象”
drivers/tty/vt/vt.c中:
static DECLARE_WORK(console_work,console_callback);
和
static DEFINE_TIMER(console_timer,blank_screen_t,0,0);
(定义console_timer,时间到了执行blank_screen_t函数,在无任何event时,就执行console_callback)
static void blank_screen_t(unsigned long dummy)
{
if (unlikely(!keventd_up())) {
mod_timer(&console_timer, jiffies + blankinterval);
return;
}
blank_timer_expired = 1;
schedule_work(&console_work);
}
接着调到do_blank_screen(0);然后vc->vc_sw->con_blank()也就是drivers/video/console/fbcon.c中的fbcon_blank()------>drivers/video/fbmem.c中的fb_blank()--->fb_notifier_call_chain(FB_EVENT_BLANK)------>backlight/lcd.c中的FB_EVENT_BLANK的处理,而关掉lcd power。
解决办法:
1.修改LCD驱动,把关闭LCD控制器的函数变为空(不推荐)2.修改vt.c中的blank_screen_t()函数,让其为空(在系统不需要使用关闭显示功能时推荐)
3.修改vt.c中的blankinterval,让其为0(系统可能需要使用关闭显示功能,而且希望系统上电后正常状态下不会关闭显示时推荐)
4.修改用户程序,加入设置blankinterval的代码(推荐)
在用户空间代码里添加
/* disable console. avoid console blank automatically */
system("echo -e \"\033[9;0]\" > /dev/tty1");
解释:
该系统调用相当于setterm -blank 0,详见setterm命令的源码,其中
/* -blank [0-60]. */
if (opt_blank && vcterm)
printf("\033[9;%d]", opt_bl_min);
也可以见Vt.c (drivers\char): case ']': /* setterm functions */
(参考http://blog.chinaunix.net/uid-9688646-id-1998294.html,谢谢)
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请
点击举报。