【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 的版 ...
随机推荐
- 第九十九篇:JS闭包
好家伙,总是要来的,去面对那些晦涩难懂的原理,它就在那里,等着我去搞定它 首先我要去补充一些最基本的概念, 1.什么是内存? 新华字典永远的神, 但这个解释显然不够 去看看百度百科: 内存: CP ...
- CAD问题
经过长时间的摸索,终于弄好了du.我是通过禁用硬件加速可zhi以用的.方法就是打开cad,点击左上角dao的那个黑色小三角,再点击"选项","系统"," ...
- 开源:Taurus.MVC-Java 版本框架 (支持javax.servlet.*和jakarta.servlet.*双系列,内集成微服务客户端)
版本说明: 因为之前有了Taurus.MVC-DotNet 版本框架,因此框架标了-Java后缀. .Net 版本: 开源文章:开源:Taurus.MVC-DotNet 版本框架 (支持.NET C ...
- Python数据科学手册-Pandas:层级索引
一维数据 和 二维数据 分别使用Series 和 DataFrame 对象存储. 多维数据:数据索引 超过一俩个 键. Pandas提供了Panel 和 Panel4D对象 解决三维数据和四维数据. ...
- 利用Kafka的Assign模式实现超大群组(10万+)消息推送
引言 IM即时通信场景下,最重要的一个能力就是推送:在线的直接通过长连接网关服务转发,离线的通过APNS或者极光等系统进行推送. 本文主要是针对在线用户推送场景来进行总结和探讨:如何利用Kafka ...
- ProxySQL 配置ProxySQL
转载自:https://www.jianshu.com/p/212397a1be67 假定你已经对ProxySQL的架构有所了解.本文对ProxySQL的所有配置都是使用Admin管理接口完成的,该管 ...
- Docker 数据共享与持久化
- secureCRT登录ubuntu 报错:`No compatible key-exchange method. The server supports these methods: diffie-hellman`
在VMware虚拟机中安装好ubuntu 20.04,已安装并启动sshd,但是使用secureCRT远程登录时则报错: Key exchange failed. No compatible key- ...
- 实用脚本:检查高 CPU / 内存消耗进程
1 检查高 CPU 消耗进程在 Linux 上运行了多长时间的 Bash 脚本 该脚本将帮助你确定高 CPU 消耗进程在 Linux 上运行了多长时间. # vi /opt/scripts/long- ...
- 【前端必会】单页应用-你的新朋友wepack
背景 我们开发的功能可能是简单的,但是实现功能的代码行数却可能成千上万 出于易于维护.安全.服用,我们会根据我们的经验设计我们的代码,拆解成多个独立的功能模块(代码片段.更多的文件) JS的模块规范有 ...