万象奥科RK3506官方SDK内置LVGL移植 Gui Guider程序

张开发
2026/4/13 2:36:09 15 分钟阅读

分享文章

万象奥科RK3506官方SDK内置LVGL移植 Gui Guider程序
参考这篇文章https://blog.csdn.net/helizhen1993/article/details/157216781?fromshareblogdetailsharetypeblogdetailsharerId157216781sharereferPCsharesourceztsgggsharefromfrom_link核心板万象奥科 RK3506G2核心板参考配置文件为HD-RK3506-EVM首先要保证Gui Guider使用的LVGL版本与SDK中LVGL版本一致RK3506官方SDK中LVGL版本为8.4.0和9.1。本项目使用Gui Guider版本为1.9.1可以创建8.3.1和9.2的程序。创建完项目生成的代码格式如下一、将customgenerated两个文件夹放到SDK/app/lvgl_demo/my_demo/目录下复制lvgl_demo/lv_demo/文件夹内的CMakeLists.txt、main.c、main.h、Makefile四个文件最终如图二、修改文件1.修改my_demo/main.c如下/* * Copyright (c) 2021 Rockchip, Inc. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the License); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an AS IS BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */#includelvgl/lvgl.h#includelvgl/lv_conf.h#includemain.h#includegui_guider.h/*新增*/#includeevents_init.h/*新增*/staticintquit0;lv_ui guider_ui;/*新增*/#ifUSE_DEMO_WIDGETSexternvoidlv_demo_widgets(void);#elifUSE_DEMO_BENCHMARKexternvoidlv_demo_benchmark(void);#elifUSE_DEMO_MUSICexternvoidlv_demo_music(void);#endifstaticvoidsigterm_handler(intsig){fprintf(stderr,signal %d\n,sig);quit1;}intmain(intargc,char**argv){signal(SIGINT,sigterm_handler);lv_port_init(0,0,0);#ifUSE_DEMO_WIDGETSlv_demo_widgets();#elifUSE_DEMO_BENCHMARKlv_demo_benchmark();#elifUSE_DEMO_MUSIClv_demo_music();#endifsetup_ui(guider_ui);/*新增*/events_init(guider_ui);/*新增*/while(!quit){lv_task_handler();usleep(5000);lv_tick_inc(5);/*新增*/}return0;}特别要注意的是lv_tick_inc(5)函数由于内置LVGL8.4.0是通过patch生成的lv_conf.h文件一直没找到如何修改无法定义时基导致触摸失灵如果在lv_conf.h中开启则LV_TICK_CUSTOM不需要lv_tick_inc(5)函数。#defineLV_TICK_CUSTOM1#ifLV_TICK_CUSTOM#defineLV_TICK_CUSTOM_INCLUDEstdint.h/*Header for the system time function*/#defineLV_TICK_CUSTOM_SYS_TIME_EXPR(custom_tick_get())/*Expression evaluating to current system time in ms*/#endif/*LV_TICK_CUSTOM*/2.修改my_demo/CMakeLists.txt如下cmake_minimum_required(VERSION3.8)project(my_demo)#新增include_directories(${PROJECT_SOURCE_DIR}/./)include_directories(./generated/guider_customer_fonts/)#新增include_directories(./generated/)#新增include_directories(./custom/)#新增if(LVGL_DEMO_WIDGETS)add_definitions(-DUSE_DEMO_WIDGETS1)set(LINK_LVGL_DEMOS ON)elseif(LVGL_DEMO_BENCHMARK)add_definitions(-DUSE_DEMO_BENCHMARK1)set(LINK_LVGL_DEMOS ON)elseif(LVGL_DEMO_MUSIC)add_definitions(-DUSE_DEMO_MUSIC1)set(LINK_LVGL_DEMOS ON)endif()aux_source_directory(. SRCS)aux_source_directory(./custom SRCS)#新增aux_source_directory(./generated SRCS)#新增aux_source_directory(./generated/images SRCS)#新增aux_source_directory(./generated/guider_fonts SRCS)#新增add_executable(${PROJECT_NAME}${SRCS})install(TARGETS${PROJECT_NAME}RUNTIME DESTINATION bin)#install(PROGRAMS S10lv_demo DESTINATION /etc/init.d)#此处是把S10lv_Demo复制到/etc/init.d中使能自启动如果需要还得改一下里面的内容3.修改lvgl_demo/CMakeLists.txt如下如果在buildroot中启用rk_demo则会编译rk_demo,否则编译自己的my_demo这个与buildroot中的逻辑对应起来。if(LV_USE_RK_DEMO)add_subdirectory(rk_demo)# add_subdirectory(gallery)# add_subdirectory(amp_monitor)# add_subdirectory(flexbus)# add_subdirectory(motor_demo)else()add_subdirectory(my_demo)#add_subdirectory(lv_demo)endif()三、修改Buildroot配置万象奥科官方手册 SDK编译1.根据手册步骤进入到Buildroot配置界面。注意buildroot构建文件系统时最终是以buildroot/output/xxxx/.config配置文件为准。在Buildroot目录中第1次运行make menuconfig时会从默认的/buildroot/configs/rockchip_hd_rk3506g_evm_nand_defconfig【./build.sh lunch时选择的就是这块板子】生成.config文件如果buildroot修改后也会保存到.config文件内需要将修改后的.config文件替换rockchip_hd_rk3506g_evm_nand_defconfig文件这样修改才会生效。2.如果使用LVGL8.X要使用lv_drivers要选择RKADK另外LVGL configuration可以配置颜色深度内存大小复杂UI时内存大小尽量配置大一点【此处受package/lvgl/config.in影响限制了范围可以修改】3.修改app/lvgl_demo/lvgl8/evdev.h对输入设备进行设置开启use_evdev、修改分辨率#ifndefUSE_EVDEV#defineUSE_EVDEV1#endif#ifUSE_EVDEV||USE_BSD_EVDEV#undefEVDEV_NAME#defineEVDEV_NAME/dev/input/event0/*You can use the evtest Linux tool to get the list of devices and test them*/#defineEVDEV_SWAP_AXES0/*Swap the x and y axes of the touchscreen*/#defineDEFAULT_EVDEV_HOR_MIN0#defineDEFAULT_EVDEV_HOR_MAX480#defineDEFAULT_EVDEV_VER_MIN0#defineDEFAULT_EVDEV_VER_MAX800#endif/*USE_EVDEV*/4.修改app/lvgl_demo/lvgl8/evdev.c注释掉这段缩放代码/*if (evdev_calibrate) { raw_x map(raw_x, evdev_min_x, evdev_max_x, 0, hor_res); raw_y map(raw_y, evdev_min_y, evdev_max_y, 0, ver_res); }*/原因是通过evtest /dev/input/event0测试 上报的坐标是正确的在evdev.c添加调试代码后经过缩放坐标就不对了。猜测根据开机log显示分辨率为2160*1600可能在下面代码中改变了evdev_calibrate导致正确的坐标又经过缩放。if((evdev_min_x!0)||(evdev_max_x!disp_hor)||(evdev_min_y!0)||(evdev_max_y!disp_ver)){constchar*buf;bufgetenv(lv_disp_crop);if(buf)touch_cropbuf[0]-0;if(!touch_crop){evdev_calibrate1;printf(calibrate [%d,%d]x[%d,%d] to %dx%d\n,evdev_min_x,evdev_max_x,evdev_min_y,evdev_max_y,disp_hor,disp_ver);}注释完代码后触摸是正常的了。5.编译 烧录没有开启自启动只需要在ssh中输入my_demo即可看到屏幕正常显示和触摸了。

更多文章