百问网全志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等硬件加速功能,所以在切面切换的时候,会比集成的版本稍微要慢一点点,不过实际显示效果还是不错的。后面有时间,再考虑适配硬件加速功能。

相关推荐
risc12345627 分钟前
【Elasticsearch】search_after不支持随机到哪一页,只能用于上一页或下一页的场景
elasticsearch
我的golang之路果然有问题28 分钟前
快速了解GO+ElasticSearch
开发语言·经验分享·笔记·后端·elasticsearch·golang
Elastic 中国社区官方博客1 小时前
连接关键点:使用 ES|QL 联接实现更丰富的可观测性洞察
大数据·数据库·sql·elasticsearch·搜索引擎·全文检索
weixin_307779135 小时前
使用Redis作为缓存优化ElasticSearch读写性能
redis·分布式·elasticsearch·缓存·架构
Xiao Ling.5 小时前
Elasticsearch
elasticsearch
Elasticsearch6 小时前
Elastic:在本地电脑中部署阿里 Qwen3 大模型及连接到 Elasticsearch
elasticsearch
xrz27711 小时前
JAVA获取ES连接并查询所有数据
java·elasticsearch
赵成默11 小时前
es 的字段类型(text和keyword)
elasticsearch·es
要努力啊啊啊13 小时前
Elasticsearch + Milvus 构建高效知识库问答系统《一》
人工智能·深度学习·elasticsearch·语言模型·milvus
G皮T1 天前
【Elasticsearch】Elasticsearch 核心技术(一):索引
大数据·elasticsearch·kibana·es·索引·索引别名·索引模板