uboot2012 LCD驱动流程及机制分析
来源:互联网 发布:windows远程桌面快捷键 编辑:程序博客网 时间:2024/05/22 01:39
学习Uboot有一段时间了,对LCD的流程没有深入了解过,借助于sourceinsight对LCD的驱动流程进行分析
board_init_r()(Board.c) ===>stdio_init()(Stdio.c)===>drv_video_init()(Cfb_console.c)====>video_init()===>video_hw_init()(S3c24x0_fb.c)=====>board_video_init()
int drv_video_init(void)函数中首先初始化VGA设备,建立设备描述信息, 对输入输出设备进行注册,将lcd设备驱动加入驱动链表中。
int console_init_r(void)函数从设备链表中获取出lcd设备,置设备初始化标志,并将当前设备信息打印。
初始化完成之后沿着puts()输出函数具体分析
puts()(console.c)======>fputs()====>console_putcs()中通过stdio_device[file]->putc()在设备中的注册映射到相关函数video_puts()==>video_puts()(cfb_console.c)
void video_putc(const char c)
{
static int nl = 1;
CURSOR_OFF;
switch (c) {
case 13: /* back to first column */
console_cr();
break;
case '\n': /* next line */
if (console_col || (!console_col && nl))
console_newline();
nl = 1;
break;
case 9: /* tab 8 */
console_col |= 0x0008;
console_col &= ~0x0007;
if (console_col >= CONSOLE_COLS)
console_newline();
break;
case 8: /* backspace */
console_back();
break;
case 7: /* bell */
break; /* ignored */
default: /* draw the char */
video_putchar(console_col * VIDEO_FONT_WIDTH,
console_row * VIDEO_FONT_HEIGHT, c);
console_col++;
/* check for newline */
if (console_col >= CONSOLE_COLS) {
console_newline();
nl = 0;
}
}
CURSOR_SET;
}
以上代码是特殊命令的转换与解析当满屏时进入console_newline()函数
追踪此函数
console_newline()====>console_scrollup()
static void console_scrollup(void)
{
/* copy up rows ignoring the first one */
#ifdef VIDEO_HW_BITBLT
video_hw_bitblt(VIDEO_PIXEL_SIZE,/* bytes per pixel */
0, /* source pos x */
video_logo_height +
VIDEO_FONT_HEIGHT, /* source pos y */
0, /* dest pos x */
video_logo_height,/* dest pos y */
VIDEO_VISIBLE_COLS,/* frame width */
VIDEO_VISIBLE_ROWS
- video_logo_height
- VIDEO_FONT_HEIGHT/* frame height */
);
#else
memcpyl(CONSOLE_ROW_FIRST, CONSOLE_ROW_SECOND,
CONSOLE_SCROLL_SIZE >> 2);
#endif
/* clear the last one */
console_clear_line(CONSOLE_ROWS - 1, 0, CONSOLE_COLS - 1);
}
从上述代码看出memcpyl(CONSOLE_ROW_FIRST, CONSOLE_ROW_SECOND,CONSOLE_SCROLL_SIZE >> 2)将
显存内容从下一行复制到上一行然后清空最后一行,至此代码跟踪完成,uboot学习告一段落开始编译linux。
- uboot2012 LCD驱动流程及机制分析
- LCD驱动原理及代码分析
- LCD控制器驱动流程
- UBOOT LCD驱动流程
- UBOOT LCD驱动流程 (
- UBOOT LCD驱动流程
- UBOOT LCD驱动流程
- LCD驱动流程
- 内核LCD驱动结构分析及实例分析
- LCD 驱动分析
- lcd驱动分析(读书笔记)
- LCD驱动分析
- LCD 驱动分析
- LCD驱动分析
- lcd驱动层次分析
- LCD驱动分析
- LCD驱动分析
- LCD设备驱动分析
- IOS Socket使用大全 -将持续更新
- 计算机视觉整理备忘
- Compilers(Dragon Book 2nd) - 4.9
- RMI网络编程 重启server端程序,client端无法连接
- 有可能在onPause之前调用onSaveInstanceState
- uboot2012 LCD驱动流程及机制分析
- 第五周项目一(1):三角形类(带参数的构造函数)
- 关于Android的nodpi,xhdpi,hdpi,mdpi,ldpi
- 与IT&码农有关的电影和记录片
- java io
- QT学习之1---安装配置
- 分区表的分区与普通表交换的一些问题
- C#委托和事件
- C++知识要点整理11:继承与派生(1)