【lvgl】01-lvgl移植之在linux上跑
前言
本次笔记主要记录博主移植lvgl到linux上的过程,方便调试。
两种编译方式:
- 移植官方推荐的lvgl,基于linux SDL2,makefile编译方式。
- 另外还会分别移植lvgl v8.0 和 lvgl v8.3两个版本。都是基于SDL2多媒体框架和CMAKE编译。
- lvgl v8.3版本后面有时间再整理出来。
参考:
linux安装SDL2
sudo apt-get update && sudo apt-get install -y build-essential libsdl2-dev
官方推荐
参考:
- Simulator project for LVGL embedded GUI Library:https://github.com/lvgl/lv_port_pc_vscode
拉取lvgl PC 模拟子模块vscode sdl:
git clone --recursive https://github.com/lvgl/lv_sim_vscode_sdl
下载完如下图:

然后直接make:
make
转到lv_sim_vscode_sdl/build/bin执行demo固件即可:
./demo
结果如图:

如果上述clone下面这三个库时较慢,可以手动下载库文件,再复制到lv_sim_vscode_sdl目录下对应的目录中:(选同一版本)
lvgl库下载 :https://github.com/lvgl/lvgl.git
lvgl_drivers库下载 :https://github.com/lvgl/lv_drivers.git
lv_examples库下载 :https://github.com/lvgl/lv_examples.git
移植lvgl v8.0
打算搭建自己学习、调试lvgl的SDK,用CMAKE编译,所以就自己手把手构建SDK和移植lvgl。
目录框架
目录构建如下:
- app:专门存放学习、调试的UI app程序。
- build:用于编译。
- lib:第三方库。
- src:主要起始文件,如main.c。
- ui:lvgl源码、lvgl驱动等UI库文件。
- CMakeLists.txt:cmake编译顶层文件。

拉取lvgl
进入ui文件夹,clone两个库:
git clone -b release/v8.0 https://github.com/lvgl/lvgl.git
git clone -b release/v8.0 https://github.com/lvgl/lv_drivers.git


添加lv_conf.h和lv_drv_conf.h配置文件
lv_conf.h
添加lv_conf.h:在lvgl目录下
cp lv_conf_template.h lv_conf.h
使能该文件:改成1
#if 1 /*Set it to "1" to enable content*/
lv_drv_conf.h
- 添加lv_drv_conf.h:在lvgl目录下
cp lv_drv_conf_template.h lv_drv_conf.h
- 使能该文件:改成1
#if 1 /*Set it to "1" to enable content*/
开启SDL需要的宏:
- 把
USE_MONITOR宏改成1。我们用monitor来模拟。 USE_MOUSE改成1。用到鼠标。USE_MOUSEWHEEL改成1。鼠标滚轮也用到。USE_KEYBOARD改成1。用到键盘。
- 把
构建main.c
可以直接拷贝
lv_sim_vscode_sdl/main/src/m*。- 我把该目录下的两个文件都cp过来了。
main.c把头文件改成如下:
/*********************
* INCLUDES
*********************/
#define _DEFAULT_SOURCE /* needed for usleep() */
#include <stdlib.h>
#include <unistd.h>
#define SDL_MAIN_HANDLED /*To fix SDL's "undefined reference to WinMain" issue*/
#include <SDL2/SDL.h>
#include "lvgl.h"
#include "examples/lv_examples.h"
#include "monitor.h"
#include "mouse.h"
#include "keyboard.h"
#include "mousewheel.h"
main.c把lv_demo_widgets();demo注释掉。mouse_cursor_icon.c的头文件改成:
#include "lvgl.h"
构建自己的CMAKE
lvgl 8.0版本我打算全盘使用自己构建的cmake。
lvgl 8.3版本我打算兼容原生库的构建的cmake。
顶层目录下的cmake:
cmake_minimum_required(VERSION 3.0.0)
set(target lzm_lvgl_test_bin)
project(${target} VERSION 0.1.0)
set(src_lvgl_test
src/main.c
src/mouse_cursor_icon.c
)
add_executable(${target} ${src_lvgl_test})
include_directories(/usr/include)
target_link_libraries(${target} PRIVATE lzm_lvgl_lib lzm_lvgl_drv_lib)
target_link_libraries(${target} PRIVATE SDL2)
add_subdirectory(ui)
./ui:
target_compile_definitions(${target} PUBLIC "-DLV_CONF_INCLUDE_SIMPLE")
target_compile_definitions(${target} PUBLIC "-DLV_LVGL_H_INCLUDE_SIMPLE")
add_subdirectory(lvgl)
add_subdirectory(lv_drivers)
./ui/lvgl:
set(target lzm_lvgl_lib)
add_library(${target} STATIC)
target_compile_definitions(${target} PUBLIC "-DLV_CONF_INCLUDE_SIMPLE")
target_compile_definitions(${target} PUBLIC "-DLV_LVGL_H_INCLUDE_SIMPLE")
target_include_directories(${target} PUBLIC ./)
target_include_directories(${target} PUBLIC ./src)
target_include_directories(${target} PUBLIC ./src/core)
target_include_directories(${target} PUBLIC ./src/draw)
target_include_directories(${target} PUBLIC ./src/extra)
target_include_directories(${target} PUBLIC ./src/font)
target_include_directories(${target} PUBLIC ./src/gpu)
target_include_directories(${target} PUBLIC ./src/hal)
target_include_directories(${target} PUBLIC ./src/misc)
target_include_directories(${target} PUBLIC ./src/widgets)
# app include
target_include_directories(${target} PUBLIC ./examples)
# app src
file(GLOB_RECURSE src_lvgl_app examples/*.c)
file(GLOB_RECURSE src_lvgl src/*.c)
target_sources(${target} PRIVATE
${src_lvgl}
${src_lvgl_app}
)
./ui/lv_drivers:
set(target lzm_lvgl_drv_lib)
add_library(${target} STATIC)
target_link_libraries(${target} PUBLIC lzm_lvgl_lib)
target_include_directories(${target} PUBLIC ./)
target_include_directories(${target} PUBLIC ./display)
target_include_directories(${target} PUBLIC ./gtkdrv)
target_include_directories(${target} PUBLIC ./indev)
target_include_directories(${target} PUBLIC ./wayland)
target_include_directories(${target} PUBLIC ./win32drv)
file(GLOB_RECURSE src_lvgl_drv ./*.c)
target_sources(${target} PRIVATE
${src_lvgl_drv}
)
编译
- 在./build路径下进行
cmake ..:结果如下,Makefile创建成功:
jamie@lzm-vm-linux:~/work/study/lvgl/lzm_lvgl_v8.0/build$ cmake ..
-- The C compiler identification is GNU 9.4.0
-- The CXX compiler identification is GNU 9.4.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring done
-- Generating done
-- Build files have been written to: /home/jamie/work/study/lvgl/lzm_lvgl_v8.0/build
jamie@lzm-vm-linux:~/work/study/lvgl/lzm_lvgl_v8.0/build$ ls
CMakeCache.txt CMakeFiles cmake_install.cmake Makefile ui
- 然后直接make,遇错就改:
jamie@lzm-vm-linux:~/work/study/lvgl/lzm_lvgl_v8.0/build$ make
[ 90%] Built target lzm_lvgl_lib
Consolidate compiler generated dependencies of target lzm_lvgl_drv_lib
[ 98%] Built target lzm_lvgl_drv_lib
Consolidate compiler generated dependencies of target lzm_lvgl_test_bin
[ 98%] Building C object CMakeFiles/lzm_lvgl_test_bin.dir/src/mouse_cursor_icon.c.o
[ 99%] Linking C executable lzm_lvgl_test_bin
[100%] Built target lzm_lvgl_test_bin
jamie@lzm-vm-linux:~/work/study/lvgl/lzm_lvgl_v8.0/build$
- 执行:
jamie@lzm-vm-linux:~/work/study/lvgl/lzm_lvgl_v8.0/build$ ./lzm_lvgl_test_bin
【lvgl】01-lvgl移植之在linux上跑的更多相关文章
- Python3.7.2,在Linux上跑来跑去的,是在升级打怪么?
Python3.7.2,在Linux上跑来跑去的,是在升级打怪么? 前不久,发布了Python在Windows(程序员:Python学不学?完全没必要纠结)和Mac OS(我是Python,P派第 ...
- Linux上跑两个版本的php,5.4.45和5.3.24
首先,装的实在艰难,所以容我吐槽两句: PHP好个P,两个小版本都不兼容,把这个php5.3.24放在5.4.45环境下都跑不了.对于我这种用多了向下兼容的java的人来说,简直无法想象! 网上有装俩 ...
- .NET 跨平台框架Avalonia UI: 填坑指北(二):在Linux上跑起来了
上一章回顾: .NET 跨平台框架Avalonia UI: 填坑指北(一):熟悉UI操作 本篇将要阐述 包括但不仅限于Avalonia及所有Windows到Linux跨平台开发 的一些注意事项: 一 ...
- 让asp.net和php同时在Linux上跑起来
实现这个想法有很多种方法,我就我最近算是比较熟悉的方式来说给大家吧. 因为有了mono,所以.net才能跨平台,.net都跨平台了,.net平台的童鞋们是不是应该提起精神好好了解下mono呢? 当然了 ...
- Linux上跑MySQL优化技巧
1.禁止操作系统更新文件的atime属性 atime是Linux/UNIX系统下的一个文件属性,每当读取文件时,操作系统都会将读操作时间回写到磁盘上.对于读写频繁的数据库文件来说,记录文件的访问时间一 ...
- 不装mono,你的.NET程序照样可以在Linux上运行!
让.NET应用程序在linux上运行,目前通用的做法就是在Linux上安装mono,然后通过”mono your.exe“命令运行这个程序. 这种运行.net程序的办法有两个弱点,一个是需要客户机安装 ...
- C#在Linux上的开发指南
本人才疏学浅,在此记录自己用C#在Linux上开发的一点经验,写下这篇指南.(给想要在Linux上开发C#程序的朋友提供建议) 目前在Linux上跑的网站:http://douxiubar.com | ...
- C#在linux上运行实现
1 C#开发完了服务 2 部署到linux centos7上 3无法直接运行 解决方法 1 linux cenos7上安装mono 2 执行mono xxx.exe 即可 解决方法2 下载 anye ...
- linux上实现jmeter分布式压力测试(转)
摘要:最近根据公司工作的需求,学习了一些压力测试的知识,目前,公司使用的是jmeter进行压力测试.下面就记录下近期的学习.我想将这次的博文分成三个部分:1.开始测试前的准备(测试环境的搭建)2.在一 ...
- (原创)在Linux上安装运行Python3(CentOS7为例)
在win10上开发好的python项目要部署在Linux上要面对的问题:怎么在Linux上跑py文件呢? 以Lunix CentOS7.x平台为例,CentOS系统上自带的已有python2.x 的版 ...
随机推荐
- java代码审计的点
java代码审计的点 组件的审计 首先看pom.xml查看第三方组件和第三方组件的版本 常用的第三方组件: 第三方组件 漏洞类型 组件漏洞版本 log4j2 远程代码执行 Apache log4j2 ...
- Docker 搭建 Nexus3 私服 | 基本操作
1 Docker 安装 Nexus3 1.1 创建目录 在硬盘上创建 Nexus3 的主目录: mkdir -p /Users/yygnb/dockerMe/nexus3 为该目录添加权限: chmo ...
- GB/T 28181联网系统通信协议结构和技术实现
技术回顾 在本文开头,我们先一起回顾下GB/T28181联网系统通信协议结构: 联网系统在进行视音频传输及控制时应建立两个传输通道:会话通道和媒体流通道. 会话通道用于在设备之间建立会话并传输系统控制 ...
- null和undefined的区别、数组和伪数组的区别
null和undefined的区别 undefined: 字面意思是未定义的值,语义是希望表示一个变量最原始的状态,而非人为操作的结果.这种原始状态会在以下四个场景中出现: 声明了一个变量但没有赋值 ...
- 《Java基础——break与continue用法详解》
Java基础--break与continue用法详解 1. break语句: 规则: 1. 仅用于循环语句和switch语句当中,用于跳出循环. 2. 当只有一层循环时,则直接跳出循环,不 ...
- kubernetes(k8s)命令大全
状态查询 # 查看集群信息 # kubectl cluster-info Kubernetes control plane is running at https://127.0.0.1:8443 K ...
- 7.nexus版本升级
nexus-3.14.0升级到3.15.2 首先来看下原来的服务目录: nexus-3.14.0-04 sonatype-work 注意:nexus-3.14.0-04是应用程序包,sonatype- ...
- 用VS Code搞Qt 6:Gui基础类型——QGuiApplication和QWindow
在99.996%的情况下,我们弄 Qt 应用都会使用 QApplication 类和 QWidget 类,即直接用 Widgets 库中的组件/控件.为了方便开发人员自己造轮子,Qt 也提供了一套基础 ...
- 报错 Invalid options in vue.config.js: "baseUrl" is not allowed 问题解决
报错 Invalid options in vue.config.js: "baseUrl" is not allowed vue3.0版本中 执行 npm run build会出 ...
- [题解] Codeforces Global Round 22 1738 A B C D E F 题解
很久没rated打过cf的比赛了,这次打得还行,至少进前100了 点我看题 A. Glory Addicts 把类型0的数放进数组a里,类型1的数放进数组b里.如果\(|a|=|b|\),你可以把所有 ...