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屏幕配置参数
好不容易看懂了,随手写一下博客,记录一下。同时https://blog.csdn.net/laohuang1122/article/details/7906480这个博客也写了有关LCD驱动的,但是他是2012年写的,有些函数和我分析的不太一样,不知道是不是因为我的uboot是2016年的缘故。这篇博客说的也有道理,也可以适当参考
U-boot LCD驱动程序分析 IMX6ULL相关推荐
- Linux系统驱动之分析内核自带的LCD驱动程序_基于IMX6ULL
百问网技术交流群,百万嵌入式工程师聚集地: https://www.100ask.net/page/2248041 资料下载 coding无法使用浏览器打开,必须用git工具下载: git clone ...
- S3C2440 (4.3寸)LCD驱动程序之层次分析(十六)
参考:http://www.cnblogs.com/lifexy/p/7604011.html 在上一节LCD层次分析时,得出写个LCD驱动入口函数,需要以下4步: 1)分配一个fb_info结构体: ...
- Linux LCD驱动程序
LCD操作原理 在Linux系统中通过Framebuffer(简称为fb,又叫显存)驱动程序来控制LCD. Frame是帧的意思,buffer是缓冲的意思,这意味着Framebuffer就是一块内存, ...
- Linux系统GIC驱动程序分析
百问网技术交流群,百万嵌入式工程师聚集地: https://www.100ask.net/page/2248041 资料下载 coding无法使用浏览器打开,必须用git工具下载: git clone ...
- android 电容屏(三):驱动调试之驱动程序分析篇
平台信息: 内核:linux3.4.39 系统:android4.4 平台:S5P4418(cortex a9) 作者:瘋耔(欢迎转载,请注明作者) 欢迎指正错误,共同学习.共同进步!! 关注博主新 ...
- linux lcd驱动调试 echo dev/fb0,LCD驱动程序 - osc_msmij2gf的个人空间 - OSCHINA - 中文开源技术交流社区...
LCD驱动程序 假设 app: open("/dev/fb0", ...) 主设备号: 29, 次设备号: 0 kernel: fb_open int fbidx = iminor ...
- LCD笔记(7)LCD驱动程序框架_配置时钟
1. 硬件相关的操作 LCD驱动程序的核心就是: 分配fb_info 设置fb_info 注册fb_info 硬件相关的设置 硬件相关的设置又可以分为3部分: 引脚设置 时钟设置 LCD控制器设置 本 ...
- Linux内核 LCD 驱动程序框架
Linux 内核 LCD 驱动程序框架 1. framebuffer 简介 1.1 什么是 framebuffer 1.2 framebuffer的作用 2. framebuffer 驱动的框架 3. ...
- LCD驱动分析(一)
LCD驱动分析 转载自http://blog.chinaunix.net/uid-26021340-id-3011787.html S3C2440上LCD驱动 (FrameBuffer)实例开发讲解 ...
最新文章
- ArcGIS地理信息系统空间分析实验教程第一章 导论
- python编写接口初识一
- python pillow环境_Python环境Pillow( PIL )图像处理工具使用解析
- QQ病毒越来越人性化了
- WildFly Kubernetes exec探针
- CSS魔法堂:那个被我们忽略的outline 1
- Linux利器:QEMU!用它模拟开发板能替代真开发板?
- 分析函数——rollup,cube,rank,partition by
- 在 GitHub 上收获 6519 颗 Star 的 Python 面试题资源,到底有多牛?
- 力扣-169 多数元素
- jmeter中通过命令方式生成结果文件
- 计算机系统大作业-程序人生
- 拼多多带货视频是什么?拼多多带货视频如何上传
- HTML 网页特殊符号代码大全
- css加号图标_excel单元格加号展开折叠
- pygame:超级玛丽
- 继续魔改TCP BBR
- python绘制分形图形_Python绘制L-System的分形图
- 大数据Kudu使用方法
- 在Excel表格中如何设置字体随单元格大小变化