一、环境准备
pc系统:Ubuntu 16.04 LTS sudo apt-get install git sudo apt-get install cmake
二、下载代码
我们需要下载lvgl v7.11.0版本的三个代码包如下 1、lvgl 核心绘图代码
git clone https://github.com/lvgl/lvgl.git 切到tag v7.11.0 或者直接下载压缩包https://github.com/lvgl/lvgl/tree/v7.11.0
2、lv_drivers 设备相关中间驱动层
git clone https://github.com/lvgl/lv_drivers.git 切到tag v7.11.0 或者直接下载压缩包 https://github.com/lvgl/lv_drivers/tree/v7.11.0
3、lv_demos 演示demo
git clone https://github.com/lvgl/lv_demos.git 切到tag v7.11.0 或者直接下载压缩包 https://github.com/lvgl/lv_demos/tree/v7.11.0
三、修改集成
1、将代码解压并放置成如下形式
├── lvgl_prj
├── CMakeLists.txt
└── src
├── CMakeLists.txt
├── lv_conf.h
├── lv_drivers
│ ├── CMakeLists.txt
│ ├── lv_port_disp.c
│ ├── lv_port_disp.h
│ ├── lv_port_indev.c
│ ├── lv_port_indev.h
│ ├── display
│ ├── docs
│ ├── indev
│ ├── lv_drv_conf_templ.h
│ ├── win_drv.c
│ └── win_drv.h
├── lv_drv_conf.h
├── lv_demos
│ ├── CMakeLists.txt
│ ├── docs
│ ├── lv_apps
│ ├── lv_examples.h
│ ├── lv_ex_conf_templ.h
│ ├── lv_tests
│ ├── lv_tutorial
├── lv_ex_conf.h
├── lvgl
│ ├── CMakeLists.txt
│ ├── docs
│ ├── lv_conf_template.h
│ ├── lvgl.h
│ ├── examples
│ │ └── porting
│ │ ├── lv_port_disp_template.c
│ │ ├── lv_port_disp_template.h
│ │ ├── lv_port_indev_template.c
│ │ └── lv_port_indev_template.h
│ ├── scripts
│ └── src
├── sys_tick.c
├── sys_tick.h
├── tslib.h
└── main.c
将代码解压到lvgl_prj文件夹的src目录下即如:
├── lvgl_prj
└── src
├── lvgl
├── lv_drivers
└── lv_demos
接着按照上面标注的 #n 序号开始移植编写工作。
3.1 配置cmake工程的 CMakeLists.txt 配置文件
在使用我们的cmake 产生makefile之前先组织好工程的CMakeLists.txt cmake工程配置文件
#1 工程根目录下的CMakeLists.txt
cmake_minimum_required (VERSION 2.8)
set(CMAKE_C_COMPILER "arm-none-linux-gnueabi-gcc")
project(lvgl_prj)
add_subdirectory(src)
#2 src目录下的CMakeLists.txt
SET(CMAKE_BUILD_TYPE "Debug")
SET(CMAKE_C_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g2 -ggdb -std=gnu11")
SET(CMAKE_C_FLAGS_RELEASE "$ENV{CXXFLAGS} -O3 -Wall")
aux_source_directory(. DIR_SRCS)
message("DIR_SRC : ${DIR_SRCS}")
add_subdirectory(lvgl)
add_subdirectory(lv_demos)
add_subdirectory(lv_drivers)
include_directories(./lvgl/)
include_directories(./lv_drivers/)
include_directories(./lv_demos/src/lv_demo_music/)
include_directories(./lv_demos/src/lv_demo_widgets/)
add_executable(little_prj ${DIR_SRCS})
find_package(Threads)
set(VAR lv_examples_lib)
set(VAR ${VAR} lvgl_lib)
set(VAR ${VAR} lv_drivers_lib)
message("VAR : ${VAR}")
target_link_libraries(lvgl_prj ${VAR})
target_link_libraries(lvgl_prj /home/cks/work/lvgl/tslib/libts.so)
target_link_libraries(lvgl_prj ${CMAKE_THREAD_LIBS_INIT})
#3 lv_drivers 目录下的CMakeLists.txt
file(GLOB_RECURSE SOURCES ./*.c)
add_library(lv_drivers_lib ${SOURCES})
#4 lv_demos 目录下的CMakeLists.txt
file(GLOB_RECURSE SOURCES src/*.c)
add_library(lv_examples_lib ${SOURCES})
#5 lvgl 目录下的CMakeLists.txt 将 #endif 前面的add_library(lvgl STATIC ${SOURCES}) 改一下改成下面这样其余不变
file(GLOB_RECURSE SOURCES src/*.c)
add_library(lvgl_lib ${SOURCES})
endif()
3.2 为工程添加conf.h 配置文件
工程配置文件都放到src底下
#6 lv_conf.h 系统配置文件由lvgl目录下的lv_conf_template.h 拷贝重命名而来
- 打开文件将#if 0 改为 1;
- 配置屏幕分辨率 和像素格式
#define LV_HOR_RES_MAX (1024)
#define LV_VER_RES_MAX (600)
#define LV_COLOR_DEPTH 16
- 配置内存
# define LV_MEM_SIZE (10U * 1024U * 1024U)
- 配置触摸屏扫描频率
#define LV_INDEV_DEF_READ_PERIOD 10
- 配置系统滴答时间获取函数,这个很重要,不然系统的task都不能被驱动
#define LV_TICK_CUSTOM 1
#if LV_TICK_CUSTOM == 1
#define LV_TICK_CUSTOM_INCLUDE "../../../sys_tick.h"
#define LV_TICK_CUSTOM_SYS_TIME_EXPR (custom_tick_get())
#endif
如果你有debug的需求可以开启log #define LV_USE_LOG 1
#7 lv_drv_conf.h 驱动配置文件由lv_drivers目录下的lv_drv_conf_template.h 拷贝重命名而来
同样的把 #if 0 改成1 开启配置
- 配置显示节点 0 改为 1
#ifndef USE_FBDEV
# define USE_FBDEV 1
#endif
#if USE_FBDEV
# define FBDEV_PATH "/dev/fb0"
#endif
- 开启触摸屏驱动功能 0改为1
#ifndef USE_EVDEV
#define USE_EVDEV 1
#endif
#ifndef USE_BSD_EVDEV
# define USE_BSD_EVDEV 0
#endif
#if USE_EVDEV || USE_BSD_EVDEV
#define EVDEV_NAME "/dev/input/event0"
#8 lv_ex_conf.h demo 库配置文件由lv_demos目录下的lv_ex_conf_template.h 拷贝重命名而来
同样的if 0 改为1 启动配置 我们可以使能多widget的demo 就是很多控件的那个演示demo 我就不贴图上来了。
#define LV_USE_DEMO_WIDGETS 1
以上的步骤基本完善了整个工程的编译及功能配置。
由于篇幅问题,下一篇我们将完善相关平台驱动的配置包括framebuffer及触摸屏驱动tslib,以及main.c demo文件的编写,
|