【Linux-LCD 驱动】

Linux-LCD 驱动

  • ■ Framebuffer 简称 fb
  • ■ LCD 驱动程序编写
    • ■ 1、LCD 屏幕 IO 配置
    • ■ 2、LCD 屏幕参数节点信息修改
    • ■ 3、LCD 屏幕背光节点信息
    • ■ 4、使能 Linux logo 显示
  • ■ 设置 LCD 作为终端控制台
    • ■ 1、设置 uboot 中的 bootargs
    • ■ 2、修改/etc/inittab 文件
  • ■ LCD 背光调节
  • ■ LCD 自动关闭解决方法
    • ■ 1、按键盘唤醒
    • ■ 2、关闭 10 分钟熄屏功能

■ Framebuffer 简称 fb

fb 是一种机制,将系统中所有跟显示有关的硬件以及软件集合起来,虚拟出一个 fb 设备,
当我们编写好 LCD 驱动以后会生成一个名为/dev/fbX(X=0~n)的设备,应用程序通过访问/dev/fbX 这个设备就可以访问 LCD.
因此我们是可以看到/dev/fb0 这样一个设备
/dev/fb0 是个字符设备.因此肯定有file_operations 操作集
Linux 内核将所有的 Framebuffer 抽象为一个叫做 fb_info 的结构体, fb_info 结构体包含了 Framebuffer 设备的完整属性和操作集合,
fb_info 结构体定义在 include/linux/fb.h 文件里面
fb_info 结构体的成员变量很多,我们重点关注 var、 fix、 fbops、 screen_base、 screen_size和 pseudo_palette。 mxsfb_probe 函数

■ LCD 驱动程序编写

■ 1、LCD 屏幕 IO 配置

// 修改dts 文件      24 根数据线配置项。
pinctrl_lcdif_dat: lcdifdatgrp {      fsl,pins = <MX6UL_PAD_LCD_DATA00__LCDIF_DATA00 0x79      电气属性都设置为 0X79        0X49 驱动能力改为 R0/1MX6UL_PAD_LCD_DATA01__LCDIF_DATA01 0x79MX6UL_PAD_LCD_DATA02__LCDIF_DATA02 0x79MX6UL_PAD_LCD_DATA03__LCDIF_DATA03 0x79MX6UL_PAD_LCD_DATA04__LCDIF_DATA04 0x79MX6UL_PAD_LCD_DATA05__LCDIF_DATA05 0x79MX6UL_PAD_LCD_DATA06__LCDIF_DATA06 0x79MX6UL_PAD_LCD_DATA07__LCDIF_DATA07 0x79MX6UL_PAD_LCD_DATA08__LCDIF_DATA08 0x79MX6UL_PAD_LCD_DATA09__LCDIF_DATA09 0x79MX6UL_PAD_LCD_DATA10__LCDIF_DATA10 0x79MX6UL_PAD_LCD_DATA11__LCDIF_DATA11 0x79MX6UL_PAD_LCD_DATA12__LCDIF_DATA12 0x79MX6UL_PAD_LCD_DATA13__LCDIF_DATA13 0x79MX6UL_PAD_LCD_DATA14__LCDIF_DATA14 0x79MX6UL_PAD_LCD_DATA15__LCDIF_DATA15 0x79MX6UL_PAD_LCD_DATA16__LCDIF_DATA16 0x79MX6UL_PAD_LCD_DATA17__LCDIF_DATA17 0x79MX6UL_PAD_LCD_DATA18__LCDIF_DATA18 0x79MX6UL_PAD_LCD_DATA19__LCDIF_DATA19 0x79MX6UL_PAD_LCD_DATA20__LCDIF_DATA20 0x79MX6UL_PAD_LCD_DATA21__LCDIF_DATA21 0x79MX6UL_PAD_LCD_DATA22__LCDIF_DATA22 0x79MX6UL_PAD_LCD_DATA23__LCDIF_DATA23 0x79>;
}; // 4 根控制线配置项,包括 CLK、ENABLE、 VSYNC 和 HSYNC
pinctrl_lcdif_ctrl: lcdifctrlgrp {fsl,pins = <MX6UL_PAD_LCD_CLK__LCDIF_CLK 0x79MX6UL_PAD_LCD_ENABLE__LCDIF_ENABLE 0x79MX6UL_PAD_LCD_HSYNC__LCDIF_HSYNC 0x79MX6UL_PAD_LCD_VSYNC__LCDIF_VSYNC 0x79>;
};pinctrl_pwm1: pwm1grp {fsl,pins = <MX6UL_PAD_GPIO1_IO08__PWM1_OUT 0x110b0>;
};

■ 2、LCD 屏幕参数节点信息修改

&lcdif {pinctrl-names = "default";pinctrl-0 = <&pinctrl_lcdif_dat       /* 使用到的 IO */&pinctrl_lcdif_ctrl// &pinctrl_lcdif_reset>;	 删除掉原来的 pinctrl_lcdif_reset,因为没有用到屏幕复位 IO,display = <&display0>;status = "okay";display0: display {    /* LCD 属性信息 */bits-per-pixel = <24>;    /* 一个像素占用 24bit */bus-width = <24>;     /* 总线宽度 */display-timings {native-mode = <&timing0>; /* 时序信息 */timing0: timing0 {clock-frequency = <9200000>;    /* 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 数据线先极性 */};};};
};

■ 3、LCD 屏幕背光节点信息

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

backlight {compatible = "pwm-backlight";pwms = <&pwm1 0 5000000>;      设置背光使用pwm1, PWM 频率为 200Hz。brightness-levels = <0 4 8 16 32 64 128 255>;   设置背 8 级背光(0~7), 对应占空比为0%1.57%3.13%6.27%12.55%25.1%50.19%100%default-brightness-level = <6>; 设置默认背光等级为 6,也就是 50.19%的亮度status = "okay";
};&pwm1 {pinctrl-names = "default";pinctrl-0 = <&pinctrl_pwm1>;status = "okay";
};&iomuxc {pinctrl-names = "default";pinctrl-0 = <&pinctrl_hog_1>;imx6ul-evk { 节点下面添加pinctrl_pwm1: pwm1grp {fsl,pins = <MX6UL_PAD_GPIO1_IO08__PWM1_OUT   0x110b0>;};

在这里插入图片描述

■ 4、使能 Linux logo 显示

Linux 内核一般都会默认,开启 小企鹅 logo 显示如何使能 Linux 小企鹅 logo 显示
在这里插入图片描述
三个选项分别对应黑白、 16 位、 24 位色彩格式的 logo。

■ 设置 LCD 作为终端控制台

■ 1、设置 uboot 中的 bootargs

	setenv bootargs 'console=tty1 console=ttymxc0,115200 root=/dev/nfs rw nfsroot=192.168.1.250:
/home/zuozhongkai/linux/nfs/rootfs ip=192.168.1.251:192.168.1.250:192.168.1.1:255.255.255.0::eth0:off

console=tty1 console=ttymxc0,115200
第一次设置 console=tty1,也就是设置 LCD 屏幕为控制台,第二遍又设置 console=ttymxc0,115200,也就是设置串口也作为控制台。
相当于我们打开了两个 console,一个是 LCD,一个是串口,大家重启开发板就会发现 LCD 和串口都会显示 Linux 启动 log 信息。

■ 2、修改/etc/inittab 文件

打开开发板根文件系统中的/etc/inittab 文件,在里面加入下面这一行:

tty1::askfirst:-/bin/sh

在这里插入图片描述
重启以后开发板 LCD 屏幕最后一行会显示下面一行语句:Please press Enter to activate this console 按下回车键使能当前终端

我们可以通过下面这一行命令向LCD 屏幕输出“hello linux!”
echo hello linux > /dev/tty1

至此,我们就拥有了两套终端,一个是基于串口的 SecureCRT,一个就是我们开发板的 LCD屏幕,但是为了方便调试,我们以后还是以 SecureCRT 为主。

■ LCD 背光调节

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

/sys/devices/platform/backlight/backlight/backlight
brightness 表示当前亮度等级, max_bgigntness 表示最大亮度等级。
比如设置屏幕亮度等级为 7,那么可以使用如下命令: echo 7 > brightness

■ LCD 自动关闭解决方法

默认情况下 10 分钟以后 LCD 就会熄屏,这个并不是代码有问题,而是 Linux 内核设置的,就和我们用手机或者电脑一样,一段时间不操作的话屏幕就会熄灭,以节省电能。

■ 1、按键盘唤醒

开发板上的 KEY按键注册为了回车键,因此按下开发板上的 KEY 按键即可唤醒屏幕。如果开发板上没有按键的话可以外接 USB 键盘,然后按下 USB 键盘上的回车键唤醒屏幕。

■ 2、关闭 10 分钟熄屏功能

Linux 源码中找到 drivers/tty/vt/vt.c 这个文件,在此文件中找到 blankinterval 变量

static int vesa_blank_mode;
static int vesa_off_interval;
static int blankinterval = 10*60;   

blankinterval 变量控制着 LCD 关闭时间,默认是 10*60,也就是 10 分钟 将 blankinterval的值改为 0 即可关闭 10 分钟熄屏的功能,

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/17321.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

鸿蒙知识点总结

1 Stage模型应用程序包结构 在开发态&#xff0c;一个应用包含一个或者多个Module&#xff0c;可以在DevEco Studio工程中创建一个或者多个Module。Module是HarmonyOS应用/服务的基本功能单元&#xff0c;包含了源代码、资源文件、第三方库及应用/服务配置文件&#xff0c;每一…

快速上手 HuggingFace

HuggingFace HuggingFace 是类似于 GitHub 的社区&#xff0c;它主要提供各种的模型的使用&#xff0c;和 github 不同的是&#xff0c;HuggingFace 同时提供了一套框架&#xff0c;进行模型推理&#xff0c;模型训练、和模型库文件的管理等等。本文将介绍&#xff0c;如何快速…

echarts学习篇

一、使用echarts 1.引入 Apache ECharts <!DOCTYPE html> <html> <head> <meta charset"utf-8" /> <!-- 引入刚刚下载的 ECharts 文件 --> <script src"echarts.js"></script> </head> </html> 2.…

深度神经网络——什么是自动编码器?

自动编码器 自动编码器&#xff08;Autoencoders&#xff09;是无监督学习领域中一种重要的神经网络架构&#xff0c;它们主要用于数据压缩和特征学习。 自动编码器的定义&#xff1a; 自动编码器是一种无监督机器学习算法&#xff0c;它通过反向传播进行训练&#xff0c;目标…

OWASP top10--SQL注入(三、手工注入)

目录 access数据库 手工注入过程&#xff1a; 猜解数据库表名 猜解数据库表名里面的字段 猜解字段内容 SQL注入中的高级查询 mssql数据库 手工注入过程&#xff1a; sa权限 ​编辑dbowner权限 public权限 mysql数据库 1、对服务器文件进行读写操作(前提条件) 需要知…

文刻创作ai工具官网免费工具

文刻创作ai工具官网免费工具 Docshttps://iimenvrieak.feishu.cn/docx/O0UedptjbonN4UxyEy7cPlZknYc 文刻是一种可以帮助用户进行创作的AI工具。 它使用自然语言处理和机器学习技术&#xff0c;可以生成文章、故事、诗歌等文本内容。 用户可以通过输入一些关键词或指定一定的…

浙江大学数据结构MOOC-课后习题-第七讲-图4 哈利·波特的考试

题目汇总 浙江大学数据结构MOOC-课后习题-拼题A-代码分享-2024 题目描述 代码展示 照着教程视频来的&#xff0c;没啥好说的捏 #include <cstdlib> #include <iostream>#define MAXSIZE 100 #define IFINITY 65535 typedef int vertex; typedef int weightType;/…

为什么大部分新手做抖音小店赚不到钱?

大家好&#xff0c;我是喷火龙。 今天来给大家聊聊&#xff0c;为什么大部分新手做抖店赚不到钱&#xff1f; 不知道大家想过这个问题没有&#xff0c;可能有些人把赚不到钱的原因归结于市场、或者平台、又或者运营技术以及做店经验。 但我觉得这些都不是重点&#xff0c;重…

爬虫实战教程:深入解析配乐网站爬取1000首MP3

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、引言 二、实战前准备 1. 选择目标网站 2. 分析网页结构 三、爬虫工作流程详解 1. 发…

诚心分享!主食冻干横向对比:希喂、爱立方、K9等谁最值得入手?

主食冻干到底有必要喂吗&#xff1f;七年铲龄铲屎官告诉你&#xff0c;是真的很有必要喂&#xff01; 这些年随着宠物经济的发展、科学养宠的普及&#xff0c;现在养猫不仅局限在让猫吃饱就行&#xff0c;更多人开始关注到猫的饮食健康。大量的实际喂养案例证明了&#xff0c;传…

第2章 物理层

王道学习 考纲内容 &#xff08;一&#xff09;通信基础 信道、信号、带宽、码元、波特、速率、信源与信宿等基本概念&#xff1b; 奈奎斯特定理与香农定理&#xff1b;编码与调制&#xff1b; 电路交换、报文交换与分组交换&#xff1b;数…

接口响应断言-json

json认识JSONPath源码类学习/json串的解析拓展学习 目的&#xff1a;数据返回值校验测试 json认识 json是什么-是一种数据交换格式&#xff0c;举例平时看到的json图2&#xff0c;在使用中查看不方便&#xff0c;会有格式转化的平台&#xff0c;json格式的展示 JSON在线视图…

推荐二轮电动车仪表盘蓝牙主芯片方案-HS6621CGC

随着国内二轮电动车的火热开启&#xff0c;电动车的智能化程度越来越高&#xff1b;电动车的智能操控需求也越来越高&#xff0c;现在介绍蓝牙控制面板的一些功能&#xff1b;例如&#xff1a;定位&#xff08;GNSS&#xff09;&#xff0c;设防&#xff0c;实时上报数据&#…

什么是光栅化?

一、 什么是光栅化? 光栅化作用是将几何数据变换后转换为像素呈现在显示设备上的一个过程。几何数据转换为像素&#xff0c; 本质是坐标变换、几何离散化&#xff0c;如下&#xff1a; 其中包含了坐标变换和几何离散化&#xff1a; 二、光栅化完成了什么 3D中&#xff0c;物…

element-ui 实现输入框下拉树组件(2024-05-23)

用element-ui的 el-input&#xff0c;el-tree&#xff0c;el-popover组件组合封装 import url("//unpkg.com/element-ui2.15.14/lib/theme-chalk/index.css"); <script src"//unpkg.com/vue2/dist/vue.js"></script> <script src"//…

C数据结构:二叉树

目录 二叉树的数据结构 前序遍历 中序遍历 后序遍历 二叉树的创建 二叉树的销毁 二叉树的节点个数 二叉树叶子节点个数 二叉树第K层节点个数 二叉树的查找 层序遍历 判断二叉树是否为完全二叉树 完整代码 二叉树的数据结构 typedef char BTDataType; typedef str…

使用numpy手写一个神经网络

本文主要包含以下内容&#xff1a; 推导神经网络的误差反向传播过程使用numpy编写简单的神经网络&#xff0c;并使用iris数据集和california_housing数据集分别进行分类和回归任务&#xff0c;最终将训练过程可视化。 1. BP算法的推导过程 1.1 导入 前向传播和反向传播的总体…

Unity OutLine 模型外描边效果

效果展示&#xff1a; 下载链接

【Rust日报】ratatui版本更新

[new ver] ratatui v0.26.3 一个构建终端用户界面的库。新版本包括&#xff1a; 修复Unicode 截断 bug对颜色更好地序列化更快的渲染弃用assert_buffer_eq宏暴露错误类型常量函数和类型 官网: https://ratatui.rs/ 链接: https://ratatui.rs/highlights/v0263/ [new lib] ansi2…

618电商选品爆款攻略,谁掌握谁爆单

618电商节是各大电商平台和品牌商家的重要促销节点&#xff0c;选品和营销策略对于销售成绩至关重要。以下是一些选品和营销攻略的要点&#xff1a; 一、市场分析与目标定位 1、分析当前经营类目市场的流行趋势、热门品类以及消费者需求的变化。 目前市场上商品繁多&#xf…