0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

【飞凌OKA40i-C开发板试用体验】LVGL移植与测评

开发板试用精选 来源:开发板试用 作者:电子发烧友论坛 2022-10-20 10:22 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

本文来源电子发烧友社区,作者:zealsoft, 帖子地址:https://bbs.elecfans.com/jishu_2307845_1_1.html


感谢“电子发烧友网”和飞凌嵌入式公司提供了本次OKA40i-C开发板的评测机会。上次我们介绍了视频监控的测试,今天来介绍一下轻量级图形界面库LVGL的移植与测评。
一、LVGL源代码下载
OKA40i开发板官方提供了Qt作为图形界面开发工具。不过对于简单的用户界面程序,Qt有点杀鸡用牛刀的意思。今天介绍一下轻量级的图形界面库LVGL。LVGL的项目作者是来自匈牙利首都布达佩斯的 Gábor Kiss-Vámosi。它自带着接近三十多种小组件,动画和操作非常流畅,同时配置要求很低,再加上开源和免费,使得它迅速流行起来,AliOSThings甚至把它作为默认的图形界面库。
在LVGL的github网站上可以下载源代码(https://github.com/lvgl/),在LVGL的官方仓库中包括lv_port_linux_frame_buffer,它包括了在Linux下移植所需要的所有代码。这个仓库会链接到lvgl和lv_drivers两个仓库,所以一定要用gitclone的方式下载,不要采用打包成zip的方式。lv_demos这仓库是不需要的,因为例程已经都包括在lvgl仓库里面了。如果github下载太慢,可以使用gitee的镜像:https://gitee.com/mculover666/lv_port_linux_frame_buffer.git
二、配置LVGL
1、修改makefile
需要从makefile中删除-Wshift-negative-value这个编译选项,因为我们的编译器不支持,同时加上-std=c99这个选项,因为程序在for循环中使用了C99语法。下面是修改前后的编译选项对比。
poYBAGMyYs-AXea7AAVJf1UByJg903.png
2、修改lvgl源代码

由于我们的编译器不支持PRIX32这个常量的定义,需要修改lvglsrcdrawswlv_draw_sw_letter.c文件,将其中一句log注释掉:
pYYBAGMyYs-AWtxSAAikQT_qxw0840.png
也可以把这句改为:


  1. LV_LOG_WARN("lv_draw_letter: glyph dsc. not found for U+X%", letter);
复制代码


3、修改内存相关选项

LVGL默认是使用基于TLSF 的内存管理算法,不过它开的缓冲区对于我们的屏幕而言显然太小了,需要修改lv_conf.h中的定义LV_MEM_CUSTOM 为 1,否则运行时会崩溃。定义LV_MEM_CUSTOM 为 1表示采用标准C语言的分配内存函数。
poYBAGMyYtKAQdHFAAn_K5oeEDg703.png
4、显示设置

显示输出方面我们还是通过HDMI接口输出到智能电视。LVGL支持通过直接访问显示缓冲区(framebuffer)和SDL等多种方式进行输出。我们此次通过framebuffer输出,而且我们的输出设备是dev/fb0,所以我们不需要修改任何配置,默认配置(lv_drv_conf.h)如下:
pYYBAGMyYtOATgI0AAWsjZs8O2s022.png
4、增加鼠标支持
输入采用USB鼠标。使用下面的命令可以看到当前系统有哪些输入设备:


  1. cat /proc/bus/input/devices
复制代码


输出结果如下:
I: Bus=0019 Vendor=0001 Product=0001 Version=0100


N: Name="sunxi-ths"
P: Phys=sunxiths/input0
S: Sysfs=/devices/virtual/input/input0
U: Uniq=
H: Handlers=event0
B: PROP=0
B: EV=9
B: ABS=100 0
I: Bus=0019 Vendor=0001 Product=0001 Version=0100
N: Name="sunxi-keyboard"
P: Phys=sunxikbd/input0
S: Sysfs=/devices/virtual/input/input1
U: Uniq=
H: Handlers=kbd event1
B: PROP=0
B: EV=3
B: KEY=40040 0 0 10000000
I: Bus=0019 Vendor=0001 Product=0001 Version=0100
N: Name="sunxi-keypad"
P: Phys=Keypad/input2
S: Sysfs=/devices/virtual/input/kp0
U: Uniq=
H: Handlers=sysrq kbd event2
B: PROP=0
B: EV=3
B: KEY=ffffffff fffffffe
I: Bus=0019 Vendor=0001 Product=0001 Version=0100
N: Name="axp22-powerkey"
P: Phys=m1kbd/input2
S: Sysfs=/devices/soc.0/1c2ac00.twi/i2c-0/0-0034/axp22-powerkey/input/input3
U: Uniq=
H: Handlers=kbd event3
B: PROP=0
B: EV=7
B: KEY=100000 0 0 0
B: REL=0
I: Bus=0003 Vendor=2717 Product=5016 Version=0110
N: Name="MOSART Semi. Mi Wireless Mouse Lite"
P: Phys=usb-sunxi-ohci-1/input0
S: Sysfs=/devices/soc.0/1c1c000.ohci2-controller/usb4/4-1/4-1:1.0/input/input4
U: Uniq=
H: Handlers=sysrq kbd event4
B: PROP=0
B: EV=120013
B: KEY=10000 7 ff9f207a c14057ff febeffdf ffefffff ffffffff fffffffe
B: MSC=10
B: LED=7
I: Bus=0003 Vendor=2717 Product=5016 Version=0110
N: Name="MOSART Semi. Mi Wireless Mouse Lite"
P: Phys=usb-sunxi-ohci-1/input1
S: Sysfs=/devices/soc.0/1c1c000.ohci2-controller/usb4/4-1/4-1:1.1/input/input5
U: Uniq=
H: Handlers=kbd mouse0 event5
B: PROP=0
B: EV=10001f
B: KEY=3007f 0 0 0 0 483ffff 17aff32d bf544446 0 0 1f0001 120f93 8b17c000 677bfa d941dfed 9ed680 4400 0 10000002
B: REL=1c3
B: ABS=1f01 0
B: MSC=10


由于我们在开发板的两个USB口都曾经使用过USB鼠标,所以我们看到两个USB鼠标设备,分别对应event4和event5。我们可以用evtest命令测试到底哪个设备是当前使用的。OKA40i开发板上包括了evtest,可以进行输入设备的测试。经过测试,我们发现event5对应的设备是我们目前连接的鼠标。


# evtest
No device specified, trying to scan all of /dev/input/event*
Available devices:
/dev/input/event0: sunxi-ths
/dev/input/event1: sunxi-keyboard
/dev/input/event2: sunxi-keypad
/dev/input/event3: axp22-powerkey
/dev/input/event4: MOSART Semi. Mi Wireless Mouse Lite
/dev/input/event5: MOSART Semi. Mi Wireless Mouse Lite
Select the device event number [0-5]: 5
Input driver version is 1.0.1
Input device ID: bus 0x3 vendor 0x2717 product 0x5016 version 0x110
Input device name: "MOSART Semi. Mi Wireless Mouse Lite"
Supported events:
Event type 0 (EV_SYN)
Event type 1 (EV_KEY)
Event code 1 (KEY_ESC)
Event code 28 (KEY_ENTER)
Event code 74 (KEY_KPMINUS)
……
Event code 592 (KEY_BRIGHTNESS_MIN)
Event code 593 (KEY_BRIGHTNESS_MAX)
Event type 2 (EV_REL)
Event code 0 (REL_X)
Event code 1 (REL_Y)
Event code 6 (REL_HWHEEL)
Event code 7 (REL_DIAL)
Event code 8 (REL_WHEEL)
Event type 3 (EV_ABS)
Event code 32 (ABS_VOLUME)
Value 0
Min 0
Max 896
Event code 40 (ABS_MISC)
Value 0
Min 0
Max 255
Event code 41 (?)
Value 0
Min 0
Max 255
Event code 42 (?)
Value 0
Min 0
Max 255
Event code 43 (?)
Value 0
Min 0
Max 255
Event code 44 (?)
Value 0
Min 0
Max 255
Event type 4 (EV_MSC)
Event code 4 (MSC_SCAN)
Key repeat handling:
Repeat type 20 (EV_REP)
Repeat code 0 (REP_DELAY)
Value 400
Repeat code 1 (REP_PERIOD)
Value 80
Properties:
Testing ... (interrupt to exit)
Event: time 1664272853.352702, type 2 (EV_REL), code 0 (REL_X), value 32
Event: time 1664272853.352702, type 2 (EV_REL), code 1 (REL_Y), value -19
Event: time 1664272853.352702, -------------- SYN_REPORT ------------
Event: time 1664272853.368699, type 2 (EV_REL), code 0 (REL_X), value 12
Event: time 1664272853.368699, type 2 (EV_REL), code 1 (REL_Y), value -14
Event: time 1664272853.368699, -------------- SYN_REPORT ------------
Event: time 1664272853.372717, type 2 (EV_REL), code 0 (REL_X), value 3
Event: time 1664272853.372717, type 2 (EV_REL), code 1 (REL_Y), value -8
Event: time 1664272853.372717, -------------- SYN_REPORT ------------
Event: time 1664272853.384737, type 2 (EV_REL), code 0 (REL_X), value -9
Event: time 1664272853.384737, type 2 (EV_REL), code 1 (REL_Y), value 1
Event: time 1664272853.384737, -------------- SYN_REPORT ------------
Event: time 1664272853.388724, type 2 (EV_REL), code 0 (REL_X), value -9
Event: time 1664272853.388724, type 2 (EV_REL), code 1 (REL_Y), value 7
Event: time 1664272853.388724, -------------- SYN_REPORT ------------
Event: time 1664272853.400736, type 2 (EV_REL), code 0 (REL_X), value -8
Event: time 1664272853.400736, type 2 (EV_REL), code 1 (REL_Y), value 14
Event: time 1664272853.400736, -------------- SYN_REPORT ------------



修改lv_drv_conf.h中EVDEV所对应的设备名为:"/dev/input/event5"。这样鼠标就可以正常工作了。
poYBAGMyYtSAGiepAA9iXRJef_E337.png
5、修改main.c
在main.c根据自己使用的屏幕修改分辨率:


  1. disp_drv.hor_res = 1980; // 原来是800
    disp_drv.ver_res = 1080; // 原来是480
复制代码


一、编译与测试
1、Widgets示例

要使用LVGL的官方测试例Widgets,首先确保lv_conf.h中的定义的LV_USE_DEMO_WIDGETS,然后确认在main.c中调用了lv_demo_widgets()。
pYYBAGMyYtWAYPXWAALN3veS97Q685.png
poYBAGMyYteAHQEbAAtksTqR_E8651.png
pYYBAGMyYtmATO6DAA4Jm-7u264542.png
2、Benchmark示例
LVGL的官方测试例Benchmark可以用来测试显示性能。
完整的测试结果如下:


LVGL v8.3.0Benchmark (in csv format)
Weighted FPS: 69
Opa. speed: 88%
Rectangle,105
Rectangle + opa,54
Rectangle rounded,96
Rectangle rounded + opa,53
Circle,60
Circle + opa,28
Border,134
Border + opa,132
Border rounded,139
Border rounded + opa,130
Circle border,55
Circle border + opa,50
Border top,144
Border top + opa,144
Border left,133
Border left + opa,138
Border top + left,140
Border top + left + opa,137
Border left + right,145
Border left + right + opa,133
Border top + bottom,143
Border top + bottom + opa,144
Shadow small,63
Shadow small + opa,59
Shadow small offset,64
Shadow small offset + opa,55
Shadow large,38
Shadow large + opa,36
Shadow large offset,36
Shadow large offset + opa,36
Image RGB,45
Image RGB + opa,29
Image ARGB,35
Image ARGB + opa,31
Image chorma keyed,41
Image chorma keyed + opa,31
Image indexed,25
Image indexed + opa,22
Image alpha only,27
Image alpha only + opa,23
Image RGB recolor,30
Image RGB recolor + opa,22
Image ARGB recolor,25
Image ARGB recolor + opa,22
Image chorma keyed recolor,26
Image chorma keyed recolor + opa,22
Image indexed recolor,20
Image indexed recolor + opa,18
Image RGB rotate,35
Image RGB rotate + opa,21
Image RGB rotate anti aliased,11
Image RGB rotate anti aliased + opa,10
Image ARGB rotate,33
Image ARGB rotate + opa,27
Image ARGB rotate anti aliased,10
Image ARGB rotate anti aliased + opa,9
Image RGB zoom,57
Image RGB zoom + opa,35
Image RGB zoom anti aliased,16
Image RGB zoom anti aliased + opa,14
Image ARGB zoom,47
Image ARGB zoom + opa,39
Image ARGB zoom anti aliased,13
Image ARGB zoom anti aliased + opa,12
Text small,157
Text small + opa,154
Text medium,151
Text medium + opa,155
Text large,158
Text large + opa,154
Text small compressed,0
Text small compressed + opa,0
Text medium compressed,0
Text medium compressed + opa,0
Text large compressed,0
Text large compressed + opa,0
Line,75
Line + opa,76
Arc think,53
Arc think + opa,53
Arc thick,52
Arc thick + opa,50
Substr. rectangle,6
Substr. rectangle + opa,0
Substr. border,0
Substr. border + opa,0
Substr. shadow,0
Substr. shadow + opa,0
Substr. image,0
Substr. image + opa,0
Substr. line,2
Substr. line + opa,1
Substr. arc,49
Substr. arc + opa,50
Substr. text,4
Substr. text + opa,4

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 飞凌
    +关注

    关注

    0

    文章

    135

    浏览量

    16790
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    【作品合集】嵌入式OK527N-C开发板测评

    嵌入式OK527N-C开发板测评作品合集 产品介绍: OK527-C
    发表于 09-22 15:54

    【作品合集】中科昊芯Core_DSC280025C开发板测评

    的应用 【中科昊芯Core_DSC280025C开发板试用体验】---外部中断问题 第一期合集: 微五科技CF5010RBT60开发板测评
    发表于 09-18 10:52

    【上海晶珩睿莓1开发板试用体验】移植LVGL9.3并使用32位色进行显示

    在之前的开发板试用帖子中,我使用Linux开发板移植LVGL9.1,而LVGL9系版本目前最新
    发表于 09-18 00:52

    【作品合集】玄铁Banana Pi BPI-RV2开发板测评

    Pi BPI-RV2开发板试用体验】开发板介绍视频 【Banana Pi BPI-RV2开发板试用体验】
    发表于 09-17 10:58

    【作品合集】米尔RK3576开发板测评

    米尔RK3576开发板测评作品合集 产品介绍: RK3576 是瑞芯微一款面向AI市场推出的高性能处理器,它配备了四核Cortex-A72和四 核Cortex-A53 的 CPU,集成了6TOPS
    发表于 09-11 10:19

    【作品合集】灵眸科技EASY EAI Orin Nano(RK3576)开发板测评

    体验】HDMI & SPITFTLCD双屏异显(双进程) 【EASY EAI Orin Nano(RK3576)开发板试用体验】移植LVGL9.1(
    发表于 09-09 09:59

    【作品合集】沁恒微电子CH585开发板测评

    体验】PWM 输出【沁恒CH585开发板免费试用体验】UART 串口通信【沁恒CH585开发板免费试用体验】NFC近场通信【沁恒CH585开发板
    发表于 09-08 10:38

    【作品精选】2025电子发烧友开发板测评大赛作品合集!

    Core_DSC280025C开发板测评 润开鸿HH-SCDAYU800A开发板测评 视美泰M-K1HSE、3568
    发表于 09-03 15:24

    【作品合集】创龙科技TLT113/TL3562-MiniEVM开发板测评

    创龙科技TLT113/TL3562-MiniEVM开发板测评作品合集 产品介绍: 创龙科技 TLT113 - MiniEVM基于全志科技 T113 - I,采用双核 ARM Cortex - A7
    发表于 09-02 11:25

    【作品合集】微五科技CF5010RBT60开发板测评

    CF5010RBT60开发板试用体验】UART4接收问题 【微五科技CF5010RBT60开发板试用体验】基于FIFO的串口驱动移植xpri
    发表于 09-01 14:48

    送啦!嵌入式联合NXP邀您参加OK-MX9596-C开发板试用活动

    送啦!嵌入式联合NXP邀您参加OK-MX9596-C开发板试用活动
    的头像 发表于 08-22 08:03 754次阅读
    送啦!<b class='flag-5'>飞</b><b class='flag-5'>凌</b>嵌入式联合NXP邀您参加OK-MX9596-<b class='flag-5'>C</b><b class='flag-5'>开发板</b><b class='flag-5'>试用</b>活动

    5分钟学会网络服务搭建!i.MX9352开发板 + Linux 6.1实战示例

    本文就将以嵌入式OK-MX9352-C开发板(搭载了在工业物联网领域广泛应用的NXP i.MX9352处理器)为平台,介绍如何在Linu
    的头像 发表于 06-13 16:42 1076次阅读
    5分钟学会网络服务搭建!<b class='flag-5'>飞</b><b class='flag-5'>凌</b><b class='flag-5'>i</b>.MX9352<b class='flag-5'>开发板</b> + Linux 6.1实战示例

    从DeepSeek到Qwen,AI大模型的移植与交互实战指南-嵌入式

    在不久前发布的《技术实战|OK3588-C开发板上部署DeepSeek-R1大模型的完整指南》一文中,小编为大家介绍了DeepSeek-R1在嵌入式OK3588-
    的头像 发表于 03-28 08:06 2525次阅读
    从DeepSeek到Qwen,AI大模型的<b class='flag-5'>移植</b>与交互实战指南-<b class='flag-5'>飞</b><b class='flag-5'>凌</b>嵌入式

    3.1s启动!嵌入式i.MX93开发板部署LVGL,打造更高效的GUI

    近期,嵌入式为基于NXP i.MX93系列处理器打造的OK-MX9352-C开发板成功移植
    的头像 发表于 01-16 11:52 1059次阅读
    3.1s启动!<b class='flag-5'>飞</b><b class='flag-5'>凌</b>嵌入式<b class='flag-5'>i</b>.MX93<b class='flag-5'>开发板</b>部署<b class='flag-5'>LVGL</b>,打造更高效的GUI

    2秒启动!嵌入式RK3506开发板LVGL显示方案,让界面炫起来

    近期,嵌入式为OK3506J-S开发板移植了最新9.2版本的LVGL,支持多种屏幕构件以及鼠标、键盘、触摸等多种输入方式, 能够带来更加
    的头像 发表于 01-10 10:52 1641次阅读
    2秒启动!<b class='flag-5'>飞</b><b class='flag-5'>凌</b>嵌入式RK3506<b class='flag-5'>开发板</b><b class='flag-5'>LVGL</b>显示方案,让界面炫起来