手写的这种(要知道fbtft设备,进行使用):
(1)首先正在设备树dts下面添加设备节点(在spi下面挂一个myfb-spi节点)
(2)实现最基本的probe函数(实现LCD的初始化以及FB驱动的注册)
Lcd的初始化(引脚DC、RES)
FB驱动的注册(分配fb_info结构体frambuffer_alloc()函数、初始化结构的一些成员及屏幕的一些参数设置、注册fb驱动register_framebuffer()函数)
屏幕参数包括:主要变量参数fb_var_screeninfo 和 fb_fix_screeninfo 、开辟大块显存变量参数screen_buffer,screen_size ,fix.smem_start,fix.smem_len、刷新机制fb_deferred_io变量,fb_deferred_io_init函数
(3)remove函数,正好与probe函数相反,主要就是FB驱动的卸载(清楚刷新机制、注销设备unregister_framebuffer()、释放引脚资源)这里要注意在注销设备之前需要释放设备资源framebuffer_release()函数
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
帧缓冲设备:
主要是因为帧缓冲设备的显示原理是在内存中开辟一块特定的暂存区(显存),这块暂存区记录着所有位图(像素)数据,在一定的时间内将这个数据一一对应的写入到输出设备中,这样输出设备上就是我们需要显示的信息了
设备参数介绍
Fb_ops结构体:linux内核提供的fb_ops最底层的显示接口
Fb_var_screeninfo结构体:每个显示设备的分辨率和参数都不一样,linux内核中fb_var_screeninfo结构体便是记录这些参数的
Fb_fix_screeninfo结构体:soc集成了视频硬件解码等功能,Linux内核为其预留出了接口用来加速视频。当我们需要硬件加速的时候,我们就可以初始化该结构体
Fb_cmpa结构体:即颜色映射,内容为RGB的值
Fb_info结构体:此结构体是Frame Buffer设备的最重要的结构体。里面包含了上述的所有结构体。我们只在意其中最重要的几个:
Fb_var_screeninfo屏幕变量信息、Fb_fix_screeninfo具有硬件加速的屏幕信息
Fb_cmap 颜色映射、Fb_ops 底层驱动操作
Screen_base帧缓冲区虚拟地址、screen_size帧缓冲区大小(linux内核的frame buffer所有的显示数据都存放于此)
device父设备指针、dev该fb设备、pseudo_palette假的调色板
使用自带的驱动:
Linux驱动源码中,已经支持几乎所有的自带的spi接口的液晶驱动,其源码在drivers/staging/fbtft中
步骤:
(1)首先正在设备树dts下面添加设备节点(在spi下面挂一个st7899v的节点)
(2)直接make menuconfig中,找到对应驱动进行勾选,然后保存退出,直接make
问题(由于自带的驱动中,ST7789V的初始化程序与常用的液晶屏不符合,导致颜色失真,此时我们需要修改 drivers/staging/fbtft/fb_st7789v.c 文件中的初始化程序init_display函数)
调试ls / > /dev/tty0