嵌入式linux LCD驱动

裸机编写驱动流程如下:

        1,初始化IMX6U的eLCCDIF控制器,重点是LCD屏幕宽(width),高(height),hspw,hbp,hpf,vspw,vbp,和vfp等信息。

        2,初始化LCD像素时钟。

        3,设置RGBLCD显存。

        4,应用程序直接通过操作显存来实现操作LCD,实现在LCD上显示字符,图片等信息。

         在Linux中应用程序最终也是通过操作RGBLCD的显存来实现LCD上显示字符,图片等信息。在裸机中我们可以随意的分配显存,但是在linux系统中的内存管理很严格,显存是需要申请的,不是你想用就用,因为虚拟内存的存在,驱动程序设置的显存和应用程序访问的显存是同一片物理地址。

        为了解决上面的问题,Framebuffer(帧缓冲)诞生了,简称fb。fb是一种机制,将系统中所有跟显示有关的硬件和软件集合起来,虚拟出一个fb设备当我们编写好LCD驱动以后就会生成一个名为、dev/fbX(X=1,2,..)的设备,应用程序通过访问dev/fbX这个设备就可以访问LCD。NXP 官方的 Linux 内核默认已经开启了 LCD 驱动,因此我们是可以看到/dev/fb0 这样一个设备。

        由于NXP官方已经写好了驱动和设备,我们只需要在原有的设备上更改为我们板子的参数,就可以驱动成功。板子的参数获取肯定是在设备树,所以我们修改设备树信息即可。        

        很明显,上面的lcdif节点信息是所有IMX6ULL芯片板子共有的信息,并不会完整的信息,NXP的为NXP板子肯定有追加信息,我们只需要更改这部分信息即可。

        看到compatible属性值可以想到,肯定有驱动获取设备树信息,所以找到与这个结点相匹配的驱动文件,这个文件就是drivers/video/fbdev/mxsfb.c,此文件下可以找打如下内容。     

         从上面的代码可以看出,这是一个标准的platform驱动,当驱动和设备匹配以后mxsfb_probe函数就会执行。

        Framebuffer 驱动的编写流程,Linux 内核将所有的 Framebuffer 抽象为一个叫做 fb_info 的结构体,fb_info 结构体包含了 Framebuffer 设备的完整属性和操作集合,因此每一个Framebuffer 设备都必须有一个 fb_info。换言之就是,LCD 的驱动就是构建 fb_info,并且向系统注册 fb_info 的过程。fb_info 结构体定义在 include/linux/fb.h 文件里面。

         fb_info结构体成员变量很多,我们重点关注var,fix,fbops,screen_base,screen_size和pseudo_paltte。mxsfb_probe函数的主要内容如下

        1,申请fb_info

        2,初始化fb_info结构体中的各个成员变量

        3,初始化eLCDIF控制器

        4,使用register_framebuffer函数向linux内核注册初始化好的fb_info。

 LCD驱动程序编写

        前面已经说过,6ULL的eLCDIF接口驱动NXP已经编写好了。因此LCD驱动部分我们不需要修改,我们需要做的就是按照所使用的LCD来修改设备树,主要注重是哪个地方:

  •  LCD所使用的IO
  •  LCD屏幕节点修改,修改相应的属性值,换成我们所使用的LCD屏幕参数
  •  LCD背光节点信息修改,要根据实际所使用的背光IO来修改相应的设备节点信息。

1,LCD屏幕IO配置

        这个其实NXP都已经写好了,但是我们还是需要看一看我们的屏幕引脚是否对应起来。打开 imx6ull-alientek-emmc.dts 文件,在 iomuxc 节点中找到如下内容:        

         2~27 行,子节点 pinctrl_lcdif_dat,为 RGB LCD 24 根数据线配置项。

        30~36 行,子节点 pinctrl_lcdif_ctrlRGB LCD 4 根控制线配置项,包括 CLK,ENABLEVSYNC HSYNC

        第 37~40 行,子节点 pinctrl_pwm1LCD 背光 PWM 引脚配置项。这个引脚要根据实际情况设置,尽量LCD 的背光 IO 尽量和半导体厂商的官方开发板一致。

2,LCD屏幕参数节点修改

       继续在 imx6ull-alientek-emmc.dts 文件中找到 lcdif 节点,节点内容如下所示:  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值