通过Ubuntu虚拟机+Linux移植LVGL并通过linux Frame buffer显示

文章参考:https://gitee.com/socbis/linux-lvgl

lvgl on linux Frame buffer

主机环境: Ubuntu 18.04

lvgl 8.0.1

获取源码并运行demo

  1. 获取源码

    需要3样东西来构建demo :

    1. lvgl核心控件库: 从此处获取源码 lvgl,选择版本 Release v8.0.1.

    2. 显示和触摸接口层 : 关联图形库与硬件,源码 lv_drivers,选择版本 v8.0.

    3. lv_demo 源码 : 源码 lv_demos, 同样选择版本 v8.0.

      最终得到三个压缩包:

    • lvgl-8.0.1.tar.gz
    • lv_drivers-release-v8.0.zip
    • lv_demos-release-v8.0.zip
  2. 创建文件夹并解压源码:

    sh 复制代码
     mkdir lvgl_linux
     cd lvgl_linux
     # 复制上述压缩包到此处 .
    
     # 解压
     tar xvf lvgl-8.0.1.tar.gz
     unzip lv_drivers-release-v8.0.zip
     unzip lv_demos-release-v8.0.zip
    
     # 重命名解压后的文件夹
     mv lvgl-8.0.1 lvgl
     mv lv_drivers-release-v8.0 lv_drivers
     mv lv_demos-release-v8.0 lv_demos
    
     # delete zip tar
     rm lv_drivers-release-v8.0.zip lv_demos-release-v8.0.zip lvgl-8.0.1.tar.gz
    
     ls
     lv_demos  lv_drivers  lvgl
  3. 获取配置文件

    • 核心库配置文件 : lv_conf.h

    • 驱动配置文件 : lv_drv_conf.h

    • demo配置文件 : lv_demo_conf.h

      sh 复制代码
      # 基于配置模板创建
      cp lvgl/lv_conf_template.h lv_conf.h
      cp lv_drivers/lv_drv_conf_template.h lv_drv_conf.h
      cp lv_demos/lv_demo_conf_template.h lv_demo_conf.h
      
      ls
      lv_conf.h  lv_demo_conf.h  lv_demos  lv_drivers  lv_drv_conf.h  lvgl

      修改配置文件:

    • 使能,将3个文件 #if 0 改为 #if 1 /*Set it to "1" to enable content*/

    • 修改 lv_drv_conf.h

      c 复制代码
        #  define USE_FBDEV           1
        #  define USE_EVDEV           1
    • 修改 lv_demo_conf.h :

      c 复制代码
        #define LV_USE_DEMO_WIDGETS        1
    • 修改 lv_conf.h :

      配置 Tick interface

      c 复制代码
        #define LV_TICK_CUSTOM     1
        #if LV_TICK_CUSTOM
        #define LV_TICK_CUSTOM_INCLUDE  <stdint.h>         /*Header for the system time function*/
        extern uint32_t custom_tick_get(void);
        #define LV_TICK_CUSTOM_SYS_TIME_EXPR (custom_tick_get())     /*Expression evaluating to current system time in ms*/
        #endif   /*LV_TICK_CUSTOM*/

      使能 12,16 号字体:

      c 复制代码
        #define LV_FONT_MONTSERRAT_12    1
        #define LV_FONT_MONTSERRAT_14    1
        #define LV_FONT_MONTSERRAT_16    1

      设置堆大小:

      • 使用 lvgl 内建内存分配方案: 配置堆大小,实测 2KB 无法启动demo,我给 2MB

        c 复制代码
          #  define LV_MEM_SIZE    (2 * 1024U * 1024U)          /*[bytes]*/
      • 使用 linux 系统内存分配:使能宏 #define LV_MEM_CUSTOM 1 即可

  1. 编写主程序和Makefile

    main.c 参考自 lv_port_linux_frame_buffer/blob/release/v8.2/main.c

    main.c 中修改 lv_demo.h 路径:

    c 复制代码
     #include "lv_demos/lv_demo.h"

    Makefile 参考自 lv_port_linux_frame_buffer/blob/release/v8.2/Makefile

     同时还要把Makefile同级目录下的mouse_cursor_icon.c复制过来
    

    Makefile 做如下修改:

    makefile 复制代码
     CC = arm-linux-gnueabihf-gcc
    
     include $(LVGL_DIR)/lv_demos/lv_demo.mk
    
     CSRCS +=$(LVGL_DIR)/mouse_cursor_icon.c
  2. make 生成 demo

  3. 参考官方的文档手册操作让其在Ubuntu上能显示:https://blog.lvgl.io/2018-01-03/linux_fb

     1、Ctrl + Alt + F6切换TTF(也有可能是Ctrl + Alt + F1 /Ctrl + Alt + F4等,切换不了就多试下)
     2、sudo su切换用户
     3、service lightdm stop
     4、./demo,即可看到官方demo了(只能看,不能操作,鼠标看不到,需要再研究下)
     5、service lightdm start即可切换回linux桌面ttf
    

本文由博客一文多发平台 OpenWrite 发布!

相关推荐
柠檬叶子C5 天前
【F的领地】项目拆解:百家号批量搬运掘金 | 搬运类项目核心思路分享
随笔
柠檬叶子C7 天前
【平渊科技】项目拆解:小说推文项目 | 经验分享
副业·随笔
柠檬叶子C13 天前
【平渊网络】副业项目拆解:视频借鉴式搬运项目 | 搞笑视频跨平台 “借鉴式” 搬运项目思路 | 抖音防查重机制基础
随笔
躺柒18 天前
2024年8月总结及随笔之逝
总结·随笔
板栗妖怪20 天前
ssrf做题随记--任务计划的写入、csrf简单知识
学习·随笔·小记
iommer22 天前
LVGL之FFmpeg使用
随笔
韩曙亮1 个月前
【学习方法】高效学习因素 ② ( 学习动机 | 内在学习动机 | 外在学习动机 | 外在学习动机的调整方向 | 保护学习兴趣 | 高考竞争分析 )
学习·学习方法·随笔·高效学习·学习动机
韩曙亮1 个月前
【学习方法】高效学习因素 ① ( 开始学习 | 高效学习因素五大因素 | 高效学习公式 - 学习效果 = 时间 x 注意力 x 精力 x 目标 x 策略 )
学习方法·注意力·随笔·高效学习·学习策略·学习时长·学习目标
柠檬叶子C3 个月前
《大道平渊》· 拾肆 —— 不要为不属于你负责的事情负责
随笔
吃辣椒的年糕3 个月前
最小二乘法算法(个人总结版)
人工智能·深度学习·算法·fpga开发·信息与通信·最小二乘法·随笔