讯为4412开发板移植官方demo例程

本文详细介绍了如何将LVGL的官方DEMO移植到开发板上运行。首先确保lvgl库已移植并运行正常,然后下载并解压缩lv_demos,修改lv_ex_conf.h启用所需DEMO,解决编译错误,最后在main.c中调用DEMO并更新Makefile进行编译。通过这些步骤,成功运行了LVGL_DEMO_MUSIC,并展示了运行结果。
摘要由CSDN通过智能技术生成


前言

之前分享了如何移植lvgl这个开源的gui库到自己的开发板上运行后,后续看到有人留言在问有没有移植官方的demo例程。今天刚好有时间,就试着移植下官方的demo,以下是大致过程。


一、准备工作

在移植官方demo之前,我们需要先确保lvgl gui库已经移植到我们的开发板上并正常运行。这里可以直接参考之前的文章,链接如下:
讯为4412开发板移植lvgl-7.11.0
到github上下载官方提供的lv_demos:
lv_demos v7.11.0
这里我直接拿之前移植好的工程来使用:
移植好lvgl-v7的工程
下面开始官方demo的移植

二、移植步骤

1.lv_demos v7.11.0 解压缩

我们先解压缩下载好的lv_demos-7.11.0.zip,然后将解压后的文件重命名为lv_examples并移动到lvgl路径下。
在这里插入图片描述
查看解压缩后该文件的内容如下:
在这里插入图片描述
可以看到同移植lvgl核心库和lv_drivers库类似,该文件夹下同样有一个lv_ex_conf_template.h文件,复制这份.h文件
在这里插入图片描述
将copy的lv_ex_conf.h文件中的#if 0 改为#if 1,然后随便打开一个demo的宏定义:

/*Music player for LVGL*/
#define LV_USE_DEMO_MUSIC      1
#if LV_USE_DEMO_MUSIC
#define LV_DEMO_MUSIC_AUTO_PLAY 0
#endif

2.编译lv_demos

更改lvgl路径下的Makefile

CC := arm-none-linux-gnueabi-gcc
RM := rm
MV := mv
MKDIR := mkdir

CUR_PATH=$(shell pwd)
LVGL_DIR = $(CUR_PATH)
LVGL_DIR_NAME ?= lvgl

include $(LVGL_DIR)/lvgl/lvgl.mk
include $(LVGL_DIR)/lv_drivers/lv_drivers.mk
include $(LVGL_DIR)/lv_examples/lv_examples.mk

OBJDIR:=./__tmp__
OBJEXT ?= .o
AOBJS = $(ASRCS:.S=$(OBJEXT))
COBJS = $(CSRCS:.c=$(OBJEXT))

SRC = $(ASRCS) $(CSRCS)
OBJ = $(AOBJS) $(COBJS)

CFLAGS:=-g -Wall -std=c99 -I$(LVGL_DIR)/lvgl -I$(LVGL_DIR)/lv_drivers -I$(LVGL_DIR)/lv_examples \
	-DLV_CONF_INCLUDE_SIMPLE -DLV_LVGL_H_INCLUDE_SIMPLE -DLV_EX_CONF_INCLUDE_SIMPLE

.PHONY: all
.DEFAULT: all

all: $(OBJ)
	$(MKDIR) $(OBJDIR) -p
	$(MV) $(OBJ) $(OBJDIR)

clean:
	$(RM) $(OBJDIR) -rf

更改完后先尝试make下lvgl路径下的文件,发下如下报错:
在这里插入图片描述
提示lv_font_montserrat_12和v_font_montserrat_30未定义,这里我们只需要在lvgl/lv_conf.h文件中打开相关的宏定义即可

/* Montserrat fonts with bpp = 4
 * https://fonts.google.com/specimen/Montserrat  */
#define LV_FONT_MONTSERRAT_8     0
#define LV_FONT_MONTSERRAT_10    0
#define LV_FONT_MONTSERRAT_12    0
#define LV_FONT_MONTSERRAT_14    1
#define LV_FONT_MONTSERRAT_16    0
#define LV_FONT_MONTSERRAT_18    0
#define LV_FONT_MONTSERRAT_20    0
#define LV_FONT_MONTSERRAT_22    0
#define LV_FONT_MONTSERRAT_24    0
#define LV_FONT_MONTSERRAT_26    0
#define LV_FONT_MONTSERRAT_28    0
#define LV_FONT_MONTSERRAT_30    0
#define LV_FONT_MONTSERRAT_32    0
#define LV_FONT_MONTSERRAT_34    0
#define LV_FONT_MONTSERRAT_36    0
#define LV_FONT_MONTSERRAT_38    0
#define LV_FONT_MONTSERRAT_40    0
#define LV_FONT_MONTSERRAT_42    0
#define LV_FONT_MONTSERRAT_44    0
#define LV_FONT_MONTSERRAT_46    0
#define LV_FONT_MONTSERRAT_48    0

改完之后编译,我们可以看到关于lvgl库和lvgl_demos相关的中间文件都可以正常生成。
在这里插入图片描述

3.调用demo

main.c

#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/mman.h>
#include <sys/time.h>
#include <linux/fb.h>
#include "lvgl.h"
#include "lv_examples.h"
#include "display/fbdev.h"
#include "indev/evdev.h"

int main(int argc, char *argv[])
{
    lv_init();  

    fbdev_init(); 

    static lv_color_t buf[DISP_BUF_SIZE];
    static lv_disp_buf_t disp_buf;

	/* fb init */
    lv_disp_buf_init(&disp_buf, buf, NULL, DISP_BUF_SIZE);
    lv_disp_drv_t disp_drv;
    lv_disp_drv_init(&disp_drv);
    disp_drv.buffer = &disp_buf;
    disp_drv.flush_cb = fbdev_flush; 
    lv_disp_drv_register(&disp_drv);
    
    lv_demo_music();
    while (1)
	{
        lv_task_handler();
        usleep(5000);
	}
}

同步更改Makefile:

SRCDIR:=.
OBJDIR:=.

TOP_PATH=$(shell pwd)

CC:=arm-none-linux-gnueabi-gcc
#STRIP:=strip
RM := rm
MV := mv
CD := cd

LVGL_DIR = $(TOP_PATH)/external/lvgl
LVGL_DIR_NAME ?= lvgl

include $(LVGL_DIR)/lvgl/lvgl.mk
include $(LVGL_DIR)/lv_drivers/lv_drivers.mk
include $(LVGL_DIR)/lv_examples/lv_examples.mk

CFLAGS:=-w -O2 -O3 -g0 -std=c99 -I$(LVGL_DIR)/lvgl -I$(LVGL_DIR)/lv_drivers -I$(LVGL_DIR)/lv_examples \
        -DPLAYER_DEBUG_VER -DLV_CONF_INCLUDE_SIMPLE -DLV_LVGL_H_INCLUDE_SIMPLE -DLV_EX_CONF_INCLUDE_SIMPLE

.PHONY: all
.DEFAULT: all

LVGL_OBJDIR:=./external/lvgl/__tmp__
#LVGL_OBJS:=$(wildcard $(LVGL_OBJDIR)/*.o)

OBJDIR:=./__tmp__
SRCS:=$(wildcard $(SRCDIR)/*.c)
OBJS:=$(addprefix $(OBJDIR)/,$(patsubst %.c,%.o,$(SRCS)))

PROGRAM:=player

all: $(LVGL_OBJDIR) $(PROGRAM)

$(LVGL_OBJDIR) : 
	$(CD) $(LVGL_DIR) && make

$(OBJS) : $(OBJDIR)/%.o : %.c
	@if [ ! -d $(dir $@) ] ; then mkdir -v -p $(dir $@) ; fi
	@echo compile: $<
	$(CC) $(CFLAGS) -c $< -o $@

$(PROGRAM): $(OBJS) $(LVGL_OBJDIR)
	$(CC) $(OBJS) $(wildcard $(LVGL_OBJDIR)/*.o) -o $(PROGRAM) -lpthread -static -lm
	$(MV) $(PROGRAM) $(OBJDIR)
	
clean:
	$(RM) -rf $(LVGL_OBJDIR)
	$(RM) -rf $(OBJDIR)

最后make clean 和 make all以下,没有发现报错
在这里插入图片描述
将player执行程序拷贝到开发板上运行
在这里插入图片描述
运行结果如下:
在这里插入图片描述

总结

以上就是移植lv_demos的全部过程,如果要运行其他例程,只需要在lv_ex_conf.h中打开对应的宏定义即可,这里就不再赘述。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Top0_0lll

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值