您的位置:首页 > 其它

U-boot LCD驱动程序分析 IMX6ULL

2020-05-30 00:10 656 查看

在学习uboot时,对drivers文件夹里的这么多文件很困惑,比如/drivers/video文件夹,里面有特别多关于LCD的子文件驱动,那么uboot启动时是具体调用哪一个呢?

研究了两个小时后搞懂了,下面详细记录一下

我分析时是先从后往前分析

首先在board/freescale文件夹里找到自己的板子,例如NXP官方是mx6ullevk(正点原子的板子是mx6ull_alientek_emmc)找到板子文件夹里的.c文件,我的是mx6ull_alientek_emmc.c      在这个文件里找到和lcd参数配置有关的代码,如下图

然后知道了关于配置的数组是displays在搜索框全工程搜索dispalys这个数组名,看看是哪个函数调用了displays

可以看到在video.c文件中board_video_skip 函数有大量关于displays的调用,且video.c文件的目录是arch/arm/imx-common,一看就是arm架构下NXP公司写的通用文件,那一定和video.c有关了。打开这个文件。

可以很明显看出,上半部分判断LCD显示屏的名字是不是uboot环境变量中的名字,如果两者匹配,就说明OK,可以;如果不匹配,说明我程序中定义的lcd显示屏和实际用的显示屏名字不对应,那肯定没法驱动了。接下来再看这个函数的下半部分

调用了  mxs_lcd_panel_setup()  这个函数,这个函数很有讲究,我们稍后再看。

调用displays数组的函数是  board_video_skip   于是我们继续搜索  board_video_skip  这个函数,图片就不列出来了,找到是drv_video_init  这个函数调用了它

这个函数又调用了 video_init() 函数,同样,这个很重要,稍后再分析这个函数;先继续搜索是哪个函数调用了  drv_video_init  

发现是  stdio_add_devices  函数调用了这个。OK 继续搜stdio_add_devices    

发现是 board_r.c 文件中的 init_sequence_r[ ]  数组调用了这个函数,而这个数组又是由  board_init_r  函数调用,至此,这一连串的调用真相大白了。

现在还有两个函数没分析。  mxs_lcd_panel_setup  和  video_init    刚刚的分析只是知道了LCD的启动流程,具体是调用了哪个驱动文件,还是不知道。别急,看完这俩函数就明白了。

在video_init函数中调用了 video_hw_init  这个函数  这个函数是最重要的函数,负责了LCD的硬件初始化,全局搜索这个函数后,发现许多的driver/video中都有这个函数,这更说明了这是许多半导体芯片的配置LCD硬件初始化的函数

那么具体是哪一个文件呢???  别忘了我们还有一个函数没分析  mxs_lcd_panel_setup  搜索一下看看,在mxsfb.c文件里

熟悉吧,这个函数里就是进一步使用了mx6ull_alientek_emmc.c中关于LCD的参数配置;特别的在同一目录下mxs_lcd_init 函数就是最终的MX6芯片配置关于LCD寄存器;同样在这个文件中也有 video_hw_init 函数   至此应该真相大白了。而video_hw_init函数包括了mxs_lcd_init 、mxs_lcd_get_panel等等等函数

所以最终的分析就是:(->符号是调用的意思)

board_init_r  ->   stdio_add_devices    ->   drv_video_init   ->   video_init   ->    video_hw_init   ->  mxs_lcd_init

                                                                                           ->   board_video_skip    ->  mxs_lcd_panel_setup  和  displays

                                                                                            board_video_skip  为  video_hw_init  函数传递了LCD屏幕配置参数

 

好不容易看懂了,随手写一下博客,记录一下。同时https://www.geek-share.com/detail/2556864924.html这个博客也写了有关LCD驱动的,但是他是2012年写的,有些函数和我分析的不太一样,不知道是不是因为我的uboot是2016年的缘故。这篇博客说的也有道理,也可以适当参考

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: