【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
【作者】sky
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· AI与.NET技术实操系列(六):基于图像分类模型对图像进行分类
2020-05-07 DTO 语法【转】
2020-05-07 linux主机hang住echo 0 > /proc/sys/kernel/hung_task_timeout_secs disables this message【转】
2018-05-07 DirectFB简介以及移植[一]【转】