ubuntu linux搭建lvgl

简介: ubuntu linux搭建lvgl

记录一下ubuntu linux搭建 lvgl的过程

本地环境:ubuntu 16.04
ubuntu + lvgl + sdl2

1 获取源码
git clone https://github.com/lvgl/lv_port_linux.git
cd lv_port_linux/
git submodule update --init --recursive
1
2
3
查看分支:
git branch -a

我选择的是9.2(master分支一直在变动,可能不安全,我们需要一个稳定的版本)
git checkout remotes/origin/release/v9.2 -b v92
git branch -a

为了保险起见,切完分支后,更新下子模块.
git submodule update --init --recursive

2 改 lv_conf.h
lv_conf.h文件就在根目录下.
修改下面三个宏,需要将LV_USE_LINUX_FBDEV => 0 SDL=>1

define LV_USE_LINUX_FBDEV 0

define LV_USE_LINUX_DRM 0

define LV_USE_SDL 1

1
2
3

953: LV_SDL_BUF_COUNT 2

3 编译
mkdir build
cd build
cmake ..
make -j
1
2
3
4
问题1 :cmake版本过低,没有办法,自己去升级一下.
cmake版本升级方法
继续:

问题2 :cmake 报错 缺少sdl模块,安装一下:
sudo apt-get update && sudo apt-get install -y build-essential libsdl2-dev

最后还有问题:
FindSDL2_image 模块找不到
CMake Error at CMakeLists.txt:13 (add_executable): Target "main" links to item "-L/usr/lib/x86_64-linux-gnu -lSDL2 " which has leading or trailing whitespace. This is now an error according to policy CMP0004.
安装一下吧:
sudo apt-get install libsdl2-image-dev
但是安装之后还是报错.
原因 : 因为sdl2安装包里面有cmake,但是sdl2_iamge木有cmake,就导致SDL2_image找不到.
解决:修改CMakeLists.txt(根目录下的).
将find_package(SDL2_image)替换为下面两行

find_library(NAME SDL2_image REQUIRED)
link_libraries(SDL2_image)
1
2
没完了 : 还有错误:

CMake Error at CMakeLists.txt:13 (add_executable): Target "main" links to item "-L/usr/lib/x86_64-linux-gnu -lSDL2 " which has leading or trailing whitespace. This is now an error according to policy CMP0004.

这是因为"-L/usr/lib/x86_64-linux-gnu -lSDL2 ",-lSDL2后面多了一个空格.
解决:修改CMakeLists.txt
在target_link_libraries之前,set(SDL2_LIBRARIES “-L${SDL2_LIBDIR} -lSDL2”)

set(SDL2_LIBRARIES "-L${SDL2_LIBDIR} -lSDL2")

target_link_libraries(main lvgl lvgl::examples lvgl::demos lvgl::thorvg ${SDL2_LIBRARIES} ${SDL2_IMAGE_LIBRARIES} ${Libdrm_LIBRARIES} m pthread)
1
2
3
继续编译:
make -j
又有问题:
lv_sdl_window.c:413:5: error: unknown type name ‘SDL_PixelFormatEnum’
修改文件lv_sdl_window.c:413左右.
我们不选了,直接用SDL_PIXELFORMAT_RGB888

/*

if LV_COLOR_DEPTH == 32

SDL_PixelFormatEnum px_format =
    SDL_PIXELFORMAT_RGB888; //same as SDL_PIXELFORMAT_RGB888, but it's not supported in older versions

elif LV_COLOR_DEPTH == 24

SDL_PixelFormatEnum px_format = SDL_PIXELFORMAT_BGR24;

elif LV_COLOR_DEPTH == 16

SDL_PixelFormatEnum px_format = SDL_PIXELFORMAT_RGB565;

else

error("Unsupported color format")

endif

//    px_format = SDL_PIXELFORMAT_BGR24;

*/
dsc->texture = SDL_CreateTexture(dsc->renderer, SDL_PIXELFORMAT_RGB888,
SDL_TEXTUREACCESS_STATIC, disp->hor_res, disp->ver_res);
SDL_SetTextureBlendMode(dsc->texture, SDL_BLENDMODE_BLEND);
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
继续 make -j
又来问题:
lv_sdl_window.c:(.text+0x272):对‘SDL_SetWindowResizable’未定义的引用
通过查代码发现,lv_sdl_window_set_resizeable木有人调用,所以直接将这一行注释掉.

void lv_sdl_window_set_resizeable(lv_display_t disp, bool value)
{
lv_sdl_window_t
dsc = lv_display_get_driver_data(disp);
//SDL_SetWindowResizable(dsc->window, value);
}
1
2
3
4
5
继续 make -j
我这里就成功了哈.
运行main

cd ../bin
./main

4 修改main.c
注释原来的demo,现在测试lv_demo_music.
其他例子:lv_demo_xxx也行.

//lv_demo_widgets();
//lv_demo_widgets_start_slideshow();

int main(void)
{
lv_init();

/*Linux display device init*/
lv_linux_disp_init();

/*Create a Demo*/
//lv_demo_widgets();
//lv_demo_widgets_start_slideshow();
lv_demo_music();//测试music
/*Handle LVGL tasks*/
while(1) {
    lv_timer_handler();
    usleep(5000);
}

return 0;

}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

问题:
鼠标点击没反应.
解决:
在lv_port_linux\lvgl\src\drivers\sdl\lv_sdl_window.c
lv_sdl_window_create() 135行:添加lv_sdl_mouse_create();

ok:

相关文章
|
7月前
|
Ubuntu Linux UED
Ubuntu和Debian系统与Hat Linux系列的使用比较
所以,如果你想搞一个家用服务器,或者是个人使用,喜欢新鲜事物,那Ubuntu可能是你的最好选择。如果你需要一个在商业环境中经受住考验的系统,那Fedora或CentOS可能更符合你的口味。不过记住,CentOS现在是CentOS Stream,中途换马了,所以如果你是稳定性的极端追求者,可能得考虑一下这一变化。而Debian,则适合那些对稳定性需求极高,不太追求软件版本新旧的用户。
250 26
|
7月前
|
Ubuntu 搜索推荐 Linux
Ubuntu/Debian Hat系Linux的便捷操作指南
总的来说,虽然Ubuntu/Debian和Red Hat系列在操作方法上有所不同,但基本概念类似。掌握了包管理和服务管理,可以应对大多数常见的系统管理任务。同时,这两个系统都有丰富的在线资源可以查询,不管你在任务中遇到什么困难,搜索引擎都能帮你找到答案。这些基本技能能让你在Linux的世界里更加自如。
240 26
|
8月前
|
Ubuntu 搜索推荐 Linux
详解Ubuntu的strings与grep命令:Linux开发的实用工具。
这就是Ubuntu中的strings和grep命令,透明且强大。我希望你喜欢这个神奇的世界,并能在你的Linux开发旅程上,通过它们找到你的方向。记住,你的电脑是你的舞台,在上面你可以做任何你想做的事,只要你敢于尝试。
435 32
|
9月前
|
Ubuntu Linux 编译器
在Ubuntu Linux系统下如何搭建并安装EDK2
以上就是在Ubuntu Linux系统下搭建并安装EDK2的过程。这个过程可能会有些复杂,但只要按照步骤一步步来,应该不会有太大问题。如果在过程中遇到任何问题,都可以在网上找到相应的解决方案。希望这个指南能对你有所帮助!
432 17
|
11月前
|
Ubuntu Linux
Ubuntu Linux
背景 Ubuntu起源于南非,其名称“Ubuntu”来源于非洲南部祖鲁语或豪萨语,意为“人性”、“我的存在是因为大家的存在”,这体现了非洲传统的一种价值观。Ubuntu由南非计算机科学家马克·沙特尔沃斯(Mark Shuttleworth)创办,他创立了Canonical公司来推动Ubuntu的发展。Ubuntu的第一个版本于2004年发布,至今已经走过了近20个年头,成为了Linux发行版中的佼佼者。
403 4
Ubuntu Linux
|
Ubuntu Linux 开发者
Ubuntu20.04搭建嵌入式linux网络加载内核、设备树和根文件系统
使用上述U-Boot命令配置并启动嵌入式设备。如果配置正确,设备将通过TFTP加载内核和设备树,并通过NFS挂载根文件系统。
671 15
|
存储 缓存 Ubuntu
Ubuntu Linux目录结构
理解Ubuntu Linux的目录结构对系统管理、维护和故障排除至关重要。每个目录都有其特定的用途和存放内容,通过了解这些目录,可以更高效地管理系统文件,确保系统的稳定运行。希望本文对你深入理解Ubuntu的目录结构有所帮助。
604 1
|
并行计算 Ubuntu Linux
Ubuntu学习笔记(三):Linux下操作指令大全
Ubuntu学习笔记,介绍了Linux操作系统中常用的命令和操作,如文件管理、系统信息查看、软件安装等。
266 3
|
机器学习/深度学习 Ubuntu Linux
【机器学习 Azure Machine Learning】使用Aure虚拟机搭建Jupyter notebook环境,为Machine Learning做准备(Ubuntu 18.04,Linux)
【机器学习 Azure Machine Learning】使用Aure虚拟机搭建Jupyter notebook环境,为Machine Learning做准备(Ubuntu 18.04,Linux)
204 4
|
Ubuntu IDE 开发工具
如何在Ubuntu中查看编辑lvgl的demo和examples?
查看和编辑LVGL的demo和examples在Ubuntu系统中是一个相对直接的过程。为了进行这些操作,您需要安装基本的软件开发工具和依赖项,获取源代码,并使用命令行或IDE来编辑代码。编译和运行demo,您就可以观察和进一步开发这些实例了。记得经常查看LVGL的官方文档和指南,以获取有关特定函数和模块用法的最新信息。
346 4