Linux LCD屏幕驱动调参实操

初探 Linux下的 LCD 驱动文中提到过, IMX6ULL的 eLCDIF接口驱动程序已经有半导体厂家NXP编写好了,并且不同分辨率LCD屏的eLCDIF接口驱动代码都是一样的,因此LCD驱动部分无需修改。只需要根据所使用的LCD来调整设备树参数即可,本文使用的是正点原子的IMX6ULL开发板,其LCD的接口IO如下图示:


由上图可知,LCD使用了如下三类IO连接:

– 24 根RGB LCD数据线
– 4 根控制线,PCLK、DE、VSYNC和HSYNC
– 1 根LCD背光PWM引脚线

1. 设备树修改

设备树的修改,涉及以下三个方面:

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

1.1 LCD屏幕IO配置

配置设备树中LCD所使用的IO,通常情况下半导体厂家已经写好了,无需修改。在imx6ull-andyxi-emmc.dts文件,iomuxc节点中能找到如下配置内容:

pinctrl_lcdif_dat: lcdifdatgrp { fsl,pins = < MX6UL_PAD_LCD_DATA00__LCDIF_DATA00 0x79 MX6UL_PAD_LCD_DATA01__LCDIF_DATA01 0x79 MX6UL_PAD_LCD_DATA02__LCDIF_DATA02 0x79 MX6UL_PAD_LCD_DATA03__LCDIF_DATA03 0x79 MX6UL_PAD_LCD_DATA04__LCDIF_DATA04 0x79 MX6UL_PAD_LCD_DATA05__LCDIF_DATA05 0x79 MX6UL_PAD_LCD_DATA06__LCDIF_DATA06 0x79 MX6UL_PAD_LCD_DATA07__LCDIF_DATA07 0x79 MX6UL_PAD_LCD_DATA08__LCDIF_DATA08 0x79 MX6UL_PAD_LCD_DATA09__LCDIF_DATA09 0x79 MX6UL_PAD_LCD_DATA10__LCDIF_DATA10 0x79 MX6UL_PAD_LCD_DATA11__LCDIF_DATA11 0x79 MX6UL_PAD_LCD_DATA12__LCDIF_DATA12 0x79 MX6UL_PAD_LCD_DATA13__LCDIF_DATA13 0x79 MX6UL_PAD_LCD_DATA14__LCDIF_DATA14 0x79 MX6UL_PAD_LCD_DATA15__LCDIF_DATA15 0x79 MX6UL_PAD_LCD_DATA16__LCDIF_DATA16 0x79 MX6UL_PAD_LCD_DATA17__LCDIF_DATA17 0x79 MX6UL_PAD_LCD_DATA18__LCDIF_DATA18 0x79 MX6UL_PAD_LCD_DATA19__LCDIF_DATA19 0x79 MX6UL_PAD_LCD_DATA20__LCDIF_DATA20 0x79 MX6UL_PAD_LCD_DATA21__LCDIF_DATA21 0x79 MX6UL_PAD_LCD_DATA22__LCDIF_DATA22 0x79 MX6UL_PAD_LCD_DATA23__LCDIF_DATA23 0x79 >;
};pinctrl_lcdif_ctrl: lcdifctrlgrp { fsl,pins = < MX6UL_PAD_LCD_CLK__LCDIF_CLK 0x79 MX6UL_PAD_LCD_ENABLE__LCDIF_ENABLE 0x79 MX6UL_PAD_LCD_HSYNC__LCDIF_HSYNC 0x79 MX6UL_PAD_LCD_VSYNC__LCDIF_VSYNC 0x79 >;
};pinctrl_pwm1: pwm1grp { fsl,pins = < MX6UL_PAD_GPIO1_IO08__PWM1_OUT 0x110b0 >;
};

LCD所使用的IO,分为如下三类:

– 子节点 pinctrl_lcdif_dat,为 RGB LCD的 24根数据线配置项。
– 子节点 pinctrl_lcdif_ctrl RGB LCD的 4根控制线配置项,包括 CLK、ENABLE、 VSYNC和 HSYNC。
– 子节点 pinctrl_pwm1 LCD背光 PWM引脚配置项。这个引脚要根据实际情况设置,这里我们建议大家在以后的学习或工作中, LCD的背光 IO尽量和半导体厂商的官方开发板一致。

1.2 LCD屏幕参数节点信息修改

在imx6ull-andyxi-emmc.dts文件中找到lcdif节点,以正点原子的ATK7016 (7寸 1024*600)屏幕为例,节点内容如下所示:

&lcdif { pinctrl-names = "default"; pinctrl-0 = <&pinctrl_lcdif_dat /* 使用到的IO */ &pinctrl_lcdif_ctrl&pinctrl_lcdif_reset>;              display = <&display0>; status = "okay"; display0: display { /* LCD属性信息 */bits-per-pixel = <24>; /* 一个像素占用24bit */ bus-width = <24>; /* 总线宽度 */ display-timings { native-mode = <&timing0>; /* 时序信息 */ timing0: timing0 { clock-frequency = <51200000>; /* LCD像素时钟,单位Hz */ hactive = <1024>; /* LCD X轴像素个数 */ vactive = <600>; /* LCD Y轴像素个数 */ hfront-porch = <160>; /* LCD hfp参数 */ hback-porch = <140>; /* LCD hbp参数 */ hsync-len = <20>; /* LCD hspw参数 */ vback-porch = <20>; /* LCD vbp参数 */ vfront-porch = <12>; /* LCD vfp参数 */ vsync-len = <3>; /* LCD vspw参数 */ hsync-active = <0>; /* hsync数据线极性 */ vsync-active = <0>; /* vsync数据线极性 */ de-active = <1>; /* de数据线极性 */ pixelclk-active = <0>; /* clk数据线先极性 */ }; }; };
};

1.3 LCD屏幕背光节点信息

背光控制IO连接到了I.MX6U的GPIO1_IO08引脚上,将其复用为PWM1_OUT,通过PWM信号来控制LCD屏幕背光的亮度。

在imx6ull-andyxi-emmc.dts中可找到背光节点的配置信息:

pinctrl_pwm1: pwm1grp { fsl,pins = < MX6UL_PAD_GPIO1_IO08__PWM1_OUT 0x110b0 >;
};
&pwm1 { pinctrl-names = "default"; pinctrl-0 = <&pinctrl_pwm1>; status = "okay";
};
backlight { compatible = "pwm-backlight"; pwms = <&pwm1 0 5000000>; brightness-levels = <0 4 8 16 32 64 128 255>; default-brightness-level = <6>; status = "okay";
};

2. 编译测试

2.1 LCD基本测试

配置好设备树后,使用make dtbs命令编译设备树,使用新的设备树启动Linux内核即可。为了方便观察LCD驱动是否正常工作,可以使能Linux的小企鹅logo显示功能。在Linux内核源码根目录下,使用make menuconfig命令打开图形化配置界面,按下面的路径,使能logo显示功能

-> Device Drivers -> Graphics support -> Bootup logo (LOGO [=y]) -> Standard black and white Linux logo -> Standard 16-color Linux logo -> Standard 224-color Linux logo 如图


重新编译Linux内核,使用新的zImage镜像启动系统,若LCD驱动正常,会在屏幕左上角出现一个彩色的小企鹅 logo,屏幕背景色为黑色,如下图示

2.2 LCD作为终端控制台

Linux开发中,通常使用电脑上的串口软件作为Linux开发板终端,开发板通过串口和串口软件进行通信。LCD驱动起来后,可以将其设置为终端,也就是开发板使用自己的显示设备作为自己的终端,接上键盘就可以 直接在开发板上敲命令了,将LCD设置为终端控制台的方法如下:

  • 设置 uboot中的 bootargs:重启开发板,进入uboot命令行,重新设置bootargs参数的console内容
setenv bootargs 'console=tty1 console=ttymxc0,115200 root=/dev/nfs rw nfsroot=192.168.1.100: /home/andyxi/linux/nfs/rootfs ip=192.168.1.200:192.168.1.100:192.168.1.1:255.255.255.0::eth0:off'

注意:console设置了两遍 console,tty1 是设置LCD屏幕为控制台,ttymxc0,115200是设置串口也作为控制台,相当于打开了两个 console

  • 修改 /etc/inittab 文件:打开开发板根文件系统中的/etc/inittab文件,加入下面代码
tty1::askfirst:-/bin/sh

上述修改完后,重启开发板,LCD屏幕即可作为终端控制台使用,可以接上键盘直接在开发板上敲命令了

2.3 LCD背光调节

背光设备树节点设置了 8个等级的背光调节,可以设置为 0~7,我们可以通过设置背光等级来实现 LCD背光亮度的调节,进入如下目录:

/sys/devices/platform/backlight/backlight/backlight

上图中brightness表示当前亮度等级, max_bgigntness表示最大亮度等级,可使用cat命令查看内容

若要修改屏幕亮度,只需要向 brightness写入需要设置的屏幕亮度等级即可

echo 7 > brightness

2.4 LCD自动熄屏

Linux内核中默认设置10分钟不操作LCD就会熄屏,以节省电能。解决该问题有多种方法

  • 按键或键盘唤醒LCD
  • 修改Linux内核设置:修改Linux源码中drivers/tty/vt/vt.c文件中的blankinterval变量后,重新编译内核
static int vesa_blank_mode;
static int vesa_off_interval;
static int blankinterval = 10*60; //10*60秒,改为0后即可关闭熄屏功能
  • 使用APP关闭熄屏:编写LCD常亮APP,并开机启动脚本中启动该APP
/***** lcd_always_on.c *****/
#include <fcntl.h>
#include <stdio.h>
#include <sys/ioctl.h> int main(int argc, char *argv[]) { int fd; fd = open("/dev/tty1", O_RDWR); write(fd, "\033[9;0]", 8); close(fd); return 0;
}

编译生成可执行文件后,将其拷贝到开发板根文件系统的==/usr/bin==目录中,给予可执行权限,设置为开机自启动,打开 /etc/init.d/rcS,在此文件最后面加入如下内容:

cd /usr/bin
./lcd_always_on
cd ..

Linux LCD屏幕驱动调参实操相关推荐

  1. 基于WT2003H语音芯片在LCD屏幕驱动的应用实例解析

    基于WT2003H语音芯片在LCD屏幕驱动的应用实例解析 随着现代生活节奏的加快,简单快捷的产品越来越受到人们的青睐,产品也越来越注重人机交互和简单明了的用户体验,一款具备LCD屏幕的产品往往更具有竞 ...

  2. Linux LCD设备驱动详解

    本文是基于mini2440开发板Linux版本号是linux-2.6.32.2的学习笔记 一. LCD device硬件信息 1.LCD控制器的寄存器地址从 0X4D000000开始 2.lcd de ...

  3. linux 内核 屏幕 驱动,Linux液晶显示屏驱动设计

    Linux设备驱动程序属于Linux内核的一部分,并在Linux内核中扮演着十分重要的角色.它们像一个个"黑盒子",使某个特定的硬件响应一个定义良好的内部编程接口,同时完全隐蔽了设 ...

  4. LInux学习笔记(四)-----实操排雷

    参考书籍:linux就该这么学 4 Vim 编辑器与 Shell 命令脚本 4.1 Vim 文本编辑器(在 Vim 中,无法直接从输入模式切换到末行模式) 4.1.1 配置 Yum 软件仓库 注:书中 ...

  5. 番茄钟怎么调_实操番茄钟使用方法

    听到这个番茄钟的时候,是一次我们在每周五的共读社,听到这个词的时候,满是纳闷,好奇心促使我去app上去找寻,没错,找到后就放在那里,自己也没再研究明白. 第二次听说,是一森要跟我们分享,可是自己工作时 ...

  6. Linux学习笔记(一)------实操排雷

    参考兄弟连b站网课 1.1如果没有ifconfig 使用sudo apt install net-tools 下载:(ifconfig已经被淘汰所以需要另外下载) 1.2如果网卡是ens33: (1) ...

  7. HQL调优实操1 —— reduce卡住

    1 问题 任务执行缓慢.卡顿日志如下: 2021-07-01 10:19:04 log INFO - Starting Job = job_1625097332819_16902, Tracking ...

  8. Linux入门笔记-尚硅谷韩顺平-基础篇实操篇

    文章目录 课程导论 基础篇 Linux入门 Linux介绍 Linux和Unix的关系 Linux和Windows比较 基础篇 Linux的目录结构 基本介绍 具体的目录结构 实操篇 vi和vim的使 ...

  9. STM32MP157A驱动开发 | 04 - Linux DRM显示驱动框架

    Linux中主流的显示框架有两种:DRM框架和FB框架. DRM框架:Direct Rendering Module,可以统一管理GPU显示 FB框架:Frame Buffer,不能处理基于3D加速的 ...

最新文章

  1. Servlet深入服务之响应response
  2. ASP.NET中分步骤向导组件Wizard组件的使用
  3. 二级java题型及分值_2016年全国计算机二级java语言程序设计考试大纲
  4. 视频直播常见问题与解决办法汇总【系列三—直播推流】
  5. C语言 sizeof 函数 - C语言零基础入门教程
  6. C#配置IIS搭建网站的工具类
  7. linux驱动编写(pwm驱动)
  8. Xshell如何进行文件上传?
  9. c# winform 打印 窗体 及 窗体控件内容 的 初级尝试
  10. 让你彻底掌握python编程
  11. 量子物理史话 第四章 白云深处
  12. H5端input标签通过手机软键盘进行搜索,并关闭软键盘
  13. 快速部署阿里云WebIDE(DevStudio)并参与开源项目开发
  14. 华为牛人在华为工作十年的感悟!
  15. 单片机c语言控制步进电机发脉冲,单片机如何写用脉冲控制步进电机呢?
  16. uploadify 2.1.0 java spring mvc 2003版excel 附件上传
  17. go 及GoLand 环境安装
  18. 有语音的计算机玩法,哈哈!刚出来的新玩法:喊一嗓子就能让电脑关机
  19. 分时系统和实时系统(操作系统)
  20. Qt读写Excel--QXlsx基本使用1

热门文章

  1. 使用matlab从气象数据文件提取所需站点信息到excel
  2. 宝塔面板备份和恢复WordPress网站完整教程
  3. Gopro写入文件失败SD卡要求格式化数据恢复建议
  4. 彩灯控制器课程设计vhdl_基于VHDL的彩灯控制器设计与实现毕业设计(DOC毕业设计论文)...
  5. 基于SSM开发校园外卖零食购物商城系统
  6. wifinbsp;驱动nbsp;进阶11
  7. 全国、县区级行政区高程和坡度参数计算结果数据
  8. 高斯投影正反算的代码
  9. 各厂商服务器存储设备默认密码
  10. 什么是 IconFont?有什么优缺点?