使用linux内核驱动lcd

Linux下LCD驱动

在linux驱动开发中,使用lcd进行人机交互是必不可少的,为此,我门如何在内核中初始化lcd使用呢?

1、LCD 屏幕 IO 配置

打开.dts设备树文件,在iomuxc中创建lcd子节点

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
	>;
 };

子节点 pinctrl_lcdif_dat,为 RGB LCD 的 24 根数据线配置项。
子节点 pinctrl_lcdif_ctrl,RGB LCD 的 4 根控制线配置项,包括 CLK、ENABLE、VSYNC 和 HSYNC。
子节点 pinctrl_pwm1,LCD 背光 PWM 引脚配置项。这个引脚要根据实际情况设置,LCD 的背光 IO 尽量和半导体厂商的官
方开发板一致。

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

继续,在.dts设备树中创建参数信息节点

&lcdif {
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_lcdif_dat
		     &pinctrl_lcdif_ctrl>;
	display = <&display0>;
	status = "okay";

	display0: display {
		bits-per-pixel = <32>;
		bus-width = <24>;

		display-timings {
			native-mode = <&timing0>;
			timing0: timing0 {
			clock-frequency = <31000000>;
			hactive = <800>;
			vactive = <480>;
			hfront-porch = <40>;
			hback-porch = <88>;
			hsync-len = <48>;
			vback-porch = <32>;
			vfront-porch = <13>;
			vsync-len = <3>;

			hsync-active = <0>;
			vsync-active = <0>;
			de-active = <1>;
			pixelclk-active = <0>;
			};
		};
	};
};

3、LCD 屏幕背光节点信息

LCD 背光要用到IO引脚复用为 PWM,因此要设置io引脚配置也要设置 PWM1 节点

pinctrl_pwm1: pwm1grp {
	fsl,pins = <
		MX6UL_PAD_GPIO1_IO08__PWM1_OUT 0x110b0
	>;
 };
 &pwm1 {
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_pwm1>;
	status = "okay";
};

还有设置背光亮度级别的系欸但,一般生产厂商都会写好对应的lcd节点文件的。

4、设置 LCD 作为终端控制台

我们移植使用串口对开发板进行终端调试,在我们使用了lcd后,完全可以使用lcd作为终端显示,再配合键盘就完美啦,那么我们如何使能lcd为终端输入显示呢?
1)设置 uboot 中的 bootargs
bootargs=console=tty1 console=ttymxc0,115200 root=/dev/nfs rw nfsroot=192.168.1.186:/home/gg/linux/nfs/rootfs ip=192.168.1.55:192.168.1.186:192.168.1.1:255.255.255.0::eth0:off
这里我们设置了两遍 console,第一次设置 console=tty1,也就是设置 LCD 屏幕为控制台,第二遍又设置 console=ttymxc0,115200,也就是设置串口也作为控制台。相当于我们打开了两个 console,一个是 LCD,一个是串口,大家重启开发板就会发现 LCD 和串口都会显示 Linux 启动 log 信息。但是此时我们还不能使用 LCD 作为终端进行交互,因为我们的设置还未完成。
2)修改/etc/inittab 文件
打开开发板根文件系统中的/etc/inittab 文件,在里面加入下面这一行:
在这里插入图片描述
保存退出再重启,至此,我们就拥有了两套终端,一个是基于串口,一个就是我们开发板的 LCD屏幕
3)LCD 背光调节
进入如下目录:
/sys/devices/platform/backlight/backlight/backlight
然后通过命令echo 7 > brightness调节亮度,亮度范围是0-7,可自行修改。

5、运行测试

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

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值