泰山派 一、Android系统 MIPI屏幕
物料
参数
链接
触摸屏幕
40pin 、MIPI
屏幕链接
修改设备树 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 &i2c1 { status = "okay" ; ft5316@38 { pinctrl-0 = <&touch_gpio>; compatible = "focaltech,fts" ; reg = <0x38 >; focaltech,max-touch-number = <2 >; focaltech,display-coords =<0 0 854 480 >; focaltech,irq-gpio = <&gpio1 RK_PA0 IRQ_TYPE_LEVEL_LOW>; focaltech,reset-gpio = <&gpio1 RK_PA1 GPIO_ACTIVE_HIGH>; }; }; &dsi1 { status = "okay" ; rockchip,lane-rate = <480 >; dsi1_panel: panel@0 { status = "okay" ; compatible = "simple-panel-dsi" ; reset-gpios = <&gpio3 RK_PC1 GPIO_ACTIVE_LOW>; pinctrl-names = "default" ; pinctrl-0 = <&dsi1_rst_gpio>; reg = <0 >; backlight = <&backlight>; reset-delay-ms = <200 >; enable-delay-ms = <100 >; prepare-delay-ms = <20 >; unprepare-delay-ms = <20 >; disable-delay-ms = <20 >; init-delay-ms = <120 >; dsi,flags = <(MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_BURST | MIPI_DSI_MODE_LPM | MIPI_DSI_MODE_EOT_PACKET)>; dsi,format = <MIPI_DSI_FMT_RGB888>; dsi,lanes = <2 >; panel-init-sequence = [ 05 78 01 01 05 78 01 11 39 0 A 06 FF 77 01 00 00 13 15 0 A 02 EF 08 39 0 A 06 FF 77 01 00 00 10 39 0 A 03 C0 E9 03 39 0 A 03 C1 10 0 C 39 0 A 03 C2 20 0 A 15 0 A 02 CC 10 39 0 A 11 B0 00 23 2 A 0 A 0 E 03 12 06 06 2 A 00 10 0F 2 D 34 1F 39 0 A 11 B1 00 24 2B 0F 12 07 15 0 A 0 A 2B 08 13 10 2 D 33 1F 39 0 A 06 FF 77 01 00 00 11 15 0 A 02 B0 4 D 15 0 A 02 B1 48 15 0 A 02 B2 84 15 0 A 02 B3 80 15 0 A 02 B5 45 15 0 A 02 B7 85 15 0 A 02 B8 33 15 0 A 02 C1 78 15 0 A 02 C2 78 15 0 A 02 D0 88 39 0 A 04 E0 00 00 02 39 0 A 0 C E1 06 A0 08 A0 05 A0 07 A0 00 44 44 39 0 A 0 D E2 30 30 44 44 6 E A0 00 00 6 E A0 00 00 39 0 A 05 E3 00 00 33 33 39 0 A 03 E4 44 44 39 0 A 11 E5 0 D 69 0 A A0 0F 6B 0 A A0 09 65 0 A A0 0B 67 0 A A0 39 0 A 05 E6 00 00 33 33 39 0 A 03 E7 44 44 39 0 A 11 E8 0 C 68 0 A A0 0 E 6 A 0 A A0 08 64 0 A A0 0 A 66 0 A A0 39 0 A 03 E9 36 00 39 0 A 08 EB 00 01 E4 E4 44 88 40 39 0 A 11 ED FF 45 67 FA 01 2B CF FF FF FC B2 10 AF 76 54 FF 39 0 A 07 EF 10 0 D 04 08 3F 1F 05 78 01 11 15 0 A 02 3 A 55 05 14 01 29 ]; panel-exit -sequence = [ 05 00 01 28 05 00 01 10 ]; disp_timings1: display-timings { native-mode = <&dsi1_timing0>; dsi1_timing0: timing0 { clock-frequency = <33000000 >; hactive = <480 >; vactive = <854 >; hfront-porch = <8 >; hsync-len = <2 >; hback-porch = <43 >; vfront-porch = <4 >; vsync-len = <10 >; vback-porch = <42 >; hsync-active = <0 >; vsync-active = <0 >; de-active = <0 >; pixelclk-active = <0 >; swap-rb = <0 >; swap-rg = <0 >; swap-gb = <0 >; }; }; ports { #address-cells = <1> ; #size-cells = <0> ; port@0 { reg = <0 >; panel_in_dsi1: endpoint { remote-endpoint = <&dsi1_out_panel>; }; }; }; }; ports { #address-cells = <1> ; #size-cells = <0> ; port@1 { reg = <1 >; dsi1_out_panel: endpoint { remote-endpoint = <&panel_in_dsi1>; }; }; }; };
编译kernel 1 2 3 4 5 6 7 8 9 10 11 12 13 14 # 进入kernel目录 cd kernel# 清除.o文件 make clean -j32# 清除.o、配置文件等,比clean指令猛 make distclean -j32# 设置配置项 make ARCH=arm64 tspi_defconfig rk356x_evb.config android-11.config && make ARCH=arm64 tspi-rk3566-user-v10.img -j32# 编译kernel make ARCH=arm64 BOOT_IMG=../rockdev/Image-rk3566_tspi/boot.img tspi-rk3566-user-v10.img -j32# 生成镜像 ./mkimage.sh# 生成update镜像 ./build.sh -u
编译Android 1 2 3 source build/envsetup.sh && lunch rk3566_tspi-userdebug# 重新编译android,注意千万不要使用make clean指令,否则将重新编译,时间非常长 make installclean -j32 && make -j32
二、Linux buildroot系统 2.1 移植MIPI屏幕 2.1.1 修改设备树 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 #include "tspi-rk3566-dsi-v10.dtsi" / { backlight: backlight { compatible = "pwm-backlight" ; pwms = <&pwm5 0 25000 0 >; brightness-levels = < 0 20 20 21 21 22 22 23 23 24 24 25 25 26 26 27 27 28 28 29 29 30 30 31 31 32 32 33 33 34 34 35 35 36 36 37 37 38 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 >; default -brightness-level = <50 >; }; }; &i2c1 { status = "okay" ; ft5316@38 { pinctrl-0 = <&touch_gpio>; compatible = "focaltech,fts" ; reg = <0x38 >; focaltech,max-touch-number = <2 >; focaltech,irq-gpio = <&gpio1 RK_PA0 IRQ_TYPE_LEVEL_LOW>; focaltech,reset-gpio = <&gpio1 RK_PA1 GPIO_ACTIVE_HIGH>; }; }; &pwm5 { status = "okay" ; }; &pinctrl { dsi1 { dsi1_rst_gpio: dsi1-rst-gpio { rockchip,pins = <3 RK_PC1 RK_FUNC_GPIO &pcfg_pull_none>; }; touch_gpio: touch-gpio { rockchip,pins = <1 RK_PA0 RK_FUNC_GPIO &pcfg_pull_up>; }; }; }; &dsi1 { status = "okay" ; }; &dsi1_in_vp0 { status = "okay" ; }; &dsi1_in_vp1 { status = "disabled" ; }; &video_phy1 { status = "okay" ; }; &route_dsi1 { status = "okay" ; connect = <&vp0_out_dsi1>; }; &dsi1 { status = "okay" ; rockchip,lane-rate = <480 >; dsi1_panel: panel@0 { status = "okay" ; compatible = "simple-panel-dsi" ; reset-gpios = <&gpio3 RK_PC1 GPIO_ACTIVE_LOW>; pinctrl-names = "default" ; pinctrl-0 = <&dsi1_rst_gpio>; reg = <0 >; backlight = <&backlight>; reset-delay-ms = <200 >; enable-delay-ms = <100 >; prepare-delay-ms = <20 >; unprepare-delay-ms = <20 >; disable-delay-ms = <20 >; init-delay-ms = <120 >; dsi,flags = <(MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_BURST | MIPI_DSI_MODE_LPM | MIPI_DSI_MODE_EOT_PACKET)>; dsi,format = <MIPI_DSI_FMT_RGB888>; dsi,lanes = <2 >; panel-init-sequence = [ 05 78 01 01 05 78 01 11 39 0 A 06 FF 77 01 00 00 13 15 0 A 02 EF 08 39 0 A 06 FF 77 01 00 00 10 39 0 A 03 C0 E9 03 39 0 A 03 C1 10 0 C 39 0 A 03 C2 20 0 A 15 0 A 02 CC 10 39 0 A 11 B0 00 23 2 A 0 A 0 E 03 12 06 06 2 A 00 10 0F 2 D 34 1F 39 0 A 11 B1 00 24 2B 0F 12 07 15 0 A 0 A 2B 08 13 10 2 D 33 1F 39 0 A 06 FF 77 01 00 00 11 15 0 A 02 B0 4 D 15 0 A 02 B1 48 15 0 A 02 B2 84 15 0 A 02 B3 80 15 0 A 02 B5 45 15 0 A 02 B7 85 15 0 A 02 B8 33 15 0 A 02 C1 78 15 0 A 02 C2 78 15 0 A 02 D0 88 39 0 A 04 E0 00 00 02 39 0 A 0 C E1 06 A0 08 A0 05 A0 07 A0 00 44 44 39 0 A 0 D E2 30 30 44 44 6 E A0 00 00 6 E A0 00 00 39 0 A 05 E3 00 00 33 33 39 0 A 03 E4 44 44 39 0 A 11 E5 0 D 69 0 A A0 0F 6B 0 A A0 09 65 0 A A0 0B 67 0 A A0 39 0 A 05 E6 00 00 33 33 39 0 A 03 E7 44 44 39 0 A 11 E8 0 C 68 0 A A0 0 E 6 A 0 A A0 08 64 0 A A0 0 A 66 0 A A0 39 0 A 03 E9 36 00 39 0 A 08 EB 00 01 E4 E4 44 88 40 39 0 A 11 ED FF 45 67 FA 01 2B CF FF FF FC B2 10 AF 76 54 FF 39 0 A 07 EF 10 0 D 04 08 3F 1F 05 78 01 11 15 0 A 02 3 A 55 05 14 01 29 ]; panel-exit -sequence = [ 05 00 01 28 05 00 01 10 ]; disp_timings1: display-timings { native-mode = <&dsi1_timing0>; dsi1_timing0: timing0 { clock-frequency = <33000000 >; hactive = <480 >; vactive = <854 >; hfront-porch = <8 >; hsync-len = <2 >; hback-porch = <43 >; vfront-porch = <4 >; vsync-len = <10 >; vback-porch = <42 >; hsync-active = <0 >; vsync-active = <0 >; de-active = <0 >; pixelclk-active = <0 >; swap-rb = <0 >; swap-rg = <0 >; swap-gb = <0 >; }; }; ports { #address-cells = <1> ; #size-cells = <0> ; port@0 { reg = <0 >; panel_in_dsi1: endpoint { remote-endpoint = <&dsi1_out_panel>; }; }; }; }; ports { #address-cells = <1> ; #size-cells = <0> ; port@1 { reg = <1 >; dsi1_out_panel: endpoint { remote-endpoint = <&panel_in_dsi1>; }; }; }; };
2.1.2 修改focaltech触摸屏代码 1 2 3 4 5 6 7 8 9 10 11 12 13 #define FTS_X_MAX_DISPLAY_DEFAULT 480 #define FTS_Y_MAX_DISPLAY_DEFAULT 854 #if 1 input_report_abs(data->input_dev, ABS_MT_POSITION_X, 480 - events[i].x); input_report_abs(data->input_dev, ABS_MT_POSITION_Y, events[i].y);#else input_report_abs(data->input_dev, ABS_MT_POSITION_X, 480 -events[i].x); input_report_abs(data->input_dev, ABS_MT_POSITION_Y, events[i].y);
1 2 3 4 5 6 7 8 9 10 11 12 13 14 # 设置menuconfig make ARCH=arm64 menuconfig# 使能Focaltech_touchScreen Device_Drivers > Input_device_support > Touchscreens > Focaltech Touchscreen# 保存 make ARCH=arm64 savedefconfig# 覆盖 mv defconfig arch/arm64/configs/rockchip_linux_defconfig# 单独编译kernel ./build.sh kernel# 生成分散镜像 ./mkfirmware.sh# 生成独立镜像 ./build.sh updateimg
2.2 移植 LVGL 2.2.1 新建 tspi_lvgl 工程
克隆lvgl 库和lvgl_drivers 库,这两个库均选择8.3版本,按照如下说明进行修改
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 mkdir tspi_lvgl cd tspi_lvgl git clone -b v8.3.0 https://github.com/lvgl/lvgl.git git clone -b v8.3.0 https://github.com/lvgl/lv_drivers.git *****************************************lvgl修改***************************************************# 将lvgl的配置文件lv_conf_template.h移动到tspi_lvgl目录,并重命名为lv_conf.h # 1、将第15行附近: if 0 改为 if 1 # 2、使能第49行附近: # 3、使能一个示例demo: # 4、使能该demo需要的字体: ******************************************lv_drivers修改********************************************# 将lv_drivers的配置文件lv_drv_conf_template.h移动到tspi_lvgl目录,并重命名为lv_drv_conf.h # 1、将第11行附近: if 0 改为 if 1 # 2、使能第177行附近: # 3、在该行后面添加一行: # 4、修改184行附近的几行: # define LV_WAYLAND_CLIENT_SIDE_DECORATIONS 0 # define LV_WAYLAND_WL_SHELL 0 # define LV_WAYLAND_XDG_SHELL 1 # 5、进入lv_drivers/wayland目录,在该目录下打开一个终端黑窗口,执行下面程序 export CC=/usr/bin/aarch64-linux-gnu-gcc #指定自己的交叉编译工具链 cmake . # 生成Makefile文件 make -j32 # 编译,j后面的数字根据自己的线程数指定,也可以直接用make,速度会慢些
新建CMakeLists.txt 文件,内容如下。
1 2 3 4 5 6 7 8 9 10 11 cmake_minimum_required (VERSION 3.1 )project (tspi_lvgl)SET (CMAKE_SYSTEM_NAME Linux)SET (CMAKE_C_COMPILER /usr/bin/aarch64-linux-gnu-gcc) SET (GCC_WAYLAND_LINK_FLAGS "-lwayland-client -lwayland-cursor -lxkbcommon -lpthread -lffi" ) include_directories (.)add_subdirectory (lvgl)add_subdirectory (lv_drivers)add_executable (${PROJECT_NAME} main.c )target_link_libraries (${PROJECT_NAME} PRIVATE lvgl lvgl::examples lvgl::demos lvgl::drivers)target_link_libraries (${PROJECT_NAME} PRIVATE ${GCC_WAYLAND_LINK_FLAGS} )
将动态连接库复制到交叉编译工具链的lib目录下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 # 所需要的动态连接库,位置:<SDK>/buildroot/output/rockchip_rk3566/target/usr/lib64 libxkbcommon.so libxkbcommon.so.0 libxkbcommon.so.0.0.0 libwayland-client.so libwayland-client.so.0 libwayland-client.so.0.20.0 libwayland-cursor.so libwayland-cursor.so.0 libwayland-cursor.so.0.20.0 libffi.so libffi.so.6 libffi.so.6.0.4# 拷贝到ubuntu交叉编译工具链下面,我的交叉编译工具链库位置:/usr/aarch64-linux-gnu/lib sudo cp libxkbcommon.so libxkbcommon.so.0 ... libffi.so.6.0.4 /usr/aarch64-linux-gnu/lib# 将动态库拷贝到泰山派上面的 usr/lib 目录下面,泰山派上面有的就不用拷贝了 1、连接wifi 2、buildroot中开启openssh 3、用scp命令发送文件,或者用软件连接都可以
在tspi_lvgl目录下新建main.c文件,内容如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 #include "lvgl/lvgl.h" #include "lv_drivers/wayland/wayland.h" #include "lvgl/demos/lv_demos.h" #include <limits.h> #include <errno.h> #include <poll.h> #include <stdio.h> #include <unistd.h> #include <pthread.h> #define LV_HOR_RES_MAX (480) #define LV_VER_RES_MAX (854) #define DISP_BUF_SIZE (LV_HOR_RES_MAX * LV_VER_RES_MAX) static lv_disp_draw_buf_t draw_buf;static lv_color_t buf[DISP_BUF_SIZE];int main (int argc, char ** argv) { lv_init(); lv_wayland_init(); lv_disp_t *disp = lv_wayland_create_window(LV_HOR_RES_MAX, LV_VER_RES_MAX, "Window Title" , NULL ); lv_wayland_window_set_fullscreen(disp,true ); lv_demo_benchmark(); struct pollfd pfd ; uint32_t time_till_next; int sleep; pfd.fd = lv_wayland_get_fd(); pfd.events = POLLIN; while (1 ) { time_till_next = lv_wayland_timer_handler(); if (!lv_wayland_window_is_open(NULL )) { break ; } if (time_till_next == LV_NO_TIMER_READY) { sleep = -1 ; } else if (time_till_next > INT_MAX) { sleep = INT_MAX; } else { sleep = time_till_next; } lv_tick_inc(50 ); lv_timer_handler() ; while ((poll(&pfd, 1 , sleep) < 0 ) && (errno == EINTR)); } return 0 ; }
建好的tspi_lvgl工程结构如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 tspi_lvgl/ ├── build ├── CMakeLists.txt ├── lv_conf.h ├── lv_drivers ├── lv_drv_conf.h ├── lvgl └── main.c# 上面的build目录是新建立的,用来存放编译后生成的文件 # 编译项目 cd build cmake .. make -j32 # 将生成的tspi_lvgl可执行文件,复制到泰山派开发板上 scp tspi_lvgl root@192.168.1.69:/root 密码:rockchip# 泰山派执行程序 cd root ./tspi_lvgl
2.2.2 编写自己的UI界面
1、在tspi_lvgl目录下新建components目录 2、在components目录下新建CMakeList.txt文件 3、使用SquareLine_Studio生成界面,新建ui_code文件夹,将导出的代码放置在该目录下 4、拷贝ui_code到目录components目录下 5、修改tspi_lvgl目录下的CMakeList.txt文件 6、在main.c中添加头文件,和运行自己的ui即可
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 add_subdirectory (ui_code) tspi_lvgl/ ├── build ├── CMakeLists.txt ├── components ├── lv_conf.h ├── lv_drivers ├── lv_drv_conf.h ├── lvgl └── main.ccmake_minimum_required (VERSION 3.1 )project (tspi_lvgl)SET (CMAKE_SYSTEM_NAME Linux)SET (CMAKE_C_COMPILER /usr/bin/aarch64-linux-gnu-gcc)SET (GCC_WAYLAND_LINK_FLAGS "-lwayland-client -lwayland-cursor -lxkbcommon -lpthread -lffi" )include_directories (.)include_directories (./components/ui_code) add_subdirectory (lvgl)add_subdirectory (lv_drivers)add_subdirectory (components)add_executable (${PROJECT_NAME} main.c )target_link_libraries (${PROJECT_NAME} PRIVATE lvgl lvgl::examples lvgl::demos lvgl::drivers)target_link_libraries (${PROJECT_NAME} PRIVATE ${GCC_WAYLAND_LINK_FLAGS} )target_link_libraries (${PROJECT_NAME} PRIVATE ui) ui_init();
2.2.3 添加文件系统
修改lvgl配置文件lv_conf.h即可,修改内容如下
1 2 3 4 5 6 #define LV_USE_FS_STDIO 1 #if LV_USE_FS_STDIO #define LV_FS_STDIO_LETTER 'S' #define LV_FS_STDIO_PATH "" #define LV_FS_STDIO_CACHE_SIZE 1024 #endif
在main.c文件中使用下面函数测试,看能否读取到目录信息。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 void FileTest (void ) { lv_fs_dir_t dir; lv_fs_res_t res; res = lv_fs_dir_open(&dir, "S:/" ); char fn[256 ]; while (1 ) { res = lv_fs_dir_read(&dir, fn); if (strlen (fn) == 0 ) { break ; } printf ("%s\n" , fn); } lv_fs_dir_close(&dir); } root@RK356X:/root# ./tspi_lvgl /lib /lost+found /system data /bin .bash_history misc init /userdata linuxrc sdcard /proc /usr /var /opt /oem udisk lib64 /rockchip_test /run /sys /tmp /media /root Tspi_lvgl /etc busybox.fragment /sbin vendor /mnt /dev
2.2.4 移植 lottie 动画
1、下载rlottie仓库
1 git clone https://github.com/Samsung/rlottie.git
2、编译rlottie
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 # 进入rlottie根目录 cd rlottie mkdir build cd build# 指定编译器 export CC=/usr/bin/aarch64-linux-gnu-gcc # 根据自己的编译器位置修改 export CXX=/usr/bin/aarch64-linux-gnu-g++ # 根据自己的编译器位置修改# 编译项目 cmake .. make -j32# 将生成的动态库拷贝到ubuntu交叉编译工具链下 sudo cp librlottie.so librlottie.so.0 librlottie.so.0.2 /usr/aarch64-linux-gnu/lib/# 将生成的动态度拷贝到泰山派/usr/lib目录下 scp librlottie.so librlottie.so.0 librlottie.so.0.2 root@192.168.1.69:/usr/lib
3、修改tspi_lvgl目录下的CMakeList.txt文件,完整内容如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 cmake_minimum_required (VERSION 3.1 )project (tspi_lvgl)SET (CMAKE_SYSTEM_NAME Linux)SET (CMAKE_C_COMPILER /usr/bin/aarch64-linux-gnu-gcc)SET (GCC_WAYLAND_LINK_FLAGS "-lwayland-client -lwayland-cursor -lxkbcommon -lpthread -lffi -lrlottie" )include_directories (.)include_directories (./components/ui_code)include_directories (/home/wrt/Taishan/TaiShan_Ui/libraries/rlottie/rlottie/inc)add_subdirectory (lvgl)add_subdirectory (lv_drivers)add_subdirectory (components)add_executable (${PROJECT_NAME} main.c )target_link_libraries (${PROJECT_NAME} PRIVATE lvgl lvgl::examples lvgl::demos lvgl::drivers)target_link_libraries (${PROJECT_NAME} PRIVATE ${GCC_WAYLAND_LINK_FLAGS} )target_link_libraries (${PROJECT_NAME} PRIVATE ui)
4、修改lvgl的配置文件lv_conf.h,使能rlottie
1 #define LV_USE_RLOTTIE 1
5、修改main.c程序,测试lottie动画,在如下目录中放入一个lottie动画文件。
1 2 3 lv_obj_t *lottie = lv_rlottie_create_from_file(ui_Panel1, 300 , 300 , "/root/astronut.json" ); lv_obj_center(lottie);
6、运行程序时出现错误,stdc++库版本出现下面问题。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 # 进入ubuntu的/usr/aarch64-linux-gnu/lib目录下 strings libstdc++.so.6 | grep GLIBCXX #执行该命令,发现有上述所需的版本 GLIBCXX_3.4.29 GLIBCXX_3.4.30# 进入泰山派的/usr/lib目录下 strings libstdc++.so.6 | grep GLIBCXX #执行该命令,发现没有上述所需的版本 GLIBCXX_3.4.27 GLIBCXX_3.4.28# 拷贝过去 scp libstdc++.so.6 root@192.168.1.69:/usr/lib# 重启一下开发板 reboot# 执行程序 cd root ./tspi_lvgl# 下面的动画是会动的