百问网全志D1h开发板LVGL9移植详细教程

lv_port_linux_frame_buffer源码准备

在Linux,LVGL v9可以使用标准的framebuffer,因此,只需要使用lv_port_linux_frame_buffer即可。

首先,下载 lv_port_linux_frame_buffer 的源码:

bash 复制代码
git clone [email protected]:lvgl/lv_port_linux_frame_buffer.git
cd lv_port_linux_frame_buffer
git checkout release/v9.0
git submodule update --init --recursive

在上面的命令中,切换到了v9.0版本,更为稳定。

因为 lv_port_linux_frame_buffer 设置了各分支版本绑定的 lvgl版本,所以直接使用 git submodule 即可下载。

移植文件准备

上一步已经下载了所有需要的源码,我们只需要把实际需要使用的源码提取出来即可,按照如下命令操作:

bash 复制代码
mkdir lvgl_v9_demo
cd lvgl_v9_demo
mkdir lvgl
cp ../lv_port_linux_frame_buffer/{CMakeLists.txt,Makefile,main.c,lv_conf.h,mouse_cursor_icon.c} ./
cp -r ../lv_port_linux_frame_buffer/lvgl/* lvgl/

最终文件和目录如下:

![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传](https://img-blog.csdnimg.cn/img_convert/f6b28612705d26eefbe23f753bf253f0.jpeg) 这是一个cmake工程,后续我们想要开发自己的项目,可以把这个目录复制一份即可。 然后,打开 `main.c`,修改如下: ```cpp #include "lvgl/lvgl.h" #include "lvgl/demos/lv_demos.h" #include #include #include #include int main(void) { lv_init(); /* 添加下面一行,显示lvgl 版本 */ printf("LVGL v%d.%d.%d\n", lv_version_major(), lv_version_minor(), lv_version_patch()); /*Linux frame buffer device init*/ lv_display_t * disp = lv_linux_fbdev_create(); lv_linux_fbdev_set_file(disp, "/dev/fb0"); /* 如添加如下两行,对应前面屏幕适配后的设备节点 /dev/input/event2 */ lv_indev_t * touch; touch = lv_evdev_create(LV_INDEV_TYPE_POINTER,"/dev/input/event2"); /*Create a Demo*/ lv_demo_widgets(); /* 注释下面这一行,取消自动演示功能 */ // lv_demo_widgets_start_slideshow(); /*Handle LVGL tasks*/ while(1) { lv_timer_handler(); usleep(5000); } return 0; } ``` \[![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传](https://img-blog.csdnimg.cn/img_convert/1fa79520e5128bbb21a62189ba59656a.jpeg) 再修改 `lv_conf.h`,启用evdev,以便使用触摸功能 ```cpp /*Driver for evdev input devices*/ #define LV_USE_EVDEV 1 ``` \[![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传](https://img-blog.csdnimg.cn/img_convert/4337486f2387a8bb88d605db598b5908.jpeg) 经过上面的处理,移植代码就准备好了。 ### 编译LVGL v9 在编译之前,需要先安装最新版本的cmake和automake-1.16版本,具体步骤如下: ```bash # 安装cmake wget https://github.com/Kitware/CMake/releases/download/v3.29.2/cmake-3.29.2-linux-x86_64.sh chmod u+x cmake-3.29.2-linux-x86_64.sh ./cmake-3.29.2-linux-x86_64.sh --prefix=/usr/local # 按照提示,第一次输入Y,第二次输入N # 安装 automake-1.16 wget https://ftp.gnu.org/gnu/automake/automake-1.16.tar.gz tar xzvf automake-1.16.tar.gz cd automake-1.16 ./configure --prefix=/usr/local make && make install # 优先使用安装的版本,位于/usr/loca/bin目录中 export PATH=/usr/loca/bin:$PATH ``` 然后,即可进行实际的编译工作: ```bash cd lvgl_v9_demo mkdir build cd build export TOOLCHAIN_ROOT=~/tina-d1-h/prebuilt/gcc/linux-x86/riscv/toolchain-thead-glibc/riscv64-glibc-gcc-thead_20200702 export PATH=$TOOLCHAIN_ROOT/bin:$PATH cmake -DCMAKE_C_COMPILER=$TOOLCHAIN_ROOT/bin/riscv64-unknown-linux-gnu-gcc\ -DCMAKE_CXX_COMPILER=$TOOLCHAIN_ROOT/bin/riscv64-unknown-linux-gnu-g++\ -DCMAKE_SYSTEM_NAME=Linux \ -DCMAKE_SYSTEM_PROCESSOR=arm \ .. make # 可以根据cpu核数,使用 -jN 参数来加速 ``` 注意,我的 tina-d1-h 源码位于 \~/tina-d1-h。如果你的 tina-d1-h 源码在其他位置,记得修改工具链 TOOLCHAIN_ROOT 配置。 编译完成后,结果如下: \[![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传](https://img-blog.csdnimg.cn/img_convert/8fdb487d61f4b0f679dcdb51e00f55bf.jpeg) 在 lvgl_v9_demo/bin 目录中,有编译后的执行文件: \[![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传](https://img-blog.csdnimg.cn/img_convert/cd36de9ec9fd6af7ee656913bbc8ba9b.jpeg) ### 测试 使用 adb 或者网络,将main上传到开发板的Tina系统中: ```bash adb push bin/main /root/lvgl_v9_demo ``` 然后,在开发板上执行: ```bash cd /root chmod u+x lvgl_v9_demo ./lvgl_v9_demo ``` 执行后,输出如下: \[![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传](https://img-blog.csdnimg.cn/img_convert/ca435be692c8603a086da8fbeb2bab23.jpeg) 屏幕显示效果如下: \[![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传](https://img-blog.csdnimg.cn/img_convert/a0f3899554e41f387640cc9ea037b6a7.jpeg) ### 补充 因为是直接移植的,使用framebuffer,还没有使用到sunxifb、g2d等硬件加速功能,所以在切面切换的时候,会比集成的版本稍微要慢一点点,不过实际显示效果还是不错的。后面有时间,再考虑适配硬件加速功能。

相关推荐
herogus丶1 小时前
【LLM】Elasticsearch作为向量库入门指南
elasticsearch·docker·langchain
Elastic 中国社区官方博客5 小时前
Elasticsearch:使用 Azure AI 文档智能解析 PDF 文本和表格数据
大数据·人工智能·elasticsearch·搜索引擎·pdf·全文检索·azure
光仔December9 小时前
【Elasticsearch入门到落地】10、初始化RestClient
elasticsearch·搜索引擎·全文检索·ik分词器·restclient
Code额13 小时前
Elasticsearch 的搜索功能
elasticsearch·微服务
lilye6614 小时前
程序化广告行业(44/89):岗位职责与RTB竞价逻辑深度解析
大数据·elasticsearch·flask·memcache
致良知云14 小时前
elasticsearch-7.17.16阿里云部署
elasticsearch·阿里云·jenkins
CodingCos1 天前
【RISC-V CPU Debug 专栏 1 -- RISCV 相关文档的区别与联系】
risc-v
被放养的研究生1 天前
Git和GitCode使用(从Git安装到上传项目一条龙)
git·elasticsearch·gitcode
java技术小馆1 天前
ES的文档更新机制
大数据·elasticsearch·搜索引擎
Elastic 中国社区官方博客1 天前
如何自动化同义词并使用我们的 Synonyms API 进行上传
大数据·运维·数据库·人工智能·elasticsearch·搜索引擎·自动化