关键词:
framebuffer,帧缓冲fb是一种机制,将系统中所有跟显示有关的硬件和软件集合起来,虚拟出一个fb设备,LCD驱动生成/dev/fbx的设备,应用程序通过访问/dev/fbx设备即可以访问LCD。
不同分辨率的LCD屏幕eLCDIF控制器驱动代码相同,只需要修改好对应的屏幕参数。
Linux内核将所有framebuffer抽象为一个fb_info结构体,fb_info包含framebuffer设备的完整属性和操作集合,编写LCD驱动就是构建fb_info并向系统注册fb_info的过程。
设备树文件内容
/
backlight
compatible = "pwm-backlight";
pwms = <&pwm1 0 5000000>;
brightness-levels = <0 4 8 16 32 64 128 255>;
default-brightness-level = <7>;
status = "okay";
;
;
&iomuxc
imx6ul-evk
pinctrl_lcdif_dat: lcdifdatgrp
fsl,pins = <
MX6UL_PAD_LCD_DATA00__LCDIF_DATA00 0x49
MX6UL_PAD_LCD_DATA01__LCDIF_DATA01 0x49
MX6UL_PAD_LCD_DATA02__LCDIF_DATA02 0x49
MX6UL_PAD_LCD_DATA03__LCDIF_DATA03 0x49
MX6UL_PAD_LCD_DATA04__LCDIF_DATA04 0x49
MX6UL_PAD_LCD_DATA05__LCDIF_DATA05 0x49
MX6UL_PAD_LCD_DATA06__LCDIF_DATA06 0x49
MX6UL_PAD_LCD_DATA07__LCDIF_DATA07 0x51
MX6UL_PAD_LCD_DATA08__LCDIF_DATA08 0x49
MX6UL_PAD_LCD_DATA09__LCDIF_DATA09 0x49
MX6UL_PAD_LCD_DATA10__LCDIF_DATA10 0x49
MX6UL_PAD_LCD_DATA11__LCDIF_DATA11 0x49
MX6UL_PAD_LCD_DATA12__LCDIF_DATA12 0x49
MX6UL_PAD_LCD_DATA13__LCDIF_DATA13 0x49
MX6UL_PAD_LCD_DATA14__LCDIF_DATA14 0x49
MX6UL_PAD_LCD_DATA15__LCDIF_DATA15 0x51
MX6UL_PAD_LCD_DATA16__LCDIF_DATA16 0x49
MX6UL_PAD_LCD_DATA17__LCDIF_DATA17 0x49
MX6UL_PAD_LCD_DATA18__LCDIF_DATA18 0x49
MX6UL_PAD_LCD_DATA19__LCDIF_DATA19 0x49
MX6UL_PAD_LCD_DATA20__LCDIF_DATA20 0x49
MX6UL_PAD_LCD_DATA21__LCDIF_DATA21 0x49
MX6UL_PAD_LCD_DATA22__LCDIF_DATA22 0x49
MX6UL_PAD_LCD_DATA23__LCDIF_DATA23 0x51
>;
;
pinctrl_lcdif_ctrl: lcdifctrlgrp
fsl,pins = <
MX6UL_PAD_LCD_CLK__LCDIF_CLK 0x49
MX6UL_PAD_LCD_ENABLE__LCDIF_ENABLE 0x49
MX6UL_PAD_LCD_HSYNC__LCDIF_HSYNC 0x49
MX6UL_PAD_LCD_VSYNC__LCDIF_VSYNC 0x49
>;
;
pinctrl_pwm1: pwm1grp
fsl,pins = <
MX6UL_PAD_GPIO1_IO08__PWM1_OUT 0x110b0
>;
;
;
;
&iomuxc_snvs
imx6ul-evk
pinctrl_lcdif_reset: lcdifresetgrp
fsl,pins = <
/* used for lcd reset */
MX6ULL_PAD_SNVS_TAMPER9__GPIO5_IO09 0x49
>;
;
;
;
&pwm1
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_pwm1>;
status = "okay";
;
&lcdif
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_lcdif_dat
&pinctrl_lcdif_ctrl
&pinctrl_lcdif_reset>;
display = <&display0>;
status = "okay";
display0: display /* LCD 属性信息 */
bits-per-pixel = <16>; /* 一个像素占用几个 bit */
bus-width = <24>; /* 总线宽度 */
display-timings
native-mode = <&timing0>; /* 时序信息 */
timing0: timing0
clock-frequency = <35500000>; /* LCD 像素时钟,单位 Hz */
hactive = <800>; /* LCD X 轴像素个数 */
vactive = <480>; /* LCD Y 轴像素个数 */
hfront-porch = <210>; /* LCD hfp 参数 */
hback-porch = <46>; /* LCD hbp 参数 */
hsync-len = <20>; /* LCD hspw 参数 */
vback-porch = <23>; /* LCD vbp 参数 */
vfront-porch = <22>; /* LCD vfp 参数 */
vsync-len = <3>; /* LCD vspw 参数 */
hsync-active = <0>; /* hsync 数据线极性 */
vsync-active = <0>; /* vsync 数据线极性 */
de-active = <1>; /* de 数据线极性 */
/* rgb to hdmi: pixelclk-ative should be set to 1 */
pixelclk-active = <0>; /* clk 数据线极性 */
;
;
;
;
- 节点backlight,描述Linux系统使用那个pwm控制LCD背光
- 子节点pinctrl_lcdif_dat,为RGB LCD的24根数据线配置项。
- 子节点pinctrl_lcdif_ctrl,RGB LCD的4根控制线配置项,包括CLK、ENABLE、VSYNC和 HSYNC。
- 子节点pinctrl_pwm1,LCD背光PWM引脚配置项。LCD的背光IO尽量和半导体厂商的官方开发板一致。
linux系统移植:官板uboot修改(下)(代码片段)
...录Linux系统移植:官板uboot修改(下)一、LCD驱动修改二、网口驱动修改2.1PHY地址修改2.2删除uboot中74LV595的驱动代码2.3添加I.MX6U-ALPHA开发板网络复位引脚驱动2.4修改驱动函数三、其他修改四、bootcmd和bootargs修改4.1bootcmd... 查看详情
linux设备树-lcd触摸屏设备驱动(代码片段)
...---------------------------------------在上一节我们已经移植了LCD驱动,那么本节将会移植LCD触摸屏驱动。有关触摸屏的原理,以及硬件接线,我们在linux驱动移植-LCD触摸屏设备驱动章节已经介绍的非常清楚了。同时在这一篇博客,我们... 查看详情
linuxlcd驱动实验(代码片段)
目录Linux下LCD驱动简析1Framebuffer设备LCD驱动简析硬件原理图分析LCD驱动程序编写运行测试LCD屏幕基本测试设置LCD作为终端控制台LCD背光调节从LCD自动关闭解决方法LCD是很常用的一个外设,在裸机篇中我们讲解了如何编写LCD裸... 查看详情
linux设备树-lcd驱动程序(代码片段)
一、修改设备树1.1硬件接线1.2修改s3c2440-pinctrl.dtsi修改内核arch/arm/boot/dts/s3c2440-pinctrl.dtsi文件,在pinctrl节点下添加两个引脚配置节点:lcd_pinctrl:lcd_pinctrlsamsung,pins="gpc-8","gpc-9","gpc-10","gpc-11","gpc-12","gpc-13","gpc-14","gpc-15","gpd-0","gpd-1","g... 查看详情
linux应用开发第一章framebuffer应用开发(代码片段)
...是被包含在内存中。LCDFramebuffer里的若干字节(根据驱动程序对LCD控制器的配置而定)表示LCD屏幕中的一个像素点,一一对应整个LCD 查看详情
arduino应用开发——lcd显示图片(代码片段)
...配置1.2硬件连接2开发环境搭建2.1安装开发板2.2安装库3LCD驱动的使用和测试3.1修改TFT_eSPI库基础配置3.2LCD驱动测试4制作图片数据4.1制作图片素材4.2生成图片数据4.2.1位图数据生成方法4.2.2JPEG格式图片数据生成方法5编写应用程序6测... 查看详情
linuxmipidsi驱动调试笔记-lcd时序参数配置(代码片段)
...PILCD的基础知识以及LCD初始化序列的配置:LinuxMIPIDSILCD设备驱动开发调试细节学习笔记(一)LinuxMIPIDSI驱动调试笔记-设备树DCS格式序列之配置LCD初始化代码(二)要点亮MIPIDSI接口的LCD,我们还有一个非常重要的配置& 查看详情
编程\_lcd驱动程序框架\_使用设备树(代码片段)
编程_LCD驱动程序框架_使用设备树参考资料,GIT仓库里:基于这个程序修改:IMX6ULL\\source\\03_LCD\\03_lcd_drv_qemu_okSTM32MP157\\source\\A7\\03_LCD\\03_lcd_drv_qemu_ok参考:内核自带的示例驱动程序Linux驱动源码:drivers/v 查看详情
linux驱动开发-01_字符设备驱动开发(代码片段)
文章目录字符设备驱动开发1.字符设备驱动简介2字符设备驱动开发步骤2.1驱动模块的加载和卸载2.2字符设备注册与注销2.3实现设备的具体操作函数2.4添加LICENSE和作者信息3Linux设备号3.1设备号的组成3.2设备号的分配4chrdevbase字符设... 查看详情
linux驱动开发platform(代码片段)
驱动的分离和分层为了方便开发,将主机驱动和设备驱动分离开来,主机驱动和设备驱动通过统一的接口访问。主机驱动由半导体厂商编写,设备驱动由设备器件厂商编写,用户只需提供设备信息。驱动的分层是... 查看详情
lcd液晶屏驱动详解
...:arm-linux-gcc4.3.2LCD:4.3存液晶屏AT043TN24参考文献:LCD驱动程序详细讲解(一)_weixin_33935505的博客-LCD驱动详解-Lilto-博客园(cnblogs.com)主题:s3c2440移植linux-3.4.2中的LCD驱动_ 查看详情
嵌入式linux|设置lcd屏幕为终端控制台(代码片段)
1.保证屏幕可以正常显示i.MX6ULL驱动开发|10-修改LCD驱动点亮LCD显示小企鹅logo。2.设置bootargsbootargs添加一个console参数注册新的控制台即可。console=tty1比如,进入uboot命令行:setenvbootargs'console=tty1console=ttymxc0,115200... 查看详情
10.lcd驱动程序——框架分析(代码片段)
...一副图像所需要的数据。因此,帧缓冲其实就是LCD设备的驱动程序) 一.LCD驱动程序框架根据上述思路,LinuxLCD驱动程分为两个层次,如下图所示类似于Platform平台驱动框架,也将驱动程序分为相对稳定的算法驱动,即fb总线... 查看详情
arduino应用开发——lcd显示gif动图(代码片段)
...配置1.2硬件连接2开发环境搭建2.1安装开发板2.2安装库3LCD驱动的使用和测试4将GIF动图转成数据5编写应用程序6测试验证结束语前言前面我已经介绍过了如何在Arduino环境下用LCD显示文本、图案和图片,这一讲主要介绍一下GIF动... 查看详情
fs4412lcd驱动代码
1#include<linux/kernel.h>2#include<linux/dma-mapping.h>3#include<linux/fb.h>4#include<linux/init.h>5#include<linux/gfp.h>6#include<linux/module.h>7#include<asm/g 查看详情
linux驱动开发:字符设备驱动开发(代码片段)
文章目录Linux驱动开发:字符设备驱动开发一、字符设备简介二、驱动调用原理三、驱动加载与卸载四、字符设备注册与注销五、设备驱动编写流程六、添加驱动信息Linux驱动开发:字符设备驱动开发一、字符设备简介字... 查看详情
linux驱动开发:字符设备驱动开发(代码片段)
文章目录Linux驱动开发:字符设备驱动开发一、字符设备简介二、驱动调用原理三、驱动加载与卸载四、字符设备注册与注销五、设备驱动编写流程六、添加驱动信息Linux驱动开发:字符设备驱动开发一、字符设备简介字... 查看详情
51单片机lcd1602驱动显示(模板)+proteus(代码片段)
51单片机LCD1602驱动显示(模板)+Proteus本项目工程篇,只展示LCD1602驱动显示,不涉及其他外设驱动使用,可以作为LCD1602显示的模板移植使用。实例代码main.c#include<reg51.h>#include<LCD1602.h>voidmain( 查看详情