IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> LVGL linux arm平台上的详细移植过程(上) -> 正文阅读

[嵌入式]LVGL linux arm平台上的详细移植过程(上)

一、环境准备

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 #1
└── src
    ├── CMakeLists.txt #2
    ├── lv_conf.h  #6
    ├── lv_drivers
    │   ├── CMakeLists.txt #3
    │   ├── lv_port_disp.c  #9
    │   ├── lv_port_disp.h  #10
    │   ├── lv_port_indev.c #11
    │   ├── lv_port_indev.h #12
    │   ├── display
    │   ├── docs
    │   ├── indev
    │   ├── lv_drv_conf_templ.h
    │   ├── win_drv.c
    │   └── win_drv.h
    ├── lv_drv_conf.h #7
    ├── lv_demos
    │   ├── CMakeLists.txt #4
    │   ├── docs
    │   ├── lv_apps
    │   ├── lv_examples.h
    │   ├── lv_ex_conf_templ.h
    │   ├── lv_tests
    │   ├── lv_tutorial
    ├── lv_ex_conf.h #8
    ├── lvgl
    │   ├── CMakeLists.txt #5
    │   ├── 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 #13
    ├── sys_tick.h #14
    ├── tslib.h
    └── main.c     #15

将代码解压到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)  
#cmake最低使用版本
set(CMAKE_C_COMPILER "arm-none-linux-gnueabi-gcc") 
#设置编译器,此处为ARM平台,如果你安装了编译链就用名称,没安装请用绝对路径
project(lvgl_prj)
#工程名
add_subdirectory(src)
#添加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) #将当前c文件名添加至DIR_SRC
message("DIR_SRC : ${DIR_SRCS}")
add_subdirectory(lvgl)        #添加目录 lvgl
add_subdirectory(lv_demos) #添加目录 lv_examples
add_subdirectory(lv_drivers)  #添加目录 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})  #链接生成文件little_prj 由DIR_SRC链接。
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})   #设置链接little_prj的 依赖关系 ,依赖 VAR = lvgl_lib lv_drivers
target_link_libraries(lvgl_prj /home/cks/work/lvgl/tslib/libts.so)
#链接tslib的动态库
target_link_libraries(lvgl_prj ${CMAKE_THREAD_LIBS_INIT})

#3 lv_drivers 目录下的CMakeLists.txt

file(GLOB_RECURSE SOURCES ./*.c)
#add_library(lv_drivers STATIC ${SOURCES})
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 STATIC ${SOURCES})
add_library(lvgl_lib ${SOURCES})

endif()

3.2 为工程添加conf.h 配置文件

工程配置文件都放到src底下

#6 lv_conf.h 系统配置文件由lvgl目录下的lv_conf_template.h 拷贝重命名而来

  1. 打开文件将#if 0 改为 1;
  2. 配置屏幕分辨率 和像素格式
#define LV_HOR_RES_MAX          (1024)
#define LV_VER_RES_MAX          (600)
/* Color depth:
 * - 1:  1 byte per pixel
 * - 8:  RGB332
 * - 16: RGB565
 * - 32: ARGB8888
 */
#define LV_COLOR_DEPTH     16
  1. 配置内存
#  define LV_MEM_SIZE    (10U * 1024U * 1024U)
  1. 配置触摸屏扫描频率
/* Input device read period in milliseconds */
#define LV_INDEV_DEF_READ_PERIOD          10  //ms
  1. 配置系统滴答时间获取函数,这个很重要,不然系统的task都不能被驱动
/* 1: use a custom tick source.
 * It removes the need to manually update the tick with `lv_tick_inc`) */
#define LV_TICK_CUSTOM     1
#if LV_TICK_CUSTOM == 1
#define LV_TICK_CUSTOM_INCLUDE  "../../../sys_tick.h"         /*Header for the system time function*/
#define LV_TICK_CUSTOM_SYS_TIME_EXPR (custom_tick_get())     /*Expression evaluating to current system time in ms*/
#endif   /*LV_TICK_CUSTOM*/

如果你有debug的需求可以开启log #define LV_USE_LOG 1

#7 lv_drv_conf.h 驱动配置文件由lv_drivers目录下的lv_drv_conf_template.h 拷贝重命名而来

同样的把 #if 0 改成1 开启配置

  1. 配置显示节点 0 改为 1
#ifndef USE_FBDEV
#  define USE_FBDEV           1 //0->1
#endif
#if USE_FBDEV
#  define FBDEV_PATH          "/dev/fb0"
#endif
  1. 开启触摸屏驱动功能 0改为1
/*-------------------------------------------------
 * Mouse or touchpad as evdev interface (for Linux based systems)
 *------------------------------------------------*/
#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 我就不贴图上来了。

/*Show some widget*/
#define LV_USE_DEMO_WIDGETS        1

以上的步骤基本完善了整个工程的编译及功能配置。

由于篇幅问题,下一篇我们将完善相关平台驱动的配置包括framebuffer及触摸屏驱动tslib,以及main.c demo文件的编写,

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-08-25 12:22:20  更:2021-08-25 12:22:56 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/21 5:18:30-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码