1. 程式人生 > 其它 >【Linux】移植:LVGL 8.0.2 ui庫顯示

【Linux】移植:LVGL 8.0.2 ui庫顯示

轉自:https://blog.csdn.net/h451884098/article/details/120119545

  開發板:JZ2440
  系統版本:Linux 4.10.17 + 裝置樹
  程式碼倉庫地址:lvgl 倉庫
  LVGL 版本:v8.0.2
  LVGL 驅動版本:v6.1.1
  LVGL demo版本:v5.2-rc

  注:
  1)在使用 lvgl 之前,要確保當前系統支援了顯示屏驅動,如 /dev/fb0。
  2)lvgl 編譯會將自己所用到的庫全部打包到一起,所以不需要額外新增動態庫檔案。

  

一、建立目錄
  建立一個 lvgl 目錄,然後將 lvgl 的原始碼放進該目錄。
  
1)lvgl-8.0.2   2)lv_drivers-6.1.1   3)lv_demos-5.2-rc(可以不要,只是用來驗證的)      但是,為了相容這三個目錄中的 .mk 檔案,我們需要將這三個目錄重新命名(與上面三個目錄對應):   1)lvgl   2)lv_drivers   3)lv_examples(可以不要,只是用來驗證的)    二、拷貝標頭檔案   也就是將標頭檔案拷貝到 lvgl 目錄下。 cd lvgl cp ./lvgl/lv_conf_template.h lv_conf.h cp ./lv_drivers/lv_drv_conf_templ.h lv_drv_conf.h cp .
/lv_examples/lv_ex_conf_templ.h lv_ex_conf.h    三、修改標頭檔案 1、lv_conf.h #if 1 /*Set it to "1" to enable content*/ ... #define LV_COLOR_DEPTH 16 ... #endif 2、lv_drv_conf.h #if 1 /*Set it to "1" to enable the content*/ ... #ifndef USE_FBDEV # define USE_FBDEV 1 #endif ... #endif 3、lv_ex_conf.h #if 1 /*Set it to "1" to enable the content*/ ...
/* 根據自己需求選擇對應的 demo,可以不要,自己來驗證 */ #endif    四、新增 Makefile   在 lvgl 目錄下建立一個 output 目錄,用於存放生成檔案。 mkdir output 1   在 lvgl 目錄下建立一個 Makefile 檔案。 CC := arm-zepunt-linux-gnueabi-gcc LVGL_DIR ?= ${shell pwd} LVGL_DIR_NAME ?= lvgl WARNINGS = -Wall -Wextra \ -Wshadow -Wundef -Wmaybe-uninitialized -Wmissing-prototypes -Wpointer-arith -Wuninitialized \ -Wunreachable-code -Wreturn-type -Wmultichar -Wdouble-promotion -Wclobbered -Wdeprecated \ -Wempty-body -Wtype-limits -Wsizeof-pointer-memaccess CFLAGS ?= -O3 -g0 $(WARNINGS) -I$(LVGL_DIR)/$(LVGL_DIR_NAME) -I$(LVGL_DIR) -I. LDFLAGS ?= -lm BIN = ./output/demo #Collect the files to compile MAINSRC = ./main.c include $(LVGL_DIR)/lvgl/lvgl.mk include $(LVGL_DIR)/lv_drivers/lv_drivers.mk include $(LVGL_DIR)/lv_examples/lv_tutorial/1_hello_world/lv_tutorial_hello_world.mk OBJEXT ?= .o AOBJS = $(ASRCS:.S=$(OBJEXT)) COBJS = $(CSRCS:.c=$(OBJEXT)) MAINOBJ = $(MAINSRC:.c=$(OBJEXT)) SRCS = $(ASRCS) $(CSRCS) $(MAINSRC) OBJS = $(AOBJS) $(COBJS) ## MAINOBJ -> OBJFILES all: default %.o: %.c @$(CC) $(CFLAGS) -c $< -o $@ @echo "CC $<" default: $(AOBJS) $(COBJS) $(MAINOBJ) $(CC) -o $(BIN) $(MAINOBJ) $(AOBJS) $(COBJS) $(LDFLAGS) clean: rm -f $(BIN) $(AOBJS) $(COBJS) $(MAINOBJ)    五、編寫 main.c 檔案,用來測試 #include "lvgl/lvgl.h" #include "lv_drivers/display/fbdev.h" #include "lv_ex_conf.h" #define DISP_BUF_SIZE (480 * 272) /* lvgl 用於繪製螢幕的緩衝區 */ static lv_obj_t *label; static lv_color_t buf[DISP_BUF_SIZE]; static lv_disp_draw_buf_t disp_buf; lv_disp_drv_t disp_drv; lv_disp_t *disp; void demo(void) { lv_obj_t * label1 = lv_label_create(lv_scr_act()); /*Modify the Label's text*/ lv_label_set_text(label1, "Hello world!"); /* Align the Label to the center * NULL means align on parent (which is the screen now) * 0, 0 at the end means an x, y offset after alignment*/ lv_obj_align(label1, LV_ALIGN_CENTER, 0, 0); } int main(int argc, char **argv) { lv_init(); /* lvgl 初始化 */ /** * fb 初始化 此函式在 lv_drivers/display/fbdev.c 中 * 就是開啟 fb 裝置對映視訊記憶體出來使用 */ fbdev_init(); lv_disp_draw_buf_init(&disp_buf, buf, NULL, (480 * 272)); lv_disp_drv_init(&disp_drv); disp_drv.draw_buf = &disp_buf; disp_drv.flush_cb = fbdev_flush; /* fbdev_flush這就是輸入顯示驅動提供的操作函式 */ disp_drv.hor_res = 480; disp_drv.ver_res = 272; disp = lv_disp_drv_register(&disp_drv); demo(); while(1) { lv_task_handler(); usleep(5000); } }   將 output 目錄下的 demo 檔案通過串列埠(lrzsz)傳給開發板,然後執行下面的命令就可以檢查程式碼執行情況了。 chmod +x demo ./demo ———————————————— 版權宣告:本文為CSDN博主「Zeepunt」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處連結及本宣告。 原文連結:https://blog.csdn.net/h451884098/article/details/120119545