Linux使用devfb0 设备显示LVGL图形
Linux使用/dev/fb0 设备显示LVGL图形
1:使用SquareLine导出project工程
根据自己的TFT屏幕,设置工程:屏幕大小128x160 ,颜色格式RGB565,所以颜色深度是16位
SquareLine默认使用的是SDL库来显示,所以导出的工程需要修改成使用fb设备来显示
2:打开导出的源码,修改部分内容
2.1:修改 lv_drv_conf.h
第一处:
#ifndef USE_SDL
# define USE_SDL 0 //关闭SDL库,设置为0
#endif/* Hardware accelerated SDL driver */
#ifndef USE_SDL_GPU
# define USE_SDL_GPU 0
#endif#if USE_SDL || USE_SDL_GPU
# define SDL_HOR_RES 128
# define SDL_VER_RES 160 /* Scale window by this factor (useful when simulating small screens) */
# define SDL_ZOOM 1/* Used to test true double buffering with only address changing.* Use 2 draw buffers, bith with SDL_HOR_RES x SDL_VER_RES size*/
# define SDL_DOUBLE_BUFFERED 0/*Eclipse: <SDL2/SDL.h> Visual Studio: <SDL.h>*/
# define SDL_INCLUDE_PATH <SDL2/SDL.h>/*Open two windows to test multi display support*/
# define SDL_DUAL_DISPLAY 0
#endif
第二处:
/*-----------------------------------------* Linux frame buffer device (/dev/fbx)*-----------------------------------------*/
#ifndef USE_FBDEV
#define USE_FBDEV 1 //打开fb设备驱动
#endif#if USE_FBDEV
#define FBDEV_PATH "/dev/fb0"
# define SDL_HOR_RES 128 //增加设置屏幕长宽,此处定义是从SDL定义内拷贝过来的
# define SDL_VER_RES 160 //增加设置屏幕长宽
#endif
2.2:打开main.c
对照以下内容修改
/*** @file main**//********************** INCLUDES*********************/
#define _DEFAULT_SOURCE /* needed for usleep() */
#include <unistd.h>
#define SDL_MAIN_HANDLED /*To fix SDL's "undefined reference to WinMain" issue*/
#include <SDL2/SDL.h>
#include "lvgl/lvgl.h"
#include "lv_drivers/sdl/sdl.h"
#include "ui/ui.h"
#include "lv_drivers/display/fbdev.h" //新增此头文件/********************** DEFINES*********************//*********************** TYPEDEFS**********************//*********************** STATIC PROTOTYPES**********************/
static void hal_init(void);/*********************** STATIC VARIABLES**********************//*********************** MACROS**********************//*********************** GLOBAL FUNCTIONS**********************//********************** DEFINES*********************//*********************** TYPEDEFS**********************//*********************** VARIABLES**********************//*********************** STATIC PROTOTYPES**********************//*********************** GLOBAL FUNCTIONS**********************/int main(int argc, char **argv)
{(void)argc; /*Unused*/(void)argv; /*Unused*//*Initialize LVGL*/lv_init();/*Initialize the HAL (display, input devices, tick) for LVGL*/hal_init();ui_init();while(1) {/* Periodically call the lv_task handler.* It could be done in a timer interrupt or an OS task too.*/lv_tick_inc(5); //新增此函数,此函数可以放在这里,也可以放在其他周期性中断里面,反正就是5ms调用一次即可lv_timer_handler();usleep(5 * 1000);}return 0;
}/*********************** STATIC FUNCTIONS**********************//*** Initialize the Hardware Abstraction Layer (HAL) for LVGL*/
static void hal_init(void)
{/* Use the 'monitor' driver which creates window on PC's monitor to simulate a display*/#if USE_SDLsdl_init(); //屏蔽了SDL#endif#if USE_FBDEVfbdev_init(); //开启了fbdev#endif/*Create a display buffer*/static lv_color_t buf[SDL_HOR_RES * SDL_VER_RES];static lv_disp_draw_buf_t disp_draw_buf;lv_disp_draw_buf_init(&disp_draw_buf, buf, NULL, SDL_HOR_RES * SDL_VER_RES);/*Create a display*/static lv_disp_drv_t disp_drv;lv_disp_drv_init(&disp_drv); /*Basic initialization*/disp_drv.draw_buf = &disp_draw_buf;// disp_drv.flush_cb = sdl_display_flush;disp_drv.flush_cb = fbdev_flush; //修改了此处刷新画面控制回调disp_drv.hor_res = SDL_HOR_RES;disp_drv.ver_res = SDL_VER_RES;lv_disp_drv_register(&disp_drv);#if 0 //屏蔽了此处输入设备的代码/* Add a mouse as input device */static lv_indev_drv_t indev_drv;lv_indev_drv_init(&indev_drv); /*Basic initialization*/indev_drv.type = LV_INDEV_TYPE_POINTER;// indev_drv.read_cb = sdl_mouse_read;indev_drv.read_cb = NULL;lv_indev_drv_register(&indev_drv);
#endif
}
2.3 执行make clean && make -j8
根据这个第一次在linux下编译LVGL工程的方式
编译的时候如果报和sdl有关的错误, 说明程序编译了sdl的代码,在 .mk文件里面把编译sdl相关代码的指令关掉再重试
然后运行程序记得加上sudo
如果运行之后报错: ioctl(FBIOBLANK): Invalid argument ,则打开fbdev.c 找到报错信息的那一段函数屏蔽掉
//Make sure that the display is on. //此函数是亮屏的操纵,如果报错可以屏蔽掉,但是得确保TFT屏幕已经亮了if (ioctl(fbfd, FBIOBLANK, FB_BLANK_UNBLANK) != 0) {perror("ioctl(FBIOBLANK)");return;}
Linux使用devfb0 设备显示LVGL图形相关推荐
- Linux执行yum不显示时间图形,Linux停的yum命令详解(朝花夕拾)
yum是干什么的使用redhat,fedora的linuxer肯定都为rpm著名的dependency hell而头疼(这也是所有基于rpm发行版都有的问题).foo is needed by bar ...
- Linux执行yum不显示时间图形,Linux命令yum
yum(全称为 Yellow dog Updater, Modified)是一个在Fedora.RedHat.ContOS以及SUSE中的Shell前端软件包管理器.基於RPM包管理,能够从指定的服务 ...
- linux下tomcat6无法显示图片验证码 少了图形插件
linux下tomcat6无法显示图片验证码(windows下显示正常) 原创 2015年10月20日 10:31:47 3526 linux下tomcat6无法显示图片验证码(windows下显示正 ...
- linux iostat 时间戳,Linux基础命令---iostat显示设备状态
iostat iostat 指令用来显示cpu状态,系统IO设备的状态,以及相关磁盘和NFS使用状态.iostat命令通过观察设备相对于其平均传输速率的活动时间来监视系统输入/输出设备负载.iosta ...
- Linux的tty设备介绍
本文转载于:对于Linux内核tty设备的一点理解 目录 前言 一.终端按照其自身能力分类 二.linux系统的终端设备 1. 控制台 2. 伪终端pty(pseudo-tty) 3. 串口终端(/d ...
- [中英对照]User-Space Device Drivers in Linux: A First Look | 初识Linux用户态设备驱动程序...
如对Linux用户态驱动程序开发有兴趣,请阅读本文,否则请飘过. User-Space Device Drivers in Linux: A First Look | 初识Linux用户态设备驱动程序 ...
- linux 进程名最长显示多少_全面系统地总结Linux的基本操作(上)
1. Linux文件和目录 Windows 和 Linux 文件系统 在 windows 平台下,打开"计算机",我们看到的是一个个的驱动器盘符:每个驱动器都有自己的根目录结构,这 ...
- linux内核中kset是什么意思,Linux内核之设备驱动-底层数据结构kobject/kset
Linux内核之设备驱动-底层数据结构kobject/kset kobject kobject是组成device.driver.bus.class的基本结构.如果把前者看成基类,则后者均为它的派生产物 ...
- linux下usb设备节点名不固定,解决Linux下USB设备节点ttyUSB名不固定的问题,生成固定USB转串口设备节点...
解决Linux下USB设备节点ttyUSB名不固定的问题,生成固定USB转串口设备节点 2018-09-19 http://blog.sina.com.cn/s/blog_8b58097f0102wx ...
最新文章
- 【CVPR2020】30篇最新论文抢先看!!!
- 如何理解Return的返回值?
- Autodesk Motionbuilder 2016中文版
- Android Volley完全解析2:使用Volley加载网络图片
- xgboost 的 get_fscore()
- 汇编浮点指令fld、fstp
- 如何从finally块访问方法的结果值
- 软件工程中需要学习和掌握的软件都有哪些_高三孩子:你想学软件工程,要先知道这些...
- memset函数的使用
- 新软件--AutoReply(自动回复),还能自动接听,做答录机
- 利用docker maven镜像打包springboot
- 提高scrapy的爬取速度
- vue+高德离线地图vue-amap开发
- 开源私有云盘python_搭建Windows版Seafile开源私有云盘
- docker学习笔记(五)如何创建自己的阿里云镜像仓库(这是2021版的阿里云教程)
- 百度网盘 http://pandownload.com/index.html
- Educational Codeforces Round 115 (Rated for Div. 2) A. Computer Game
- 单通道和多通道图像相关概念
- vce数学考试能用计算机,VCE课程资深数学老师Richard WANG:我的VCE数学教学心得体会...
- 微信直播是怎么实现的?