首页 > 系统相关 >ubuntu linux搭建lvgl v9

ubuntu linux搭建lvgl v9

时间:2024-09-05 11:16:31浏览次数:13  
标签:SDL2 lv sdl linux SDL v9 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

查看分支:
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

在这里插入图片描述
953: LV_SDL_BUF_COUNT 2
在这里插入图片描述

3 编译

mkdir build
cd build 
cmake ..
make -j

问题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)

没完了 : 还有错误:

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)

继续编译:
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);
}

继续 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);
}

继续 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;
}

在这里插入图片描述
问题 :
鼠标点击没反应.
解决:
在lv_port_linux\lvgl\src\drivers\sdl\lv_sdl_window.c
lv_sdl_window_create() 135行:添加lv_sdl_mouse_create();
在这里插入图片描述
ok:
请添加图片描述

标签:SDL2,lv,sdl,linux,SDL,v9,lvgl
From: https://www.cnblogs.com/jlh-/p/18397990

相关文章

  • Linux:md5sum指令
    学习自:Linuxshell编程学习笔记42:md5sum_PurpleEndurer@5lcto的技术博客_51CTO博客MD5SUM详解_md5sum命令详解-CSDN博客0、常用#校验文件md5sum1.txtf447b20a7fcbf53a5d5be013ea0b15af1.txt#校验标准输入echo"123456"|md5sumf447b20a7fcbf53a5d5be013ea0b15af-......
  • VMware Workstation 17.6 Pro Unlocker & OEM BIOS 2.7 for Windows & Linux
    VMwareWorkstation17.6ProUnlocker&OEMBIOS2.7forWindows&Linux在Windows和Linux上运行macOSSequoia请访问原文链接:https://sysin.cn/blog/vmware-workstation-17-unlocker/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.org2024-09-03,版本13.6更......
  • Linux——网络(5)
    一、sqlite3性能测试1.程序效率测试   时间相关接口:   intgettimeofday(structtimeval*tv,structtimezone*tz);   功能:得到从1970年1月1日0时0分0秒到现在的秒数           精度到微妙   参数:             tv:获取......
  • 【Linux】理解Linux中的软链接与硬链接
    文章目录理解Linux中的软链接与硬链接1.什么是硬链接?示例:2.什么是软链接?示例:3.软链接与硬链接的对比4.何时使用软链接与硬链接?理解Linux中的软链接与硬链接在Linux文件系统中,软链接(SymbolicLink)和硬链接(HardLink)是两个非常重要的概念,它们允许多个文件名指......
  • 【Linux】深入理解Linux文件系统中的inode
    文章目录深入理解Linux文件系统中的inode1.什么是inode?2.inode的结构示例:3.inode的工作原理4.inode与文件系统的关系5.inode的实际应用6.总结深入理解Linux文件系统中的inode在Linux文件系统中,inode是一个核心概念,它在文件的管理和操作中起着至关重要的作......
  • Linux内核如何通过内存回收和压缩机制来管理物理内存
    大家好,今天给大家介绍Linux内核如何通过内存回收和压缩机制来管理物理内存,文章末尾附有分享大家一个资料包,差不多150多G。里面学习内容、面经、项目都比较新也比较全!可进群免费领取。Linux内核通过一系列复杂的内存回收和压缩机制来有效管理物理内存,确保系统能够在不同负载......
  • 嵌入式linux就业前景怎么样?
    嵌入式Linux的就业前景在当前科技快速发展的背景下显得尤为广阔和乐观。以下是对嵌入式Linux就业前景的详细分析:一、行业背景与需求增长技术普及与应用广泛:嵌入式Linux作为一种操作系统,广泛应用于各种嵌入式设备中,如智能手机、智能家居、工业自动化等领域。随着物联网技术的......
  • Linux
    1.inode简介    inode是Linux文件系统的基础。硬盘的最小存储单位是扇区(Sector),块(block)由多个扇区组成。文件数据存储在块中。块的最常见的大小是4kb,约为8个连续的扇区组成(每个扇区存储512字节)。一个文件可能会占用多个block,但是一个块只能存放一个文件。虽......
  • rocky linux 9部署zabbix6
    安装rocky9阿里巴巴开源镜像站http://mirrors.aliyun.com1、Rocky2、初始化防火墙        systemctlstopfirewalld        systemctldisablefilewalld        或者        systemctldisablefirewalld--now3、selinuxvi/etc......
  • Linux常用命令
    cdcd~:进入到当前用户的主目录cd-:切换到上一次所在的目录cd..:切换到上一级cd../..:切换到上两级**cd/**:切换到根目录lsls:列出目录下文件ls-a:列出所有文件,包括隐藏文件ls-A:列出所有文件,包括隐藏文件,除了.和..ls-l:列出文件的详细信息-t......