UBOOT LCD驱动流程

很多情况下都需要在UBOOT的阶段就要显示LOGO,直到内核启动完毕后UI接管FrameBuffer为止。这样可以避免内核启动过程的这段时间大约5-8秒内的黑屏。


UBOOT中的LCD驱动比较简单。

[[email protected]] -> [[email protected]] -> [drv_video_init@cfb_console.c] -> [video_init]

这部分就是真正我们要修改的地方,video_init 主要作的内容初始化硬件 video_hw_init,然后显示LOGO图片video_logo。

  • 初始化LCD video_hw_init的调用代码一般是在driver/video/$CPU_fb.c中。 只要是设定好LCD的各个IO口,并且初始化一个GraphicDevice的设备空间。这部分需要改动的地方是Videomodes.c/.h中的mesa_modes和res_mode_init 参数, 这些参数可以从LCD硬件手册中找到。 
    • GraphicDevice 需要设定LCD的X/Y/BPP/显存地址及大小等参数。
    • 真正进行LCD各IO口初始化的部分为调用 board_video_init(pGD), 这个函数定义在$BoardName/$TARGET.c 中, 初始化PWM,VDn,显存地址大小对齐及其使能等等的各个寄存器,这个部分需要参考具体的LCD手册。
  • 硬件初始化完后,我们可以从Nor/Nand或其他某处得到LOGO信息加载到内存处,在video_logo的代码处进行显示 video_display_bitmap
图片显示完毕后,如果后续没有对FB进行处理,则LOGO会一直保持, 这样我们可以在Kernel处进行LCD驱动初始化时无须初始化寄存器和显存,因为UBOOT已经作了这个步骤,我们这样就可以保持LOGO直到UI接管FB为止。

http://blog.chinaunix.net/uid-27875-id-2136147.html

你可能感兴趣的:(嵌入式linux)