MSYS2 LVGL模拟环境搭建

Creative Commons
本作品采用知识共享署名

本文说明在windows下如何利用msys2搭建lvgl模拟环境。

安装MSYS2

下载MSYS2

64bit Windows在https://sourceforge.net/projects/msys2/files/Base/x86_64/下选择下载合适的版本,例如我希望不安装就直接下载
msys2-base-x86_64-20190524.tar.xz

安装

直接解压缩msys2-base-x86_64-20190524.tar.xz,然后进入msys64双击msys2_shell.bat就会弹出MSYS2的cli窗口,在这下面的操作差不多就和linux一样了

安装编译依赖

首先更新源,更新过程中可能会重新安装一些包,会有重启msys2的要求

1
pacman -Syu

安装编译/调试/下载 lvgl需要的包

1
2
3
4
5
pacman -S git
pacman -S make
pacman -S gcc
pacman -S gdb
pacman -S mingw-w64-x86_64-SDL2

问题处理

  1. 一定要用pacman -Syu更新源
    不能只用”pacman -Sy”, 否则安装SDL2的时候一些包会出现下面问题

    1
    Child process exited with status 127
  2. 下载包出问题

    1
    repo.msys2.org : Operation too slow. Less than 1 bytes/sec transferred the last 10 seconds

http://mirrors.ustc.edu.cn/msys2/去找对应的包,下载下来后方到msys64\var\cache\pacman\pkg下面,再执行安装
3.设置代理
和linux下面的方法一样

1
export http_proxy="ip:port"

LVGL编译

下载LVGL

1
git clone --

编译

1
2
cd
make

编译问题处理

  1. SDL/SDL.h: No such file or directory
    在lv_drivers\display\display.mk中添加SDL2的头文件路径
    1
    CFLAGS += "-I/e/program/msys64/mingw64/include"

2.‘_beginthreadex’ undeclared
这是由于用了SDL的thread,在windows下需要依赖,目前没有找到直接处理方法,可以通过修改main.c绕过:
屏蔽掉hal_init中的

1
//SDL_CreateThread(tick_thread, "tick", NULL);

在main()的while中添加lv_tick_inc(5);

1
2
3
4
5
6
7
 while (1) {
/* Periodically call the lv_task handler.
* It could be done in a timer interrupt or an OS task too.*/
lv_task_handler();
usleep(5 * 1000);
lv_tick_inc(5);
}

  1. 找不到 -lSDL2
    在Makefile中添加SDL2 lib的路径
    1
    LDFLAGS ?=  -lm -L/e/program/msys64/mingw64/bin -lSDL2

运行

make完成后会生成一个demo.exe,在MSYS2下直接执行

1
./demo.exe

会遇到说找不到SDL2.dll的问题,将msys64/mingw64/bin下的SDL2.dll拷贝到demo.exe一个目录即可。运行起来结果如下
demo

这是lvgl 7.0的效果图,比6.1.2之前的版本要好看不少,这可能是因为lvgl开始由公司运营的缘故。lvgl 7.0相较于之前的6.x的版本在style上变化较大,只能通过手动写代码迁移。