Skip to content

Latest commit

 

History

History
92 lines (82 loc) · 4.26 KB

LCD驱动.md

File metadata and controls

92 lines (82 loc) · 4.26 KB

RGB 显示屏

Framebuffer "fb"

  • 在系统中的的挂载路径: /dev/fb* (是个字符设备)

  • 数据结构: include/linux/fb.h 。 Linux内核将所有的 Framebuffer 抽象一个叫做 fb_info 结构体

        struct fb_info
        {
            atomic_t count;
            int node;
            int flags;
            struct mutex lock;              /* 互斥锁 */
            struct mutex mm_lock;           /* 互斥锁,用于 fb_mmap 和 smem_*域*/
            struct fb_var_screeninfo var;   /* 当前可变参数 */
            struct fb_fix_screeninfo fix;   /* 当前固定参数 */
            struct fb_monspecs monspecs;    /* 当前显示器特性 */
            struct work_struct queue;       /* 帧缓冲事件队列 */
            struct fb_pixmap pixmap;        /* 图像硬件映射 */
            struct fb_pixmap sprite;        /* 光标硬件映射 */
            struct fb_cmap cmap;            /* 当前调色板 */
            struct list_head modelist;      /* 当前模式列表 */
            struct fb_videomode *mode;      /* 当前视频模式 */
            ···
            struct fb_ops *fbops;           /* 帧缓冲操作函数集 */
            struct device *device;          /* 父设备 */
            struct device *dev;             /* 当前 fb 设备 */
            int class_flag;                 /* 私有 sysfs 标志 */
            ···
            char __iomem *screen_base;      /* 虚拟内存基地址(屏幕显存) */
            unsigned long screen_size;      /* 虚拟内存大小(屏幕显存大小) */
            void *pseudo_palette;           /* 伪 16 位调色板 */
        }

    重点关注的 var、 fix、 fbops、 screen_base、 screen_size和 pseudo_palette

  • API

    1. int register_framebuffer(struct fb_info *fb_info) 向 Linux 内核注册初始化好的 fb_info fb_info: 需要上报的 fb_info 返回值: 0:成功 负值:失败
  • 内核代码demo 路径:drivers/video/fbdev/mxsfb.c 其中,该驱动文档函数 mxsfb_probe函数,该函数主要工作内容: 1. 申请 fb_info。 2. 初始化 fb_info 结构体中的各个成员变量。 3. 初始化 eLCDIF 控制器。 4. 向 Linux 内核注册初始化好的 fb_info

实验

  • 步骤
    1. 关注 自己的设备树文件 xxxx.dts pinctrl_lcdif_dat 节点显示了显示屏的数据接口 pinctrl_lcdif_ctrl 节点显示了配置接口 pinctrl_pwm1 节点显示了背光控制IO

    2. 关注 lcdif 节点 ,该节点记录了 不同显示屏的相关参数(根据自用的TFT来修改) 自己买的开发板显示屏是ATK-7084 4.3寸RGB 800*480

      相关参数: 水平显示参数 800 HSPW(thp) 1 HBP(thb) 46 HFP(thf) 210 垂直显示参数 480 VSPW(tvp) 1 VBP(tvb) 23 VFP(tvf) 22 像素时钟 33.3MHz

      像素时钟计算公式: (VSPW+VBP+LINE+VFP) * (HSPW + HBP + HOZVAL + HFP) * 60= (1+23+22+480)*(1+46+800+210)*60 = 33.3MHz = 526 * 1057 * 60 = 33358920

    3. 背光灯所使用的的PWM通道,pwm节点(IO)

    4. backlight 节点设置与背光灯相关的参数

    5. 重新编译设备树文件 make dtbs

    6. 重启设备之后,显示屏会显示企鹅

    7. 在系统重启过程中,在uboot启动阶段,重新设置 bootargs 参数 (让LCD作为控制台)

       setenv bootargs 'console=tty1 console=ttymxc0,115200 root=/dev/nfs rw nfsroot=192.168.18.101:/home/cxn/linux/nfs/rootfs ip=192.168.18.103:192.168.18.101:192.168.18.1:255.255.255.0::eth0:off'
    8. 修改开发板的根文件系统中的文件 /home/cxn/linux/nfs/rootfs/etc/inittab 文件,加入内容

          tty1::askfirst:-/bin/sh
    9. 设置LCD背光灯的亮度操作 在串口终端输入

      echo 7 >/sys/devices/platform/backlight/backlight/backlight/brightness
    10. 在 Linux 源码中找到 drivers/tty/vt/vt.c 找出 blankinterval 变量,修改该值来修改显示屏无操作休眠时间