Linux学习第34天:Linux LCD 驱动实验(一):星星之火可以燎原
Linux版本号4.1.15 芯片I.MX6ULL 大叔学Linux 品人间百味 思文短情长
LCD显示屏是由一个一个的像素点构成的。当你能控制一个像素点的亮暗及颜色变化的时候,你就能让LCD显示瓶显示五颜六色的整幅图案。甚至可以让LCD屏幕显示一个动态的视频。这正如你点燃了一颗火柴,整个草原都能很快被点亮。
本节笔记主要学习Linux LCD驱动试验,主要内容包括LCD驱动简析、硬件原理图分析、驱动程序编写及运行测试。其中驱动程序的编写以及运行测试作为本节的重点内容。本小结将分为2次笔记进行总结,今天主要学习LCD驱动简析和硬件原理图分析。

一、Linux下LCD驱动简析
1、Framebuffer设备
Linux中应用程序最终也是通过操作RGB LCD的显存在LCD上显示字符、图片的。驱动程序设置的显存和应用程序访问的显存要是同一片物理内存。
将系统中所有跟显示有关的硬件以及软件集合起来,虚拟出一个 fb 设备。
编写好 LCD 驱动以后会生成一个名为/dev/fbX(X=0~n)的设备,应用程序通过访问/dev/fbX 这个设备就可以访问 LCD。
/dev/fb0 是个字符设备,因此肯定有file_operations 操作集,
2、LCD驱动简析
不同分辨率的 LCD 屏幕其 eLCDIF 控制器驱动代码都是一样的,只需要修改好对应的屏
幕参数即可。
Linux 下Framebuffer 驱动的编写流程:
LCD 的驱动就是构建 fb_info,并且向系统注册 fb_info结构体(属性、操作集合)的过程。
mxsfb_probe 函数的主要工作内容为:
①、申请 fb_info。
②、初始化 fb_info 结构体中的各个成员变量。
③、初始化 eLCDIF 控制器。
④、使用 register_framebuffer 函数向 Linux 内核注册初始化好的 fb_info。
int register_framebuffer(struct fb_info *fb_info)
struct mxsfb_info *host;
host 结构体指针变量,表示 I.MX6ULL 的 LCD 的主控接口, mxsfb_info 结构
体是 NXP 定义的针对 I.MX 系列 SOC 的 Framebuffer 设备结构体。
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
从设备树中获取 eLCDIF 接口控制器的寄存器首地址,设备树中 lcdif 节点已经设置了 eLCDIF 寄存器首地址为 0X021C8000,因此 res=0X021C8000。
host = devm_kzalloc(&pdev->dev, sizeof(struct mxsfb_info),
GFP_KERNEL);
给 host 申请内存, host 为 mxsfb_info 类型结构体指针。
fb_info = framebuffer_alloc(sizeof(struct fb_info), &pdev->dev);
给 fb_info 申请内存,也就是申请 fb_info。
host->fb_info = fb_info;
fb_info->par = host;
设置 host 的 fb_info 成员变量为 fb_info,设置 fb_info 的 par 成员变量为host。通过这一步就将前面申请的 host 和 fb_info 联系在了一起。
ret = devm_request_irq(&pdev->dev, irq, mxsfb_irq_handler, 0,
dev_name(&pdev->dev), host);
申请中断,中断服务函数为 mxsfb_irq_handler。
host->base = devm_ioremap_resource(&pdev->dev, res);
对从设备树中获取到的寄存器首地址(res)进行内存映射,得到虚拟地址,并保存到 host 的 base 成员变量。因此通过访问 host 的 base 成员即可访问 I.MX6ULL 的整个 eLCDIF寄存器。
fb_info->pseudo_palette = devm_kzalloc(&pdev->dev, sizeof(u32) *16, GFP_KERNEL);
给 fb_info 中的 pseudo_palette申请内存。
ret = mxsfb_init_fbinfo(host);
调用 mxsfb_init_fbinfo 函数初始化 fb_info,重点是 fb_info 的 var、 fix、 fbops,creen_base 和 screen_size。其中 fbops 是 Framebuffer 设备的操作集。
mxsfb_init_fbinfo 函数通过调用 mxsfb_init_fbinfo_dt 函数从设备树中获取到 LCD 的各个参数信息。最后, mxsfb_init_fbinfo函数会调用 mxsfb_map_videomem 函数申请 LCD 的帧缓冲内存(也就是显存)。
mxsfb_set_par(fb_info);
mxsfb_enable_controller(fb_info);
设置 eLCDIF 控制器的相应寄存器。
ret = register_framebuffer(fb_info);
调用 register_framebuffer 函数向 Linux 内核注册 fb_info。
二、硬件原理图分析

三个 SGM3157 的目的是在未使用 RGBLCD 的时候将 LCD_DATA7、LCD_DATA15 和 LCD_DATA23 这三个线隔离开来,因为 ALIENTEK 的屏幕的 LCD_R7/G7/B7这几个线用来设置 LCD 的 ID,所以这几根线上有上拉/下拉电阻。但是 I.MX6U 的 BOOT 设置也用到了LCD_DATA7、 LCD_DATA15 和 LCD_DATA23 这三个引脚,所以接上屏幕以后屏幕上的 ID 电阻就会影响到 BOOT 设置,会导致代码无法运行,所以先将其隔离开来,如果要使用 RGB LCD 屏幕的时候再通过 LCD_DE 将其“连接”起来。我们需要 40P 的 FPC 线将 ATK7016屏幕和 I.MX6U-ALPHA 开发板连接起来,如图:

以下内容将在下一节中进行学习:
三、LCD驱动程序编写
四、运行测试
1、LCD屏幕基本测试
2、设置LCD作为终端控制台
3、LCD背光调节
4、LCD自动关闭解决方法
本文为参考正点原子开发板配套教程整理而得,仅用于学习交流使用,不得用于商业用途。
相关文章:
Linux学习第34天:Linux LCD 驱动实验(一):星星之火可以燎原
Linux版本号4.1.15 芯片I.MX6ULL 大叔学Linux 品人间百味 思文短情长 LCD显示屏是由一个一个的像素点构成的。当你能控制一个像素点的亮暗及颜色变化的时候,你就能让LCD显示瓶显示五颜六色的整幅图案。甚至可以让LCD屏幕…...
Flink SQL Window TopN 详解
Window TopN 定义(⽀持 Streaming): Window TopN 是特殊的 TopN,返回结果是每⼀个窗⼝内的 N 个最⼩值或者最⼤值。 应⽤场景: TopN 会出现中间结果,出现回撤数据,Window TopN 不会出现回撤数据…...
leetcode做题笔记216. 组合总和 III
找出所有相加之和为 n 的 k 个数的组合,且满足下列条件: 只使用数字1到9每个数字 最多使用一次 返回 所有可能的有效组合的列表 。该列表不能包含相同的组合两次,组合可以以任何顺序返回。 示例 1: 输入: k 3, n 7 输出: [[1,2,4]] 解释…...
Redis系列-Redis数据类型【3】
目录 Redis系列-Redis数据类型【3】字符串类型(String)SDS (simple dynamic string) 哈希类型(Hash)列表类型(List)集合类型(Set)有序集合类型(ZSet)字符串类…...
机器学习 - 决策树:技术全解与案例实战
目录 一、引言二、决策树基础决策树模型概述构建决策树的关键概念特征选择决策树的生成 决策树的剪枝 三、算法研究进阶提升树和随机森林提升树(Boosted Trees)随机森林(Random Forests) 进化算法与决策树决策树结构的进化 多目标…...
Opus 1.4 编译脚本
Opus 1.4 编译脚本 官网地址:https://www.opus-codec.org/ 仓库地址:https://gitlab.xiph.org/xiph/opus #!/bin/bash# 每次编译删除原来的编译文件 rm build -rf rm install -rf # 创建临时编译目录,避免污染源文件 mkdir build # 定义一…...
二进制搭建及高可用 Kubernetes v1.20
目录 一、实验规划: 二、操作系统初始化配置: 1. 关闭防火墙 selinux: 2. 关闭swap分区: 3. 根据规划设置主机名: 4. 所有主机添加hosts: 5. 调整内核参数: 6. 时间同步: 三、部署 etcd 集群:…...
SpringBoot 使用WebSocket打造在线聊天室
1、WebSocket是HTML5开始提供的一种在单个 TCP 连接上进行全双工通讯的协议。在WebSocket API中,浏览器和服务器只需要做一个握手的动作,然后,浏览器和服务器之间就形成了一条快速通道。两者之间就直接可以数据互相传送。 2、浏览器通过 Java…...
vcpkg安装第三方库,报错fatal error RC1107: invalid usage; use RC /? for Help
记录一下,vcpkg不知道什么原因安装库失败。 首先就是原本安装过的库,再次安装之后。不知道环境哪里修改了。会导致安装报错。 Change Dir: D:/Software/vcpkg/buildtrees/freeglut/x64-windows-dbgRun Build Command(s): "D:/Program Files/Micros…...
axios的介绍及配置多个服务器url
文章目录 1、常用的默认配置的是:baseURL、method、timeout2、axios配置多个服务器url3、配置api文件4、文件中使用 1、常用的默认配置的是:baseURL、method、timeout ① baseURL:设置url的基本结构(请求根地址)&…...
C# OpenCvSharp 通过特征点匹配图片
SIFT匹配 SURF匹配 项目 代码 using OpenCvSharp; using OpenCvSharp.Extensions; using System; using System.Collections.Generic; using System.Drawing; using System.Linq; using System.Text.RegularExpressions; using System.Windows.Forms; using static System.Net…...
10个python爬虫入门实例
昨天带伙伴学习python爬虫,准备了几个简单的入门实例,涉及主要知识点: web是如何交互的 requests库的get、post函数的应用 response对象的相关函数,属性 python文件的打开,保存 代码中给出了注释,并且…...
麒麟KYLINOS命令行设置系统静音
原文链接:麒麟KYLINOS命令行设置系统静音 hello,大家好啊,今天给大家带来一篇在麒麟KYLINOS上使用命令行调节系统静音的方法,有时候需要制作模板,便可以采用此方法,话不多说,一起来看看吧。 1、…...
零信任安全:构建无懈可击的网络防护体系
随着网络技术的飞速发展,信息安全问题日益凸显,传统的安全防护手段已经无法满足复杂多变的安全需求。在此背景下,零信任安全模型逐渐受到广泛关注。本文将探讨零信任安全的概念、优势以及如何构建无懈可击的网络防护体系。 一、零信任安全概念…...
华为李鹏:到 2025 年智能算力需求将达到目前水平的 100 倍
在第十四届全球移动宽带论坛上,华为高级副总裁、运营商 BG 总裁李鹏表示,大模型为代表的 AI 应用发展带来对智能算力的爆发式需求。 李鹏在题为《加速 5G 商业正循环,拥抱更繁荣的 5.5G》的讲话中表示,「5G 已经走在商业成功的正确…...
【漏洞复现】深信服下一代防火墙NGAF存在任意文件上传漏洞 附POC
漏洞描述 深信服下一代防火墙(Next-Generation Application Firewall)NGAF是面向应用层设计,能够精确识别用户、应用和内容,具备完整安全防护能力,能够全面替代传统防火墙,并具有强劲应用层处理能力的全新网络安全设备。NGAF解决了传统安全设备在应用识别、访问控制、内…...
城市内涝积水预防,万宾科技内涝监测仪如何预警?
近几年来城市内涝所引发的安全隐患极为突出,影响着城市道路安全,而且也让市民心中多有惶恐。一旦城市内涝问题出现背后不仅是路面积水问题,更会导致城市无法正常运行,导致市民日常生活和工作受到影响。所以对于排水防涝设施的建设…...
SpringBoot定时任务打成jar 引入到新的项目中后并自动执行
一、springBoot开发定时任务 ①:连接数据库实现新增功能 1. 引入依赖 <dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional> </dependency> <dependen…...
AD9371 官方例程 NO-OS 主函数 headless 梳理(一)
AD9371 系列快速入口 AD9371ZCU102 移植到 ZCU106 : AD9371 官方例程构建及单音信号收发 ad9371_tx_jesd -->util_ad9371_xcvr接口映射: AD9371 官方例程之 tx_jesd 与 xcvr接口映射 AD9371 官方例程 时钟间的关系与生成 : AD9371 官方…...
SHAP 和 LIME 解释模型
内容大纲 1、SHAP 解释器1.1 案例:用于预测患者肺癌1.2 案例中使用的shap解释器1.3 SHAP工作原理1.4 举例说明 2、LIME 解释器2.1 案例:判断法律案件胜诉可能性2.2 LIME解释器工作原理2.3 本地解释模型的训练过程2.4 举例说明1:新闻分类2.4 举…...
渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止
<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet: https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...
华为OD机试-食堂供餐-二分法
import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...
vue3 定时器-定义全局方法 vue+ts
1.创建ts文件 路径:src/utils/timer.ts 完整代码: import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...
ios苹果系统,js 滑动屏幕、锚定无效
现象:window.addEventListener监听touch无效,划不动屏幕,但是代码逻辑都有执行到。 scrollIntoView也无效。 原因:这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作,从而会影响…...
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南 在数字化营销时代,邮件列表效度、用户参与度和网站性能等指标往往决定着创业公司的增长成败。今天,我们将深入解析邮件打开率、网站可用性、页面参与时…...
智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制
在数字化浪潮席卷全球的今天,数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具,在大规模数据获取中发挥着关键作用。然而,传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时,常出现数据质…...
docker 部署发现spring.profiles.active 问题
报错: org.springframework.boot.context.config.InvalidConfigDataPropertyException: Property spring.profiles.active imported from location class path resource [application-test.yml] is invalid in a profile specific resource [origin: class path re…...
VM虚拟机网络配置(ubuntu24桥接模式):配置静态IP
编辑-虚拟网络编辑器-更改设置 选择桥接模式,然后找到相应的网卡(可以查看自己本机的网络连接) windows连接的网络点击查看属性 编辑虚拟机设置更改网络配置,选择刚才配置的桥接模式 静态ip设置: 我用的ubuntu24桌…...
NXP S32K146 T-Box 携手 SD NAND(贴片式TF卡):驱动汽车智能革新的黄金组合
在汽车智能化的汹涌浪潮中,车辆不再仅仅是传统的交通工具,而是逐步演变为高度智能的移动终端。这一转变的核心支撑,来自于车内关键技术的深度融合与协同创新。车载远程信息处理盒(T-Box)方案:NXP S32K146 与…...
