700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > U-boot LCD驱动程序分析 IMX6ULL

U-boot LCD驱动程序分析 IMX6ULL

时间:2019-11-26 21:53:41

相关推荐

U-boot  LCD驱动程序分析   IMX6ULL

在学习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屏幕配置参数

好不容易看懂了,随手写一下博客,记录一下。同时/laohuang1122/article/details/7906480这个博客也写了有关LCD驱动的,但是他是写的,有些函数和我分析的不太一样,不知道是不是因为我的uboot是的缘故。这篇博客说的也有道理,也可以适当参考

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。