lcd的配置,一般有控制器的数据总线组成,soc厂家已经将这部分的驱动写好了,我们只需要配置设备树就可以了,根据自己lcd显示屏幕的参数进行配置。还有一个操作就是如何通过tty操作lcd的驱动。如何将自己的显示器配置为shell的命令终端。
一、设备树配置操作
lcd的设备驱动如下所示:
①、初始化 I.MX6U
的
eLCDIF
控制器,重点是
LCD
屏幕宽
(width)
、高
(height)
、
hspw、
hbp、
hfp
、
vspw
、
vbp
和
vfp
等信息。
②、初始化 LCD
像素时钟。
③、设置 RGBLCD
显存。
④、应用程序直接通过操作显存来操作 LCD
,实现在
LCD
上显示字符、图片等信息。
Framebuffer 翻译过来就是帧缓冲,简称
fb
,因此大家在以后的 Linux
学习中见到“
Framebuffer
”或者“
fb
”的话第一反应应该想到
RGBLCD或者显示设备。
不同分辨率的 LCD
屏幕其
eLCDIF
控制器驱动代码都是一样的,只需要修改好对应的屏
幕参数即可。
(1)“imx6ull.dtsi”中父节点lcdif
1 lcdif: lcdif@021c8000 {
2 compatible = "fsl,imx6ul-lcdif", "fsl,imx28-lcdif";
3 reg = <0x021c8000 0x4000>;
4 interrupts = <GIC_SPI 5 IRQ_TYPE_LEVEL_HIGH>;
5 clocks = <&clks IMX6UL_CLK_LCDIF_PIX>,
6 <&clks IMX6UL_CLK_LCDIF_APB>,
7 <&clks IMX6UL_CLK_DUMMY>;
8 clock-names = "pix", "axi", "disp_axi";
9 status = "disabled";
10 };
(2)lcd的pinctl引脚,可以根据实际电路修改
下面是lcd的数据总线的pinctl的配置。后面配置参数“0x79”,是引脚的驱动强度,可以根据实际情况进行修改,可以查imx6ull的数据手册,进行对应的修改。
1 pinctrl_lcdif_dat: lcdifdatgrp {
2 fsl,pins = <
3 MX6UL_PAD_LCD_DATA00__LCDIF_DATA00 0x79
4 MX6UL_PAD_LCD_DATA01__LCDIF_DATA01 0x79
5 MX6UL_PAD_LCD_DATA02__LCDIF_DATA02 0x79
6 MX6UL_PAD_LCD_DATA03__LCDIF_DATA03 0x79
7 MX6UL_PAD_LCD_DATA04__LCDIF_DATA04 0x79
8 MX6UL_PAD_LCD_DATA05__LCDIF_DATA05 0x79
9 MX6UL_PAD_LCD_DATA06__LCDIF_DATA06 0x79
10 MX6UL_PAD_LCD_DATA07__LCDIF_DATA07 0x79
11 MX6UL_PAD_LCD_DATA08__LCDIF_DATA08 0x79
12 MX6UL_PAD_LCD_DATA09__LCDIF_DATA09 0x79
13 MX6UL_PAD_LCD_DATA10__LCDIF_DATA10 0x79
14 MX6UL_PAD_LCD_DATA11__LCDIF_DATA11 0x79
15 MX6UL_PAD_LCD_DATA12__LCDIF_DATA12 0x79
16 MX6UL_PAD_LCD_DATA13__LCDIF_DATA13 0x79
17 MX6UL_PAD_LCD_DATA14__LCDIF_DATA14 0x79
18 MX6UL_PAD_LCD_DATA15__LCDIF_DATA15 0x79
19 MX6UL_PAD_LCD_DATA16__LCDIF_DATA16 0x79
20 MX6UL_PAD_LCD_DATA17__LCDIF_DATA17 0x79
21 MX6UL_PAD_LCD_DATA18__LCDIF_DATA18 0x79
22 MX6UL_PAD_LCD_DATA19__LCDIF_DATA19 0x79
23 MX6UL_PAD_LCD_DATA20__LCDIF_DATA20 0x79
24 MX6UL_PAD_LCD_DATA21__LCDIF_DATA21 0x79
25 MX6UL_PAD_LCD_DATA22__LCDIF_DATA22 0x79
26 MX6UL_PAD_LCD_DATA23__LCDIF_DATA23 0x79
27 >;
28 };
下面是lcd的pinctl的控制和pwm背光引脚。同样“0x79”是引脚的驱动强度,0x49是最低的驱动强度。
30 pinctrl_lcdif_ctrl: lcdifctrlgrp {
31 fsl,pins = <
32 MX6UL_PAD_LCD_CLK__LCDIF_CLK 0x79
33 MX6UL_PAD_LCD_ENABLE__LCDIF_ENABLE 0x79
34 MX6UL_PAD_LCD_HSYNC__LCDIF_HSYNC 0x79
35 MX6UL_PAD_LCD_VSYNC__LCDIF_VSYNC 0x79
36 >;
37 pinctrl_pwm1: pwm1grp {
38 fsl,pins = <
39 MX6UL_PAD_GPIO1_IO08__PWM1_OUT 0x110b0
40 >;
41 };
(3)lcd的clent端的设备树(重要,主要修改这里)
根据不同的lcd设备,修改设备树的部分,主要就是修改此部分。
1 &lcdif {
2 pinctrl-names = "default";
3 pinctrl-0 = <&pinctrl_lcdif_dat /* 使用到的 IO */
4 &pinctrl_lcdif_ctrl
5 &pinctrl_lcdif_reset>;
6 display = <&display0>;
7 status = "okay";
8
9 display0: display { /* LCD 属性信息 */
10 bits-per-pixel = <16>; /* 一个像素占用几个 bit 888(565) */
11 bus-width = <24>; /* 总线宽度 */
12
13 display-timings {
14 native-mode = <&timing0>; /* 时序信息 */
15 timing0: timing0 {
16 clock-frequency = <9200000>; /* LCD 像素时钟,单位 Hz */
17 hactive = <480>; /* LCD X 轴像素个数 */
18 vactive = <272>; /* LCD Y 轴像素个数 */
19 hfront-porch = <8>; /* LCD hfp 参数 */
20 hback-porch = <4>; /* LCD hbp 参数 */
21 hsync-len = <41>; /* LCD hspw 参数 */
22 vback-porch = <2>; /* LCD vbp 参数 */
23 vfront-porch = <4>; /* LCD vfp 参数 */
24 vsync-len = <10>; /* LCD vspw 参数 */
25
26 hsync-active = <0>; /* hsync 数据线极性 */
27 vsync-active = <0>; /* vsync 数据线极性 */
28 de-active = <1>; /* de 数据线极性 */
29 pixelclk-active = <0>; /* clk 数据线先极性 */
30 };
31 };
32 };
33 };
(3)pwm背光的client端的修改
pwm控制器的父节点:
1 pwm1: pwm@02080000 {
2 compatible = "fsl,imx6ul-pwm", "fsl,imx27-pwm";
3 reg = <0x02080000 0x4000>;
4 interrupts = <GIC_SPI 83 IRQ_TYPE_LEVEL_HIGH>;
5 clocks = <&clks IMX6UL_CLK_PWM1>,
6 <&clks IMX6UL_CLK_PWM1>;
7 clock-names = "ipg", "per";
8 #pwm-cells = <2>;
9 };
用户client端追加的节点:(根据自己的实际情况进行修改)
1 &pwm1 {
2 pinctrl-names = "default";
3 pinctrl-0 = <&pinctrl_pwm1>;
4 status = "okay";
5 };
上面设备树修改完成之后,设备树更新到开发板,就可以使用lcd了。
二、lcd作为虚拟中断的操作
(1)使用tty体系操作lcd的驱动fb
使用下面的指令,操作tty0终端,tty0会操作lcd的驱动fb0。
echo hello >/dev/tty1
此时lcd显示屏上已经显示“hello”。
(2)将lcd屏幕作为shell终端
首先修改uboot的console终端的配置,命令如下所示:
setenv bootargs 'console=ttymxc0,115200 root=/dev/mmcblk1p2 rootwait rw'
saveenv
然后退出uboot:
boot
修改/etc/inittab文件,如下所示:(添加)
tty1::askfirst:-/bin/sh
然后重启开发板,lcd显示屏上就会提示:
Please press Enter to activate this console.
此时按下键盘的回车键或者开发板的复位键就可以使用lcd终端了,不使用的时候,改回uboot,在修改了/etc/inittab文件就可以了。