Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >树莓派3b在rt-thread上移植LittlevGL

树莓派3b在rt-thread上移植LittlevGL

作者头像
bigmagic
发布于 2020-05-07 01:56:53
发布于 2020-05-07 01:56:53
2.2K00
代码可运行
举报
文章被收录于专栏:嵌入式iot嵌入式iot
运行总次数:0
代码可运行

树莓派3b在rt-thread上移植LittlevGL

  • 1.本文概述
  • 2.资源准备
  • 3.上手体验
  • 4.rt-thread与lvgl进行无缝对接
  • 5.总结

1.本文概述

本文主要针对树莓派3b,对rt-thread上移植lvgl进行叙述。用最简单的办法,实现rtt移植lvgl的过程。只需要加几个文件,就可以在使用最新版本的LittlevGL图形库了。

本文也可以在raspi qemu上进行测试,不用实际硬件开发板就可以学习LittlevGL的开发以及rt-thread的开发。

2.资源准备

硬件资源

树莓派3b+hdmi屏

或者采用树莓派的qemu进行模拟。相关文章可以关注我微信公众号,教你如何进行树莓派rtt环境搭建,以及qemu环境搭建。这里就不多进行叙述了。

软件资源

获取rtt的源代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
https://github.com/RT-Thread/rt-thread

进入相关树莓派3b的bsp目录

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
rt-thread/bsp/raspberry-pi/raspi3-64/

接着获取lvgl的源代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
https://github.com/littlevgl/lvgl

3.上手体验

第一步:下载源代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
https://github.com/bigmagic123/lvgl

这里是在lvgl原版工程上fork的,只添加了几个文件,后面详细描述如何修改。

放到rt-thread/bsp/raspberry-pi/raspi3-64/applications文件夹下:

其中lv_conf.h在lvgl/lv_rtt_port文件夹目录;

第二步:rtt配置使用lvgl

在rt-thread/bsp/raspberry-pi/raspi3-64输入scons --menuconfig。或者在env工具中直接输入menuconfig。

第三步:编译

在控制台输入scons即可开始编译。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
CC build/kernel/src/scheduler.o
CC build/kernel/src/signal.o
CC build/kernel/src/thread.o
CC build/kernel/src/timer.o
LINK rtthread.elf
aarch64-elf-objcopy -O binary rtthread.elf kernel8.img
aarch64-elf-size rtthread.elf
   text    data     bss     dec     hex filename
 308672    3856   95872  408400   63b50 rtthread.elf
scons: done building targets.

将生成的kernel8.img放到树莓派3b的sd卡中,并且在串口控制台输入test_lvgl即可看到画面出来。

此时显示屏上的效果如下:

用大屏看的更加清楚

当然,如果手上没有树莓派硬件,也可以通过qemu进行体验。首先需要安装最新版本的qemu。建立如下的运行脚本即可。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
if [ ! -f "sd.bin" ]; then
dd if=/dev/zero of=sd.bin bs=1024 count=65536
fi
qemu-system-aarch64 -M raspi3 -kernel kernel8.img -serial null -serial stdio -sd sd.bin -monitor pty

执行效果如下

4.rt-thread与lvgl进行无缝对接

这一步很关键,如何在尽量少的修改下进行无缝的对接,这就需要理解lvgl与rtt的驱动框架模型。

首先rtt采用的是SCons的方式进行编译,而LittlevGL却是采用makefile的方式进行。这里新增几个Sconscript脚本就可以了。

在lvgl项目的工程下面,添加如下的Sconscript脚本

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# RT-Thread building script for bridge

import os
from building import *

cwd = GetCurrentDir()
objs = []
list = os.listdir(cwd)

if GetDepend('RT_USING_LVGL'):
	for d in list:
		path = os.path.join(cwd, d)
		if os.path.isfile(os.path.join(path, 'SConscript')):
			objs = objs + SConscript(os.path.join(d, 'SConscript'))

Return('objs')

以上的意思是寻找该目录下的子目录,去找SConscript脚本。

接着在lvgl/src也添加上述的脚本。

接着在lvgl/src子目录下的lv_corelv_drawlv_fontlv_hallv_misclv_objxlv_themes下添加下面脚本

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from building import *

cwd = GetCurrentDir()
src = Glob('*.c') + Glob('*.cpp')+ Glob('*.a')

CPPPATH = [cwd, str(Dir('#'))]

group = DefineGroup('lv_hal', src, depend = [''],CPPPATH = CPPPATH)

Return('group')

该脚本的含义就是编译该目录下的所有文件。这样就可以使用scons编译lvgl了。

接着写对接驱动,为了不修改太多的lvgl相关的东西,我建立了一个lv_rtt_port的目录,专门对接lvgl。

其中lv_conf.h是lvgl工程下lv_conf_template.h的修改版本,主要修改屏的宽高,以及BPP。

lv_port_rtt.c是rtt的lcd驱动框架和lvgl的对接部分的实现。

sysmon.c是https://github.com/littlevgl/lv_examples的demo程序,在lv_apps目录下。

rtt_lvgl_test.c是在rtt上实现的测试lvgl的程序,开启一个gui线程。

这部分完成就可以了。

另外在rtt修改的地方只有一处,就是对接tick的驱动。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void rt_hw_timer_isr(int vector, void *parameter)
{
#ifdef BSP_USING_CORETIMER
    rt_hw_set_gtimer_val(timerStep);
#else
    ARM_TIMER_IRQCLR = 0;
#endif

#ifdef RT_USING_LVGL
    lv_tick_inc(1);
#endif

    rt_tick_increase();
}

这里是硬件定时器,每一个tick产生一次中断,由于目前没有用到其他的定时器,这里使用的和操作系统同一个tick。也可以用独立的tick或者软件定时器实现。

这些操作完成之后,lvgl就可以在rtt上运行了。

5.总结

如何在rtt上实现LittlevGL的移植其实非常容易,只需要掌握rtt的文件组织方式,并且合理的使用scons进行文件组织。lvgl对接起来总的说起来就是三步:

1.对接lcd的framebuff

2.对接tick

3.对接触摸

然后去实现绘图功能。

后续在树莓派3b上会移植spi接口的屏,会带上触摸功能,就可以更加便捷的玩转树莓派,玩转LittlevGL以及学习rt-thread了。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-04-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 嵌入式IoT 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
rt-thread 树莓派3b 64位在qemu上运行
本文主要描述树莓派64位的编译及运行方式,并且通过在qemu上运行仿真体验一下rt-thread 的64位效果。对于手上没有树莓派但是又想体验一下树莓派64位的朋友来说非常方便。当在qemu上运行通过后,再下载到真实的树莓派3b的板子上运行,效果一致。通过这种方式可以方便调试程序。
bigmagic
2020/05/08
2.1K0
rt-thread 树莓派3b 64位在qemu上运行
如何在树莓派2上移植rt-thread操作系统
2.Ubuntu上需要装scons,因为rt-thread操作系统是通过scons组织的。
bigmagic
2020/03/17
1K0
rt-smart移植分析:从树莓派3b入手
移植rt-smart到最新的板子上具体需要注意哪些细节,哪些才是移植rt-smart的关键点?本文从树莓派3b上移植rt-smart的角度,从头分析rt-smart移植的关键细节。为了简化系统,这里只做了rt-smart的最小系统的移植,启用了rt-smart最基本的特性。
bigmagic
2020/12/22
1.4K0
rt-smart移植分析:从树莓派3b入手
高效搭建树莓派3b rt-thread的开发环境
由于电子设备的普及,越来越多人拥有树莓派,不管是作为电子极客,还是作为普通普通人,很多人都会玩一下树莓派,可以学习一些c语言,也可以学习嵌入式。下面我来介绍一下如何在树莓派上运行rt-thread rtos。
bigmagic
2020/03/17
3.3K0
编写一个rt-smart上的应用程序体验一下!
在漫长的等待过程中,rt-smart开源版本发布出来了。拿到rt-smart第一手资料的,就在思考如何用rt-smart做些好玩的东西,可以充分发挥出用户态与内核态的特性。正好目前正在研究树莓派4的显示屏和触摸屏,所以就想着把lvgl最新版本移植上去跑跑,看看上手难度以及最后的运行体验效果究竟怎么样。心动不如行动,立即评估自己的时间。花了两三个小时就把思路理清楚了,然后花了三四个小时去用代码实现功能,最后效果确实还很好,不管是流畅性还是代码的设计都非常简单明了,下面来分享一下其中的过程。
bigmagic
2020/11/25
1.6K0
编写一个rt-smart上的应用程序体验一下!
如何移植RTT微内核到树莓派3B
作者是第一次接触微内核,目前也没有深入去了解。很高兴参与RTT在树莓派上搭建的微内核的体验版。这篇文章描述如何移植,以及体验。该工程我目前在ubuntu16.04和ubuntu18.04上编译运行都没问题。
Rice加饭
2022/05/10
7410
如何移植RTT微内核到树莓派3B
在window上搭建树莓派4b的RT-Thread开发环境
因为前面树莓派rtt开发环境都是在Ubuntu上进行环境搭建,但是大部分人都是采用Ubuntu进行环境搭建。所以这里我也讲述一下树莓派4的RTT在windows进行开发的流程。
bigmagic
2020/05/27
1.5K0
trace32 for rt-thread support
Lauterbach是全球最大的、完整的、模块化和可升级微处理器开发工具的生产商,自1979年以来,在制造世界一流的调试器和实时跟踪方面拥有丰富经验。其中产品线中的TRACE32为大众广为所知,是众多手机厂商、芯片厂商的必备工具。
bigmagic
2021/01/08
2.3K2
树莓派4上使用uboot+tftp调试rt-thread程序
因为嵌入式往往需要把程序放到板子上去运行,而再树莓派上做rt-thread开发调试的时候,通常有三种办法。
bigmagic
2020/05/27
1.8K0
树莓派JTAG详细使用笔记
有的时候,在调试代码的时候,往往会借助一些硬件调试工具,JTAG就是很好的调试工具。下面来详细介绍一下如何在树莓派上使用JTAG进行调试。
bigmagic
2020/05/18
4.8K1
在qemu上搭建开发aarch64 rtos环境
随着芯片技术的发展,嵌入式已经不再是传统的单片机开发模式,需要一些硬件操作的板子,现在qemu这种模拟硬件的手段非常好,通过直接在电脑上仿真后,然后再移植到真实的设备上,这样大大减少了下载程序的时间,同时也方便问题的定位和分析,通过这种方式,进行业务逻辑层的开发更加的高效合理。本文主要介绍在qemu上搭建树莓派3b的开发环境。
bigmagic
2020/03/17
3.2K0
教你动手移植RT-Thread到国产MCU
摘要 现在芯片价格不断上涨,国内很多厂商也在不断的找替换方案。以ST为例,一个芯片涨了十几倍。蛋疼。。。。 最近刚好有机会拿到国产芯片MCU--兆易创新的评估板(GD32350R)。板载资源如下: 硬件描述芯片型号GD32F350R8T6CPUARM Cortex M4主频108M片内SRAM16K片内FLASH64K下载器GD-Link 拿到这个板子,首先肯定是去看看RT-THREAD是否已经包含这个BSP了,答案:没有这个GD32F350系列的BSP。那必须把他移植个RTT,然后PR一个BSP上去才
Rice加饭
2022/05/10
1.4K0
教你动手移植RT-Thread到国产MCU
在树莓派3b上运行uboot
最近想研究一下树莓派3b的一些底层驱动的代码,比较好的就是直接可以看树莓派3b的实现。因为usb驱动,网卡驱动,以及lcd驱动,都可以在uboot中直接找到。有了这些东西,对于我们直接写树莓派3b的驱动程序,提供了极大的帮助,所以现在先在树莓派3b上编译运行起来uboot。
bigmagic
2020/04/14
2.1K0
在树莓派3b上运行uboot
【完整版】使用 Rust 进行嵌入式开发
https://club.rt-thread.org/ask/article/2944.html
MikeLoveRust
2021/11/12
2.6K0
riscv32 qemu rt-thread的最小移植实现(1)
本文主要梳理riscv32在qemu的移植过程,将通过几天时间将其整理和最小系统的bring up。为了保证代码的可维护性,所有修改符合rt-thread bsp制作规范。目标就是riscv32 qemu 上运行rt-thread。以RT-Thread v4.0.3 released为工程代码的基线,进行开发移植工作。
bigmagic
2021/02/08
1.6K0
树莓派4 rt-thread实现SPI屏人机交互界面
树莓派4的rt-thread一直在不断的更新,充分挖掘可以树莓派底层硬件的特性,同时借助各种外设,使得树莓派4成为一个更加适合学习嵌入式开发,验证各种外设功能,学习操作系统的好用的平台。
bigmagic
2020/11/17
2K0
树莓派4 rt-thread实现SPI屏人机交互界面
嵌入式编程中使用qemu能够做什么?
嵌入式开发的过程中,很多时间都是要和硬件设备打交道,通过程序控制硬件的具体行为,这些往往是单片机延续下来的开发模式,在目前复杂的嵌入式系统中,很多都需要借助设计模式来进行开发,比如文件系统,网络,图形,算法等等,这些如果能够利用软件模拟器进行开发,可以大大的减少上板调试的时间。减少硬件连接的烦恼,在家也能随时分析软件代码。
bigmagic
2021/07/01
1.8K0
riscv64架构上运行rt-thread
本文主要描述如何在riscv64 的qemu上运行rt-thread。该项目大部分工作借鉴中科院的点亮计划的项目,为这些不断贡献开源的同学点赞。项目地址如下:
bigmagic
2020/12/22
1.5K0
riscv64架构上运行rt-thread
树莓派上运行RT-Thread并通过esp8266连接网络
树莓派上使用网络也是一个非常重要的功能,有了网络之后,可以在树莓派上扩展的功能更加丰富了。本文主要是通过树莓派上接8266模块,利用rt-thread的AT网络框架,实现一个可以连接上wifi的功能。下面来介绍如何让树莓派连接上网络。
bigmagic
2020/06/02
1.5K9
树莓派3B 开箱配置
最近看到淘宝推荐有树莓派3B+,价格和3B一样,增加了千兆网络,和5G Wifi,性能也有一些提升,然后就下单买了。可是没看清楚介绍,原来3B+是预售,不是马上有货,然后那家店的3B+是单独预售购买的,如果点了套装,实际上卖的是3B。于是满怀兴奋的拆开快递后,呈现一脸懵B状态。本来纠结要不要退货重买,不过想想其实性能也不是差距十分大,既然都收到了,不如先研究一番,等到19年树莓派4出的时候在多买一个。
全栈程序员站长
2022/09/12
7860
树莓派3B 开箱配置
相关推荐
rt-thread 树莓派3b 64位在qemu上运行
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档