-
在系统中的的挂载路径: /dev/fb* (是个字符设备)
-
数据结构: include/linux/fb.h 。 Linux内核将所有的 Framebuffer 抽象一个叫做
fb_info
结构体struct fb_info { atomic_t count; int node; int flags; struct mutex lock; /* 互斥锁 */ struct mutex mm_lock; /* 互斥锁,用于 fb_mmap 和 smem_*域*/ struct fb_var_screeninfo var; /* 当前可变参数 */ struct fb_fix_screeninfo fix; /* 当前固定参数 */ struct fb_monspecs monspecs; /* 当前显示器特性 */ struct work_struct queue; /* 帧缓冲事件队列 */ struct fb_pixmap pixmap; /* 图像硬件映射 */ struct fb_pixmap sprite; /* 光标硬件映射 */ struct fb_cmap cmap; /* 当前调色板 */ struct list_head modelist; /* 当前模式列表 */ struct fb_videomode *mode; /* 当前视频模式 */ ··· struct fb_ops *fbops; /* 帧缓冲操作函数集 */ struct device *device; /* 父设备 */ struct device *dev; /* 当前 fb 设备 */ int class_flag; /* 私有 sysfs 标志 */ ··· char __iomem *screen_base; /* 虚拟内存基地址(屏幕显存) */ unsigned long screen_size; /* 虚拟内存大小(屏幕显存大小) */ void *pseudo_palette; /* 伪 16 位调色板 */ }
重点关注的
var、 fix、 fbops、 screen_base、 screen_size和 pseudo_palette
-
API
int register_framebuffer(struct fb_info *fb_info)
向 Linux 内核注册初始化好的 fb_info fb_info: 需要上报的 fb_info 返回值: 0:成功 负值:失败
-
内核代码demo 路径:drivers/video/fbdev/mxsfb.c 其中,该驱动文档函数
mxsfb_probe
函数,该函数主要工作内容: 1. 申请 fb_info。 2. 初始化 fb_info 结构体中的各个成员变量。 3. 初始化 eLCDIF 控制器。 4. 向 Linux 内核注册初始化好的 fb_info
- 步骤
-
关注 自己的设备树文件 xxxx.dts pinctrl_lcdif_dat 节点显示了显示屏的数据接口 pinctrl_lcdif_ctrl 节点显示了配置接口 pinctrl_pwm1 节点显示了背光控制IO
-
关注 lcdif 节点 ,该节点记录了 不同显示屏的相关参数(根据自用的TFT来修改) 自己买的开发板显示屏是ATK-7084 4.3寸RGB 800*480
相关参数: 水平显示参数 800 HSPW(thp) 1 HBP(thb) 46 HFP(thf) 210 垂直显示参数 480 VSPW(tvp) 1 VBP(tvb) 23 VFP(tvf) 22 像素时钟 33.3MHz
像素时钟计算公式: (VSPW+VBP+LINE+VFP) * (HSPW + HBP + HOZVAL + HFP) * 60= (1+23+22+480)*(1+46+800+210)*60 = 33.3MHz = 526 * 1057 * 60 = 33358920
-
背光灯所使用的的PWM通道,pwm节点(IO)
-
backlight 节点设置与背光灯相关的参数
-
重新编译设备树文件 make dtbs
-
重启设备之后,显示屏会显示企鹅
-
在系统重启过程中,在uboot启动阶段,重新设置 bootargs 参数 (让LCD作为控制台)
setenv bootargs 'console=tty1 console=ttymxc0,115200 root=/dev/nfs rw nfsroot=192.168.18.101:/home/cxn/linux/nfs/rootfs ip=192.168.18.103:192.168.18.101:192.168.18.1:255.255.255.0::eth0:off'
-
修改开发板的根文件系统中的文件 /home/cxn/linux/nfs/rootfs/etc/inittab 文件,加入内容
tty1::askfirst:-/bin/sh
-
设置LCD背光灯的亮度操作 在串口终端输入
echo 7 >/sys/devices/platform/backlight/backlight/backlight/brightness
-
在 Linux 源码中找到 drivers/tty/vt/vt.c 找出 blankinterval 变量,修改该值来修改显示屏无操作休眠时间
-