LCD屏幕
Framebuffer设备
RGBLCD屏幕
framebuffer为Linux显示模拟出来的显存, 允许程序直接对显存进行读写, 应用程序操作显存的机制
系统会虚拟出来fbX这样的设备, 对设备进行操作即可
lcdif: lcdif@021c8000 {
compatible = "fsl,imx6ul-lcdif", "fsl,imx28-lcdif";
reg = <0x021c8000 0x4000>;
interrupts = <GIC_SPI 5 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&clks IMX6UL_CLK_LCDIF_PIX>,
<&clks IMX6UL_CLK_LCDIF_APB>,
<&clks IMX6UL_CLK_DUMMY>;
clock-names = "pix", "axi", "disp_axi";
status = "disabled";
};
驱动文件为mxsfb.c文件, 为paltfoem驱动框架,
framebuffer在内核中的表现就是fb_info结构体, 屏幕驱动重点就是初始化fb_info中的各种变量, 之后通过register_framebuffer向内核注册实现的结构体
卸载的时候调用unregister_framebuffer卸载之前注册的结构体
实现
驱动lcd正常可以配置显示一个企鹅logo, 可以在图形界面配置
Device Drivers —>Graphics support —>logo
设备树设置
引脚和官方的一样, 但是需要改电气属性, 97->49修改驱动能力
&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 = <51200000>;
hactive = <1024>;
vactive = <600>;
hfront-porch = <160>;
hback-porch = <140>;
hsync-len = <20>;
vback-porch = <20>;
vfront-porch = <12>;
vsync-len = <3>;
hsync-active = <0>;
vsync-active = <0>;
de-active = <1>;
pixelclk-active = <0>;
};
};
};
};
实现显示器作为输出
修改文件/etc/inittab
#etc/inittab
::sysinit:/etc/init.d/rcS
console::askfirst:-/bin/sh
tty1::askfirst:-/bin/sh
::restart:/sbin/init
::ctrlaltdel:/sbin/reboot
::shutdown:/bin/umount -a -r
::shutdown:/sbin/swapoff -a
tty指的是当前终端, /dev/tty0代表当前虚拟控制台,而/dev/tty1等代表第一个虚拟控制台, tty0, tty1,tty2等是虚拟的“终端”,它有输入、输出功能
uboot
=> print bootargs
bootargs=console=ttymxc0,115200 root=/dev/mmcblk1p2 rootwait rw
=> setenv bootargs 'console=tty1 console=ttymxc0,115200 root=/dev/mmcblk1p2 rootwait rw'
=> saveenv
Saving Environment to MMC...
Writing to MMC(1)... done
=> boot
ttymxc0是NXP公司的串口节点
设置
背光
/sys/devices/platform/backlight/backlight/backlight
自动息屏
drivers/tty/vt/vt.c这个文件,在此文件中找到blankinterval变量, 在181行