许多学习嵌入式的进入MTK开发平台,很多东西都会感到很陌生。在MTK平台上你可以简简单单几分钟就点亮一块屏。加上MTK快速开发的节奏,也很少有时间自己整理学习。如果不思进取,不加班加点学习。很容易就慢慢……。这也难怪有些人说MTK造就了一批懒人,毁掉了一批工程师。但其实都是基于linux开发,核心的东西都是一样一样的。我刚入行业,在迷茫之际,自己整理跟踪源码。想慢慢找回自己熟悉的感觉,掌握MTK的整体框架。也希望能给有需要的人带来些帮助。好吧!前话说到这,开始正题。

本文可能有的地方会出现错误,或不够深入,欢迎批评指正。毕竟都是个人理解,希望能和大家多多交流。大家一起慢慢吃透MTK。随便提一句,如果不熟悉“linux平台设备驱动”模型的,可以找相关资料看看。

注:-->表示函数之间的调用

一、平台驱动:Mtkfb.c

就从Mtkfb.c文件开始说起吧。路径在:alps\mediatek\platform\common\kernel\drivers\video\Mtkfb.c

在该文件中,我们能非常熟悉的看到内核的原态。下面我删截了一部分大家最熟悉的源码。

static struct platform_driver mtkfb_driver =
{.driver = {.name    = MTKFB_DRIVER,
#ifdef CONFIG_PM.pm     = &mtkfb_pm_ops,
#endif.bus     = &platform_bus_type,.probe   = mtkfb_probe,.remove  = mtkfb_remove,.suspend = mtkfb_suspend,.resume  = mtkfb_resume,.shutdown = mtkfb_shutdown,},
};
/* Register both the driver and the device */
int __init mtkfb_init(void)
{int r = 0;MSG_FUNC_ENTER();#ifdef DEFAULT_MMP_ENABLEMMProfileEnable(1);init_mtkfb_mmp_events();init_ddp_mmp_events();MMProfileStart(1);
#endif/* Register the driver with LDM */if (platform_driver_register(&mtkfb_driver)) {PRNERR("failed to register mtkfb driver\n");r = -ENODEV;goto exit;}#ifdef CONFIG_HAS_EARLYSUSPENDregister_early_suspend(&mtkfb_early_suspend_handler);
#endifDBG_Init();
//#ifdef MTK_DISP_CONFIG_SUPPORTConfigPara_Init();//In order to Trigger Display Customization Tool..
//#endif
exit:MSG_FUNC_LEAVE();return r;
}
module_init(mtkfb_init);
module_exit(mtkfb_cleanup);

看了上面代码,大家肯定知道mtkfb_probe函数是核心。但暂时我还不想说这一块,因为底层框架还没分析完,熟悉平台设备驱动的都知道:仅仅有driver是跑不到probe函数的。在入口函数上面的注视,有写同时注册driver和device。不知道是MTK掩人耳目还是同事的错误标注,反正我没在里面找到注册device相关的代码。这一块希望看过本文的人能提供解释。

二、平台设备:Mt_devs.c

事实上我在另外的地方跟到了device的注册函数。在Mt_devs.c中,路径在:mediatek\platform\common\kernel\drivers\video(在bootable\bootloader\lk目录下也有一份一样的,目前不能给出明确解释。)

1、在该文件中:__init int mt_board_init(void)函数-->platform_device_register(&mt6575_device_fb),在mt6575_device_fb结构体中我们能看到disp_device.name = "mtkfb"。对比Mtkfb.c中的结构体mtkfb_driver.name = MTKFB_DRIVER。我们能发现两者同名。这又到了我们熟悉的地方。出现同名设备,不管先后,内核会调用Mtkfb.c中的probe函数。这时我们可以开始分析probe函数了。

2、在这之前,有个问题我得说明,我们先来看看__init int mt_board_init(void)函数的调用过程:Main.c里的kmain函数-->platform_early_init-->board_init-->mt_board_init。源头追溯到了C函数的入口Main.c。我之所以去跟,是因为Mt_devs.c中并不是以我们熟悉的模块的形式注册的设备,也就是根本没有module_init()入口标记,而且mt_board_init一个函数中做了几乎所有平台设备的注册工作。这是和平时学习有别的地方,所以特意说明。也免得大家和我开始一样,一直疑惑设备驱动文件为啥没入口函数。

时候不早了,该下班了。下次接着“第三点”,说说mtkfb_probe函数里边的工作

待续…………

MTK平台LCD驱动框架详解(一)相关推荐

  1. 【实战篇】模块化编程之LCD驱动框架详解

    ID:嵌入式云IOT技术圈 作者:杨源鑫 传送门:[架构篇]嵌入式编程中如何给代码的结构分层 废话不多说,理论讲太多没啥感觉,这些条条框框本质就是基于面对对象的设计模式相关的一些理论,设计模式就是前人 ...

  2. mtk平台lcd驱动移植

    mtk平台lcd驱动分为两个部分:lk和kernel.两部分基本流程相同,除了GPIO操作及头文件. 1. lk:需要修改的目录 vendor/mediatek/proprietary/bootabl ...

  3. MTK平台TP驱动框架解析

    一,TP驱动代码的组成 MTK平台TP驱动主要包括两处文件: 1,kernel-3.18\drivers\input\touchscreen\mediatek\mtk_tpd.c 平台设备驱动,主要为 ...

  4. linux内核的块设备驱动框架详解

    1.块设备和字符设备的差异 (1)块设备只能以块为单位接受输入和返回输出,而字符设备则以字节为单位.大多数设备是字符设备,因为它们不需要缓冲而且不以固定块大小进行操作; (2)块设备对于 I/O 请求 ...

  5. 我所理解的高通平台Lcd驱动框架

    帧缓冲(framebuffer)是 Linux 系统为显示设备提供的一个接口,它将显示缓冲区抽象,屏蔽图像硬件的底层差异,允许上层应用程序在图形模式下直接对显示缓冲区进行读写操作.用户不必关系物理显示 ...

  6. Linux下LCD驱动的详解

    看了不少人写的LCD驱动解释,看之前很懵逼,看之后还是很懵逼.都是放一大堆内核代码,我当时就想吐槽,能写就写,写不明白放一大堆代码是啥意思.后来,实在没办法,只能去看内核代码,结果,真香,原来别人放一 ...

  7. RK3399平台开发系列讲解(SPI子系统)4.36、SPI子系统驱动框架详解

    平台 内核版本 安卓版本 RK3399 Linux4.4 Android7.1

  8. tft lcd驱动参数详解_LED拼接屏和LCD拼接屏的区别

    LED屏幕和LCD屏幕是每个人都经常听到的两个屏幕,但是每个人之间的区别尚不清楚.不认识的人可能会认为两者之间没有区别.让我们谈谈LED和LCD屏幕之间的区别: 首先,什么是LED? LED是发光二极 ...

  9. MTK 平台lcm驱动框架分析1

    源码路径: kernel-3.18/arch/arm/boot/dts/mt6580.dtsi kernel-3.18/drivers/misc/mediatek/video/common/mtkfb ...

最新文章

  1. 系统管理员易犯错误及解决方法汇总
  2. Python语言学习之文件格式后缀那些事:python和常见各种文件格式后缀介绍、使用方法之详细攻略
  3. linux 修改IP, DNS 命令
  4. mysql insert 主键冲突_insert 时防止出现主键冲突错误的方法
  5. 零基础零代码,也能一周学会动态报表?这个方法很多人都不知道
  6. 同步和异步概念(由DZW前端框架引发的百度地图api无法加载问题总结)
  7. 神经网络入门概念和框架理解(YOLOv1v2v3改进分析)
  8. linux路由内核实现分析(一)----邻居子节点(1)
  9. 毕业3年,我换了4份工作:好工作,是这样“熬”出来的
  10. python标准库math中用来计算平方根的函数是_Python程序设计的复习题资料合集免费下载...
  11. 基于海康摄像头进行人脸识别
  12. PDF旋转使用的转换器有哪些
  13. 程序员薪酬,未来的薪酬趋势
  14. 组合数C(n,m)的四种计算方法
  15. 解决win10通过KMS激活的出现浏览器主页被修改为hao.qquu.com问题
  16. 价值千万的职业操盘手教程
  17. 【转载】nuke命令行渲染方法-多线程渲染!
  18. 浏览器直接打开excle文件
  19. 服务器系统升级介绍,服务器操作系统升级方案
  20. Unity-网络开发(二)

热门文章

  1. 阿里巴巴为何坚持对混沌工程的研发迭代?
  2. python中的copy.deepcopy()
  3. 移动的一个比微软所有漏洞加起来都要严重的漏洞
  4. 使用Ellisys抓取蓝牙空中包
  5. 03 switch循环语句
  6. abovedisplayskip无效_latex中页面距离的设置
  7. 关联查询子查询效率简单比照
  8. 计算机在药店管理系统中的应用,计算机系统在药店管理系统中的应用(国外英语资料).doc...
  9. react:hash_亲爱的React:感谢信
  10. 每日N+1题 -- 算法练习 Day9