本文说明在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
5pacman -S git
pacman -S make
pacman -S gcc
pacman -S gdb
pacman -S mingw-w64-x86_64-SDL2
问题处理
一定要用pacman -Syu更新源
不能只用”pacman -Sy”, 否则安装SDL2的时候一些包会出现下面问题1
Child process exited with status 127
下载包出问题
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 | cd |
编译问题处理
- 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);
}
- 找不到 -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一个目录即可。运行起来结果如下
这是lvgl 7.0的效果图,比6.1.2之前的版本要好看不少,这可能是因为lvgl开始由公司运营的缘故。lvgl 7.0相较于之前的6.x的版本在style上变化较大,只能通过手动写代码迁移。