在学习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相关推荐

  1. Linux系统驱动之分析内核自带的LCD驱动程序_基于IMX6ULL

    百问网技术交流群,百万嵌入式工程师聚集地: https://www.100ask.net/page/2248041 资料下载 coding无法使用浏览器打开,必须用git工具下载: git clone ...

  2. S3C2440 (4.3寸)LCD驱动程序之层次分析(十六)

    参考:http://www.cnblogs.com/lifexy/p/7604011.html 在上一节LCD层次分析时,得出写个LCD驱动入口函数,需要以下4步: 1)分配一个fb_info结构体: ...

  3. Linux LCD驱动程序

    LCD操作原理 在Linux系统中通过Framebuffer(简称为fb,又叫显存)驱动程序来控制LCD. Frame是帧的意思,buffer是缓冲的意思,这意味着Framebuffer就是一块内存, ...

  4. Linux系统GIC驱动程序分析

    百问网技术交流群,百万嵌入式工程师聚集地: https://www.100ask.net/page/2248041 资料下载 coding无法使用浏览器打开,必须用git工具下载: git clone ...

  5. android 电容屏(三):驱动调试之驱动程序分析篇

    平台信息: 内核:linux3.4.39 系统:android4.4  平台:S5P4418(cortex a9) 作者:瘋耔(欢迎转载,请注明作者) 欢迎指正错误,共同学习.共同进步!! 关注博主新 ...

  6. linux lcd驱动调试 echo dev/fb0,LCD驱动程序 - osc_msmij2gf的个人空间 - OSCHINA - 中文开源技术交流社区...

    LCD驱动程序 假设 app: open("/dev/fb0", ...) 主设备号: 29, 次设备号: 0 kernel: fb_open int fbidx = iminor ...

  7. LCD笔记(7)LCD驱动程序框架_配置时钟

    1. 硬件相关的操作 LCD驱动程序的核心就是: 分配fb_info 设置fb_info 注册fb_info 硬件相关的设置 硬件相关的设置又可以分为3部分: 引脚设置 时钟设置 LCD控制器设置 本 ...

  8. Linux内核 LCD 驱动程序框架

    Linux 内核 LCD 驱动程序框架 1. framebuffer 简介 1.1 什么是 framebuffer 1.2 framebuffer的作用 2. framebuffer 驱动的框架 3. ...

  9. LCD驱动分析(一)

    LCD驱动分析 转载自http://blog.chinaunix.net/uid-26021340-id-3011787.html S3C2440上LCD驱动 (FrameBuffer)实例开发讲解 ...

最新文章

  1. ArcGIS地理信息系统空间分析实验教程第一章 导论
  2. python编写接口初识一
  3. python pillow环境_Python环境Pillow( PIL )图像处理工具使用解析
  4. QQ病毒越来越人性化了
  5. WildFly Kubernetes exec探针
  6. CSS魔法堂:那个被我们忽略的outline 1
  7. Linux利器:QEMU!用它模拟开发板能替代真开发板?
  8. 分析函数——rollup,cube,rank,partition by
  9. 在 GitHub 上收获 6519 颗 Star 的 Python 面试题资源,到底有多牛?
  10. 力扣-169 多数元素
  11. jmeter中通过命令方式生成结果文件
  12. 计算机系统大作业-程序人生
  13. 拼多多带货视频是什么?拼多多带货视频如何上传
  14. HTML 网页特殊符号代码大全
  15. css加号图标_excel单元格加号展开折叠
  16. pygame:超级玛丽
  17. 继续魔改TCP BBR
  18. python绘制分形图形_Python绘制L-System的分形图
  19. 大数据Kudu使用方法
  20. 在Excel表格中如何设置字体随单元格大小变化

热门文章

  1. Mac 电脑浏览器字体显示异常解决方案
  2. 中介公司的故事(一)-Java静态代理
  3. Jsdoc-to-markdown
  4. 阿里云域名 解析到163免费企业邮箱
  5. NTA PEG 异硫氰酸荧光素,NTA PEG FITC,Fluorescein-NTA
  6. 港中深计算机科学,认识港中大(深圳)| Why CUHK Shenzhen? 我们告诉你
  7. Scala中reduce用法
  8. 十三、缓存雪崩+缓存击穿+缓存穿透
  9. git、gitlib、gitlab、GitHub区别
  10. ABAPA实现二维码打印