本文來(lái)源電子發(fā)燒友社區(qū),作者:zealsoft, 帖子地址:https://bbs.elecfans.com/jishu_2307845_1_1.html
感謝“電子發(fā)燒友網(wǎng)”和飛凌嵌入式公司提供了本次OKA40i-C開(kāi)發(fā)板的評(píng)測(cè)機(jī)會(huì)。上次我們介紹了視頻監(jiān)控的測(cè)試,今天來(lái)介紹一下輕量級(jí)圖形界面庫(kù)LVGL的移植與測(cè)評(píng)。
感謝“電子發(fā)燒友網(wǎng)”和飛凌嵌入式公司提供了本次OKA40i-C開(kāi)發(fā)板的評(píng)測(cè)機(jī)會(huì)。上次我們介紹了視頻監(jiān)控的測(cè)試,今天來(lái)介紹一下輕量級(jí)圖形界面庫(kù)LVGL的移植與測(cè)評(píng)。
一、LVGL源代碼下載
OKA40i開(kāi)發(fā)板官方提供了Qt作為圖形界面開(kāi)發(fā)工具。不過(guò)對(duì)于簡(jiǎn)單的用戶界面程序,Qt有點(diǎn)殺雞用牛刀的意思。今天介紹一下輕量級(jí)的圖形界面庫(kù)LVGL。LVGL的項(xiàng)目作者是來(lái)自匈牙利首都布達(dá)佩斯的 Gábor Kiss-Vámosi。它自帶著接近三十多種小組件,動(dòng)畫和操作非常流暢,同時(shí)配置要求很低,再加上開(kāi)源和免費(fèi),使得它迅速流行起來(lái),AliOSThings甚至把它作為默認(rèn)的圖形界面庫(kù)。
在LVGL的github網(wǎng)站上可以下載源代碼(https://github.com/lvgl/),在LVGL的官方倉(cāng)庫(kù)中包括lv_port_linux_frame_buffer,它包括了在Linux下移植所需要的所有代碼。這個(gè)倉(cāng)庫(kù)會(huì)鏈接到lvgl和lv_drivers兩個(gè)倉(cāng)庫(kù),所以一定要用gitclone的方式下載,不要采用打包成zip的方式。lv_demos這倉(cāng)庫(kù)是不需要的,因?yàn)槔桃呀?jīng)都包括在lvgl倉(cāng)庫(kù)里面了。如果github下載太慢,可以使用gitee的鏡像:https://gitee.com/mculover666/lv_port_linux_frame_buffer.git。
二、配置LVGL
1、修改makefile
需要從makefile中刪除-Wshift-negative-value這個(gè)編譯選項(xiàng),因?yàn)槲覀兊木幾g器不支持,同時(shí)加上-std=c99這個(gè)選項(xiàng),因?yàn)槌绦蛟趂or循環(huán)中使用了C99語(yǔ)法。下面是修改前后的編譯選項(xiàng)對(duì)比。
2、修改lvgl源代碼
由于我們的編譯器不支持PRIX32這個(gè)常量的定義,需要修改lvglsrcdrawswlv_draw_sw_letter.c文件,將其中一句log注釋掉:
也可以把這句改為:
- LV_LOG_WARN("lv_draw_letter: glyph dsc. not found for U+X%", letter);
3、修改內(nèi)存相關(guān)選項(xiàng)
LVGL默認(rèn)是使用基于TLSF 的內(nèi)存管理算法,不過(guò)它開(kāi)的緩沖區(qū)對(duì)于我們的屏幕而言顯然太小了,需要修改lv_conf.h中的定義LV_MEM_CUSTOM 為 1,否則運(yùn)行時(shí)會(huì)崩潰。定義LV_MEM_CUSTOM 為 1表示采用標(biāo)準(zhǔn)C語(yǔ)言的分配內(nèi)存函數(shù)。
4、顯示設(shè)置
顯示輸出方面我們還是通過(guò)HDMI接口輸出到智能電視。LVGL支持通過(guò)直接訪問(wèn)顯示緩沖區(qū)(framebuffer)和SDL等多種方式進(jìn)行輸出。我們此次通過(guò)framebuffer輸出,而且我們的輸出設(shè)備是dev/fb0,所以我們不需要修改任何配置,默認(rèn)配置(lv_drv_conf.h)如下:
4、增加鼠標(biāo)支持
輸入采用USB鼠標(biāo)。使用下面的命令可以看到當(dāng)前系統(tǒng)有哪些輸入設(shè)備:
- cat /proc/bus/input/devices
輸出結(jié)果如下:
I: Bus=0019 Vendor=0001 Product=0001 Version=0100
N: Name="sunxi-ths"P: Phys=sunxiths/input0S: Sysfs=/devices/virtual/input/input0U: Uniq=H: Handlers=event0B: PROP=0B: EV=9B: ABS=100 0I: Bus=0019 Vendor=0001 Product=0001 Version=0100N: Name="sunxi-keyboard"P: Phys=sunxikbd/input0S: Sysfs=/devices/virtual/input/input1U: Uniq=H: Handlers=kbd event1B: PROP=0B: EV=3B: KEY=40040 0 0 10000000I: Bus=0019 Vendor=0001 Product=0001 Version=0100N: Name="sunxi-keypad"P: Phys=Keypad/input2S: Sysfs=/devices/virtual/input/kp0U: Uniq=H: Handlers=sysrq kbd event2B: PROP=0B: EV=3B: KEY=ffffffff fffffffeI: Bus=0019 Vendor=0001 Product=0001 Version=0100N: Name="axp22-powerkey"P: Phys=m1kbd/input2U: Uniq=H: Handlers=kbd event3B: PROP=0B: EV=7B: KEY=100000 0 0 0B: REL=0I: Bus=0003 Vendor=2717 Product=5016 Version=0110N: Name="MOSART Semi. Mi Wireless Mouse Lite"P: Phys=usb-sunxi-ohci-1/input0S: Sysfs=/devices/soc.0/1c1c000.ohci2-controller/usb4/4-1/4-1:1.0/input/input4U: Uniq=H: Handlers=sysrq kbd event4B: PROP=0B: EV=120013B: KEY=10000 7 ff9f207a c14057ff febeffdf ffefffff ffffffff fffffffeB: MSC=10B: LED=7I: Bus=0003 Vendor=2717 Product=5016 Version=0110N: Name="MOSART Semi. Mi Wireless Mouse Lite"P: Phys=usb-sunxi-ohci-1/input1S: Sysfs=/devices/soc.0/1c1c000.ohci2-controller/usb4/4-1/4-1:1.1/input/input5U: Uniq=H: Handlers=kbd mouse0 event5B: PROP=0B: EV=10001fB: KEY=3007f 0 0 0 0 483ffff 17aff32d bf544446 0 0 1f0001 120f93 8b17c000 677bfa d941dfed 9ed680 4400 0 10000002B: REL=1c3B: ABS=1f01 0B: MSC=10
由于我們?cè)陂_(kāi)發(fā)板的兩個(gè)USB口都曾經(jīng)使用過(guò)USB鼠標(biāo),所以我們看到兩個(gè)USB鼠標(biāo)設(shè)備,分別對(duì)應(yīng)event4和event5。我們可以用evtest命令測(cè)試到底哪個(gè)設(shè)備是當(dāng)前使用的。OKA40i開(kāi)發(fā)板上包括了evtest,可以進(jìn)行輸入設(shè)備的測(cè)試。經(jīng)過(guò)測(cè)試,我們發(fā)現(xiàn)event5對(duì)應(yīng)的設(shè)備是我們目前連接的鼠標(biāo)。
# evtestNo 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 LiteSelect the device event number [0-5]: 5Input driver version is 1.0.1Input device ID: bus 0x3 vendor 0x2717 product 0x5016 version 0x110Input 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 0Min 0Max 896Event code 40 (ABS_MISC)Value 0Min 0Max 255Event code 41 (?)Value 0Min 0Max 255Event code 42 (?)Value 0Min 0Max 255Event code 43 (?)Value 0Min 0Max 255Event code 44 (?)Value 0Min 0Max 255Event type 4 (EV_MSC)Event code 4 (MSC_SCAN)Key repeat handling:Repeat type 20 (EV_REP)Repeat code 0 (REP_DELAY)Value 400Repeat code 1 (REP_PERIOD)Value 80Properties:Testing ... (interrupt to exit)Event: time 1664272853.352702, type 2 (EV_REL), code 0 (REL_X), value 32Event: time 1664272853.352702, type 2 (EV_REL), code 1 (REL_Y), value -19Event: time 1664272853.352702, -------------- SYN_REPORT ------------Event: time 1664272853.368699, type 2 (EV_REL), code 0 (REL_X), value 12Event: time 1664272853.368699, type 2 (EV_REL), code 1 (REL_Y), value -14Event: time 1664272853.368699, -------------- SYN_REPORT ------------Event: time 1664272853.372717, type 2 (EV_REL), code 0 (REL_X), value 3Event: time 1664272853.372717, type 2 (EV_REL), code 1 (REL_Y), value -8Event: time 1664272853.372717, -------------- SYN_REPORT ------------Event: time 1664272853.384737, type 2 (EV_REL), code 0 (REL_X), value -9Event: time 1664272853.384737, type 2 (EV_REL), code 1 (REL_Y), value 1Event: time 1664272853.384737, -------------- SYN_REPORT ------------Event: time 1664272853.388724, type 2 (EV_REL), code 0 (REL_X), value -9Event: time 1664272853.388724, type 2 (EV_REL), code 1 (REL_Y), value 7Event: time 1664272853.388724, -------------- SYN_REPORT ------------Event: time 1664272853.400736, type 2 (EV_REL), code 0 (REL_X), value -8Event: time 1664272853.400736, type 2 (EV_REL), code 1 (REL_Y), value 14Event: time 1664272853.400736, -------------- SYN_REPORT ------------
修改lv_drv_conf.h中EVDEV所對(duì)應(yīng)的設(shè)備名為:"/dev/input/event5"。這樣鼠標(biāo)就可以正常工作了。
5、修改main.c
在main.c根據(jù)自己使用的屏幕修改分辨率:
-
disp_drv.hor_res = 1980; // 原來(lái)是800
disp_drv.ver_res = 1080; // 原來(lái)是480
一、編譯與測(cè)試
1、Widgets示例
要使用LVGL的官方測(cè)試?yán)齏idgets,首先確保lv_conf.h中的定義的LV_USE_DEMO_WIDGETS,然后確認(rèn)在main.c中調(diào)用了lv_demo_widgets()。
2、Benchmark示例
LVGL的官方測(cè)試?yán)鼴enchmark可以用來(lái)測(cè)試顯示性能。
完整的測(cè)試結(jié)果如下:
LVGL v8.3.0Benchmark (in csv format)Weighted FPS: 69Opa. speed: 88%Rectangle,105Rectangle + opa,54Rectangle rounded,96Rectangle rounded + opa,53Circle,60Circle + opa,28Border,134Border + opa,132Border rounded,139Border rounded + opa,130Circle border,55Circle border + opa,50Border top,144Border top + opa,144Border left,133Border left + opa,138Border top + left,140Border top + left + opa,137Border left + right,145Border left + right + opa,133Border top + bottom,143Border top + bottom + opa,144Shadow small,63Shadow small + opa,59Shadow small offset,64Shadow small offset + opa,55Shadow large,38Shadow large + opa,36Shadow large offset,36Shadow large offset + opa,36Image RGB,45Image RGB + opa,29Image ARGB,35Image ARGB + opa,31Image chorma keyed,41Image chorma keyed + opa,31Image indexed,25Image indexed + opa,22Image alpha only,27Image alpha only + opa,23Image RGB recolor,30Image RGB recolor + opa,22Image ARGB recolor,25Image ARGB recolor + opa,22Image chorma keyed recolor,26Image chorma keyed recolor + opa,22Image indexed recolor,20Image indexed recolor + opa,18Image RGB rotate,35Image RGB rotate + opa,21Image RGB rotate anti aliased,11Image RGB rotate anti aliased + opa,10Image ARGB rotate,33Image ARGB rotate + opa,27Image ARGB rotate anti aliased,10Image ARGB rotate anti aliased + opa,9Image RGB zoom,57Image RGB zoom + opa,35Image RGB zoom anti aliased,16Image RGB zoom anti aliased + opa,14Image ARGB zoom,47Image ARGB zoom + opa,39Image ARGB zoom anti aliased,13Image ARGB zoom anti aliased + opa,12Text small,157Text small + opa,154Text medium,151Text medium + opa,155Text large,158Text large + opa,154Text small compressed,0Text small compressed + opa,0Text medium compressed,0Text medium compressed + opa,0Text large compressed,0Text large compressed + opa,0Line,75Line + opa,76Arc think,53Arc think + opa,53Arc thick,52Arc thick + opa,50Substr. rectangle,6Substr. rectangle + opa,0Substr. border,0Substr. border + opa,0Substr. shadow,0Substr. shadow + opa,0Substr. image,0Substr. image + opa,0Substr. line,2Substr. line + opa,1Substr. arc,49Substr. arc + opa,50Substr. text,4Substr. text + opa,4
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。
舉報(bào)投訴
-
飛凌
+關(guān)注
關(guān)注
0文章
134瀏覽量
16128
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
【飛凌嵌入式OK3588J-C開(kāi)發(fā)板體驗(yàn)】OK3588J-C開(kāi)發(fā)板開(kāi)箱評(píng)測(cè)
很高興收到飛凌嵌入式提供的OK3588J-C開(kāi)發(fā)板,這是瑞芯微最新的8K旗艦8核SOC,非常適合用來(lái)做機(jī)器視覺(jué),AI,語(yǔ)音識(shí)別,圖像處理。
下面來(lái)看看OK3588J-
發(fā)表于 12-04 15:23
【飛凌嵌入式OK3576-C開(kāi)發(fā)板體驗(yàn)】開(kāi)箱報(bào)告
簡(jiǎn)介
很榮幸參與到本次由飛凌嵌入式和電子發(fā)燒友提供的OK3576-C開(kāi)發(fā)板的試用機(jī)會(huì)。
飛
發(fā)表于 08-22 02:13
【飛凌嵌入式OK527N-C開(kāi)發(fā)板體驗(yàn)】- 1. 開(kāi)箱
周三左右就收到了快遞,一直忙其他的事情,沒(méi)時(shí)間弄這個(gè),就拖到周末了。
首先發(fā)個(gè)開(kāi)箱貼,記錄下。
外包裝,盒子比想象的要大不少。
附帶飛凌的產(chǎn)品手冊(cè),里面有很多飛凌的
發(fā)表于 07-11 21:24
【飛凌嵌入式OK527N-C開(kāi)發(fā)板體驗(yàn)】- 開(kāi)箱
周三左右就收到了快遞,一直忙其他的事情,沒(méi)時(shí)間弄這個(gè),就拖到周末了。
首先發(fā)個(gè)開(kāi)箱貼,記錄下。
外包裝,盒子比想象的要大不少。
附帶飛凌的產(chǎn)品手冊(cè),里面有很多飛凌的
發(fā)表于 06-30 23:04
點(diǎn)擊參與米爾NXP i.MX 93開(kāi)發(fā)板有獎(jiǎng)試用
米爾與NXP合作發(fā)布的新品基于NXPi.MX93應(yīng)用處理器的MYD-LMX9X開(kāi)發(fā)板免費(fèi)試用活動(dòng)來(lái)啦~~米爾提供了3塊價(jià)值678元的MYD-LMX9X開(kāi)發(fā)板發(fā)起試用活動(dòng)您不僅可以免費(fèi)體
移植libmodbus庫(kù)到米爾-全志T113-i開(kāi)發(fā)板
測(cè)試開(kāi)發(fā)板在工業(yè)領(lǐng)域的應(yīng)用,modbus作為工業(yè)領(lǐng)域的一個(gè)重要協(xié)議,那好就移植libmodbus庫(kù)。
如何在飛凌嵌入式T113-i開(kāi)發(fā)板的Buildroot中移植MQTT協(xié)議?
新功能。本篇文章,小編就以在Buildroot移植MQTT協(xié)議為例為大家介紹。
配置文件介紹
首先了解一下在Buildroot中移植功能時(shí)涉及到的配置文件。
查看飛凌嵌入式OK113
發(fā)表于 02-04 11:27
飛凌嵌入式RK3568開(kāi)發(fā)板藍(lán)牙收、發(fā)文件測(cè)試
本文由電子發(fā)燒友論壇用戶fsdzdzy提供,感謝分享。飛凌嵌入式每月定期開(kāi)展新的開(kāi)發(fā)板體驗(yàn)活動(dòng),歡迎更多工程師朋友的關(guān)注和參與。飛凌嵌入式O
飛凌嵌入式T113-i開(kāi)發(fā)板的調(diào)屏方法
對(duì)于飛凌嵌入式T113-i開(kāi)發(fā)板的調(diào)屏問(wèn)題,需要按照以下步驟進(jìn)行操作
如何在飛凌嵌入式T113-i開(kāi)發(fā)板的Buildroot中移植MQTT協(xié)議?
飛凌嵌入式OK113i-S開(kāi)發(fā)板上市一段時(shí)間以來(lái)收獲了很多關(guān)注,也成為了許多客戶項(xiàng)目選型的優(yōu)質(zhì)之選。在實(shí)際的項(xiàng)目開(kāi)發(fā)中,工程師朋友們可能會(huì)需
飛凌嵌入式全志T113-i開(kāi)發(fā)板的休眠及喚醒操作
飛凌嵌入式OK113i-S開(kāi)發(fā)板支持兩種休眠方式:freeze和mem。這兩種方式可以通過(guò)/sys/power/state文件節(jié)點(diǎn)進(jìn)行操作,用戶可以通過(guò)在該文件節(jié)點(diǎn)寫入freeze或m
發(fā)表于 01-17 09:29
雙核Cortex-A7 CPU、64位玄鐵C906 RISC-V CPU,OK113i-S開(kāi)發(fā)板開(kāi)發(fā)體驗(yàn)
結(jié)實(shí),不知道為啥花這么血本,哈哈
>>>點(diǎn)此查看全文
2.開(kāi)機(jī)測(cè)評(píng)--軟件測(cè)試篇
飛凌OK113i-S開(kāi)發(fā)板開(kāi)機(jī)就可以進(jìn)
發(fā)表于 01-16 10:07
飛凌嵌入式T113-i開(kāi)發(fā)板的調(diào)屏方法,就是這樣簡(jiǎn)單
的配備為客戶提供了更加多樣的選擇。今天小編就與大家分享一下為飛凌嵌入式OK113i-S開(kāi)發(fā)板適配LVDS屏幕的過(guò)程。
評(píng)論