透過Ubuntu虛擬機器+Linux移植LVGL並透過linux Frame buffer顯示

月笼纱發表於2024-05-21

文章參考: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. 建立資料夾並解壓原始碼:

    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
    # 基於配置模板建立
    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

      #  define USE_FBDEV           1
      #  define USE_EVDEV           1
      
    • 修改 lv_demo_conf.h :

      #define LV_USE_DEMO_WIDGETS        1
      
    • 修改 lv_conf.h :

      配置 Tick interface

      #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 號字型:

      #define LV_FONT_MONTSERRAT_12    1
      #define LV_FONT_MONTSERRAT_14    1
      #define LV_FONT_MONTSERRAT_16    1
      

      設定堆大小:

      • 使用 lvgl 內建記憶體分配方案:
        配置堆大小,實測 2KB 無法啟動demo,我給 2MB

        #  define LV_MEM_SIZE    (2 * 1024U * 1024U)          /*[bytes]*/
        
      • 使用 linux 系統記憶體分配:使能宏 #define LV_MEM_CUSTOM 1 即可

  4. 編寫主程式和Makefile

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

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

    #include "lv_demos/lv_demo.h"
    

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

     同時還要把Makefile同級目錄下的mouse_cursor_icon.c複製過來
    

    Makefile 做如下修改:

    CC = arm-linux-gnueabihf-gcc
    
    include $(LVGL_DIR)/lv_demos/lv_demo.mk
    
    CSRCS +=$(LVGL_DIR)/mouse_cursor_icon.c
    
  5. make 生成 demo

  6. 參考官方的文件手冊操作讓其在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 釋出!

相關文章