从上次模型部署到现在已经经过了一周的时间,这一周呢完成了显示demo的移植。使用开源的LVGL显示框架进行显示界面的开发。关于LVGL官方已经推出到了第8个版本,并且官方开发了相关的不同设备之间移植的驱动、显示例程example。见下链接:
LVGL: https://github.com/lvgl/lvgl
LVGL_DEMO: https://github.com/lvgl/lv_demos
LVGL_Device: https://github.com/lvgl/lv_drivers
这三个包缺一不可!!!具体的移植呢也是参考韦东山老师的教程:http://lvgl.100ask.net/7.11/documentation/01_intro/intro.html
该教程是基于LCGL7.11,所以LVGL8还需要参考官方文档,鉴于目前是处于便开发边学习阶段,遇到问题需要从网上寻找解决方案,所以选择已经有相关介绍的7.11版本。关于移植,直接参考文档即可,说一些需要注意的:哪吒屏幕分辨率为 800*1280 。默认的SDK中哪吒的触摸屏幕的Y方向是相反的。需要在dts(目录:/d1-tina-open/lichee/linux-5.4
)中更改两处:
compatible = "allwinner,goodix";
device_type = "ctp";
reg = <0x14>;
- status = "disabled";
+ status = "okay";
2、更改触摸方向
- ctp_revert_y_flag = <0x0>;
+ ctp_revert_y_flag = <0x1>;
ctp_exchange_x_y_flag = <0x0>;
ctp_int_port = <&pio PG 14 GPIO_ACTIVE_HIGH>;
ctp_wakeup = <&pio PG 15 GPIO_ACTIVE_HIGH>;
更改了上述文件此时屏幕就可以在哪吒上正常驱动了!

然后就是LVGL的官方移植了。需要注意更改编译之前的相关设置。。。细节就不过多站看,有问题可以评论一起交流哈。

当能够编译出来LVGL项目,之前ncnn项目是由cmake构建的。所以此时LVGL也需要使用Cmake来进行构建,那么两个demo才能整合到一起。来进行编译。
使用cmake构建项目由于个人比较生疏,所以学了许久。
解决了很多关于对插件的依赖和寻找,包含,编译相关的问题。 最开始使用 sunxi的fd驱动可以使用硬件刷新,屏幕的显示效果比较好。但是由于使用cmake 的过程中,无论如何也在链接的过程中找不到 libuapi.so
这个动态库文件,使用了手动链接,动态查找等 方法都不可以,直接使用-L 也不可以。编译不出来不能使用动态库(目前仍没有解决!!
)
因为不能使用这个,所以就只能使用官方的fddev,使用软件的刷新效率没有使用sunxi的块,但是仍然希望能够解决这个问题(*)
—————————————————————————————————————————
尝试过程:
1、包含头文件,添加动态库:
include_directories(/home/gaojies/workspace/d1-tina-open/out/d1-nezha/compile_dir/target/libuapi/ipkg-install/usr/include)
FIND_LIBRARY(RUNTIME_LIB uapi /home/gaojies/workspace/d1-tina-open/out/d1-nezha/compile_dir/target/libuapi/ipkg-install/usr/lib NO_DEFAULT_PATH)
2、 直接添加
link_libraries("/home/gaojies/workspace/d1-tina-open/out/d1-nezha//compile_dir/target/libuapi/src/libuapi.so")
link_directories("/home/gaojies/workspace/d1-tina-open/out/d1-nezha//compile_dir/target/libuapi/src/")
————————————————————————————————————————
CMake构建过程注意:
- 相关的库文件需要依赖,直接模仿ncnn中写一个编译链rootfs的配置文件,在Cmake 中进行依赖。
- 头文件的包含过程。使用递归调用函数,将文件夹下所能发现的所有头文件全部包含进来,确保不会出现函数未定义错误。(函数见下:)
- 在添加源文件的时候要明白源文件的添加方法及规则。可以多次添加,但添加顺序要注意且不能嵌套!!!!
# 最开始将 源文件都添加到LVGL_SOURCES 中,发现LVGL_SOURCES 会被覆盖不会编译新添加的文件,所以就只能添加了一个变量来添加进来。
file(GLOB_RECURSE LVGL_SOURCES lvgl/src/*.c)
file(GLOB_RECURSE LVGL_EXP_SOURCES2 lvgl/examples/*.c)
file(GLOB LV_DRV_SOURCES
lv_drivers/*.c
lv_drivers/indev/*.c
lv_drivers/gtkdrv/*.c
lv_drivers/display/*.c
)
# 但是后面的同一个变量又可以添加多次,且都能添加链接进来,这块不知道为什么(懂得dalao可以评论回复一下)
file(GLOB_RECURSE LV_EXP_SOURCES lvgl/examples/*c)
# file(GLOB_RECURSE LV_EXP_SOURCES lvgl/example/*c)
file(GLOB_RECURSE LV_EXP_SOURCES lv_demos/src/*.c)
确认自己的文件夹及文件全部添加完毕,就可以使用如下指令来进行编译了
export RISCV_ROOT_PATH=/home/nihui/osd/riscv64-linux-x86_64-20210512
cmake -DCMAKE_TOOLCHAIN_FILE=../toolchains/c906.toolchain.cmake ..
如果添加没问题,那编译应该也没问题

如果能成功编译出来,那就可以放板子运行了,贴个图......

不足:
使用riscv最新的编译链和Tina 中的编译链编译demo会产生明显的 效率下降,专门开了一个帖子来讨论:https://bbs.aw-ol.com/topic/261/关于哪吒不同版本编译链的问题
下一步:
LVGL(此插件中进行开发和使用了)
准备先使用小插件构建一个 app 列在显示器上,可以通过打开app来进行打开软件.
Cmake构建综合程序,LVGL的综合程序也没有使用Cmake 来进行构建