交叉编译, LVGL 进度条小工具。

编译环境:
Linux ubuntu 4.15.0-122-generic #124~16.04.1-Ubuntu SMP Thu Oct 15 16:08:36 UTC 2020 x86_64 x86_64 GNU/Linux
目标板:
Linux linaro-alip 4.19.232 #113 SMP Sat Apr 20 19:13:09 CST 2024 aarch64 GNU/Linux

编译环境

整体的方案是 LVGL8.3 + SDL2 + FreeType。

背景及资料

需求

开发一小的进度条工具, 运行在”智慧能源单元”上。
进度条工具, 通过文件通信方式, 通信方式
文件名: /tmp/lvgl_comm
通信格式: {state},{progress},{text}

state: 进度条工具状态, 0 隐藏; 1 显示
progress: 进度, 0-100
text: 提示文案

提供资料

libSDL2-2.0.so.0.10.0
applesimhei.otf
libfreetype.so.6.16.1
libm-2.31.so

编译器:
gcc-7.3.1-64-gnu/bin/aarch64-linux-gnu-gcc

编译流程

下载 LVGL 8.3

1
git clone -b v8.3.9 https://github.com/lvgl/lvgl.git

下载 LVGL_Drivers

1
git clone -b v8.3.0 https://github.com/lvgl/lv_drivers.git

安装 sdl2库

1
apt update && apt install libsdl2-dev

交叉编译

目标板子的头文件, 动态库

目标板子
Linux linaro-alip 4.19.232 #113 SMP Sat Apr 20 19:13:09 CST 2024 aarch64 GNU/Linux

编译器
aarch64-linux-gnu-gcc

拷贝目标板子依赖的头文件和动态库
/usr/include/aarch64-linux-gnu-gcc
/lib/aarch64-linux-gnu-gcc

本地交叉编译环境

配置定义

lvgl配置文件定义

1
2
3
4
// lv_conf.h
#define LV_USE_FREETYPE 1 // 启用 FreeType
#define LV_USE_PERF_MONITOR 0 // 关闭CPU使用率和FPS统计
#define LV_USE_MEM_MONITOR 0 // 关闭内存使用率统计

lv_drv_conf.h lvgl驱动配置定义

1
2
3
4
// lv_drv_conf.h
#define USE_SDL 1 // 启用 SDL
#define SDL_HOR_RES 800 // 设置SDL窗口宽度
#define SDL_VER_RES 180 // 设置SDL窗口高度

修改 CMakeLists.txt

编译Ubuntu调试版本

1
2
3
cd build
cmake ..
make

编译开发板版本

1
2
cmake -D CMAKE_BUILD_TYPE=Debug ..
make

改了很多东西。
新增一个界面。

遇到的问题

libSDL2-2.0.so.0.10.0 缺少依赖动态库

依赖的动态库缺少依赖的动态库

glibc版本冲突

源码编译glibc-2.29后链接执行段错误

交叉编译后, GLIBC2.29 找不到对应版本

窗口置顶API不支持(不好处理)

执行结果

Linux动态库选择顺序

编译时

  1. gcc 编译时参数 -L 指定的路径
  2. 环境变量 LIBRARY_PATH
  3. 系统默认库路径 /lib /usr/lib

运行时

  1. gcc 编译时参数指定 -WI,-rpath
  2. 环境变量 LD_LIBRARY_PATH
  3. 系统默认库路径 /lib /usr/lib