linux驱动开发lcd(代码片段)

XXX_UUU_XXX XXX_UUU_XXX     2022-12-08     237

关键词:

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( 查看详情