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图形相关推荐

  1. Linux执行yum不显示时间图形,Linux停的yum命令详解(朝花夕拾)

    yum是干什么的使用redhat,fedora的linuxer肯定都为rpm著名的dependency hell而头疼(这也是所有基于rpm发行版都有的问题).foo is needed by bar ...

  2. Linux执行yum不显示时间图形,Linux命令yum

    yum(全称为 Yellow dog Updater, Modified)是一个在Fedora.RedHat.ContOS以及SUSE中的Shell前端软件包管理器.基於RPM包管理,能够从指定的服务 ...

  3. linux下tomcat6无法显示图片验证码 少了图形插件

    linux下tomcat6无法显示图片验证码(windows下显示正常) 原创 2015年10月20日 10:31:47 3526 linux下tomcat6无法显示图片验证码(windows下显示正 ...

  4. linux iostat 时间戳,Linux基础命令---iostat显示设备状态

    iostat iostat 指令用来显示cpu状态,系统IO设备的状态,以及相关磁盘和NFS使用状态.iostat命令通过观察设备相对于其平均传输速率的活动时间来监视系统输入/输出设备负载.iosta ...

  5. Linux的tty设备介绍

    本文转载于:对于Linux内核tty设备的一点理解 目录 前言 一.终端按照其自身能力分类 二.linux系统的终端设备 1. 控制台 2. 伪终端pty(pseudo-tty) 3. 串口终端(/d ...

  6. [中英对照]User-Space Device Drivers in Linux: A First Look | 初识Linux用户态设备驱动程序...

    如对Linux用户态驱动程序开发有兴趣,请阅读本文,否则请飘过. User-Space Device Drivers in Linux: A First Look | 初识Linux用户态设备驱动程序 ...

  7. linux 进程名最长显示多少_全面系统地总结Linux的基本操作(上)

    1. Linux文件和目录 Windows 和 Linux 文件系统 在 windows 平台下,打开"计算机",我们看到的是一个个的驱动器盘符:每个驱动器都有自己的根目录结构,这 ...

  8. linux内核中kset是什么意思,Linux内核之设备驱动-底层数据结构kobject/kset

    Linux内核之设备驱动-底层数据结构kobject/kset kobject kobject是组成device.driver.bus.class的基本结构.如果把前者看成基类,则后者均为它的派生产物 ...

  9. linux下usb设备节点名不固定,解决Linux下USB设备节点ttyUSB名不固定的问题,生成固定USB转串口设备节点...

    解决Linux下USB设备节点ttyUSB名不固定的问题,生成固定USB转串口设备节点 2018-09-19 http://blog.sina.com.cn/s/blog_8b58097f0102wx ...

最新文章

  1. iOS UILabel加载html点击图片查看大图 附demo
  2. python3 环境变量
  3. TheBeerHouse 网站项目学习笔记(5)---架构设计
  4. 多实例多进程网络编程PHP,php socket网络编程基础知识(四):多进程
  5. 使用直播网站源码,搭建直播平台的最难点
  6. Nero8刻录引导系统光盘镜像图文教程
  7. 如何安装树莓派摄像头模块
  8. 苹果真伪查询_拆解报告:山寨版苹果AirPods Pro
  9. 【图文并茂】正版Win10 U盘重装系统教程
  10. 微信语音对方无法听到声音解决办法
  11. submit 和 button的区别
  12. game.php,game.php
  13. ABC190 D - Staircase Sequences(数学)
  14. 航天器导航属于计算机应用的哪个领域,计算机应用基础作业1含答案
  15. vue知识点详解,Vue之v-prev、vue-virtual-scroll-list、alise、data动态添加数据、v-for中的key值等
  16. 判断字母是元音、辅音、半元音
  17. XML详解----Schema
  18. 机器视觉-相机标定及畸变矫正
  19. springboot和redis处理页面缓存
  20. 微信小程序56个民族数组选择器

热门文章

  1. 八年数据库转型之路:技术易改,匠心永存
  2. html添加js加随机数,javaScript如何添加随机数
  3. 表达数字的英文字母计数
  4. R语言中的并行计算——二、搭建R的集群
  5. 常见中间件漏洞的总结
  6. 为了方便调试程序 php提供了什么函数,下列关于整型的表示方式正确的是( )。...
  7. 【FPGA教程案例37】通信案例7——基于FPGA的FFT,IFFT傅里叶变换和逆变换
  8. 亚信科技香港上市 备战“连接”革命
  9. QgraphicsScene类
  10. python创建excel表格_python使用VBA:Excel创建图表(转)