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

1.本文概述

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

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

2.资源准备

硬件资源

树莓派3b+hdmi屏

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

软件资源

获取rtt的源代码:

https://github.com/RT-Thread/rt-thread

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

rt-thread/bsp/raspberry-pi/raspi3-64/

接着获取lvgl的源代码

https://github.com/littlevgl/lvgl

3.上手体验

第一步:下载源代码

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即可开始编译。

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。建立如下的运行脚本即可。

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脚本

# 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下添加下面脚本

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.chttps://github.com/littlevgl/lv_examples的demo程序,在lv_apps目录下。

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

这部分完成就可以了。

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

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以及学习rtt了。

树莓派3b在rt-thread上移植LittlevGL的更多相关文章

  1. 树莓派3B+上运行.Net Core项目

    最近买了个树莓派3B+,准备把自己写的一个.Net Core爬虫挂在上面跑 买之前没有想到树莓派因为是今年新出的,导致驱动以及系统啥的都不是很完善,导致走了很多弯路,早知道买树莓派3就不用那么多折腾了 ...

  2. 在树莓派3B上安装node.js

    本文主讲如何在树莓派3B上安装node.js 环境描述1. 树莓派安装了`2016-11-25-raspbian-jessie-lite`(PS:在此版本的镜像中,默认禁用了ssh,在烧录好镜像之后, ...

  3. 树莓派3B的食用方法-1(装系统 网线ssh连接)

    首先要有一个树莓派3B , 在某宝买就行, 这东西基本上找到假货都难,另外国产和英国也没什么差别,差不多哪个便宜买哪个就行. 不要买店家的套餐,一个是配的东西有些不需要,有的质量也不好. 提示:除了G ...

  4. 树莓派3B+通过路由器进SSH和VNC

    1.打开树莓派官网 www.raspberrypi.org 选择 ”Raspbian Stretch with desktop and recommended software“ 并下载 镜像包含推荐 ...

  5. 树莓派3b+ Ubuntu 16.04 MATA系统 ssh远程登陆后修改主机名、用户密码和用户名

    写在前面: 刚刚开始写博客,记录下自己的学习过程,备忘. 最近在使用树莓派做智能小车的开发,使用的是树莓派3b+,安装的是Ubuntu 16.04 MATA 系统,安装系统后需要修改主机名,登陆密码以 ...

  6. 树莓派3b安装Nginx和php7和百度语音合成模块

    1.安装sox系统mp3音频播放模块(项目需要) sudo apt-get install lame sudo apt-get install sox sudo apt-get install lib ...

  7. 树莓派3B+首次登陆通过网络

    树莓派3B+默认串口不能登录,即使可使用可需要通过连线方式连接,如何才能直接通过网络ssh登录树莓派呢? 串口问题及使用 树莓派3的UART串口的使用问题,该串口问题的官方反馈及回复请参考这两篇官方博 ...

  8. 树莓派3B+简单入门

    刚刚入手一个树莓派3B+,树莓派板子.3.5寸电阻触摸屏.16G内存卡.外壳电源等一系列配件一共花了360大洋,这东西真不便宜.这里介绍一下系统安装.3.5寸屏幕安装.VNC远程屏幕. 先给大家看一下 ...

  9. 树莓派3B/3B+ 清华镜像系统和安装中文输入法Fcitx及Google拼音输入法

    你还在为树莓派无法安装中文输入法而到处找教程吗? 你还在为树莓派每次下载都要远隔重洋获取资源,龟速下载而烦恼吗? 为了解决这个问题,在这篇树莓派教程中,我将手把手叫你怎样安装 清华镜像系统和中文输入法 ...

随机推荐

  1. Hbase 整合 Hadoop 的数据迁移

    上篇文章说了 Hbase 的基础架构,都是比较理论的知识,最近我也一直在搞 Hbase 的数据迁移, 今天就来一篇实战型的,把最近一段时间的 Hbase 整合 Hadoop 的基础知识在梳理一遍,毕竟 ...

  2. python中的函数及作用域的理解

    内置函数 常用的几个内置函数 function des len 求长度 min 求最小值 max 求最大值 sorted 排序 reversed 反向 sum 求和 进制转换函数 function d ...

  3. coding++:Idea设置Java类注释模板和方法注释模板

    设置类注释模板 1):选择File–>Settings–>Editor–>File and Code Templates–>Includes–>File Header. ...

  4. 【译】Java SE 14 Hotspot 虚拟机垃圾回收调优指南

    原文链接:HotSpot Virtual Machine Garbage Collection Tuning Guide,基于Java SE 14. 本文主要包括以下内容: 优化目标与策略(Ergon ...

  5. 【PHP源码】PHP 函数调用

    title: [PHP 源码]PHP 函数调用 date: 2020-03-30 23:25:00 updated: 2020-04-04 19:57:00 tags: PHP 源码 想法 我以前对于 ...

  6. SaaS架构(一) 弱后端强前端的尝试和问题

    最近在公司项目组内部沙龙的时候,提出一个"弱后端强前端"的概念,其实已经在项目内部新的服务有做试点,我们整个SaaS系统,后端主要是JAVA构建,前端是Angular构建.&quo ...

  7. 版本控制,svn基础,实战案例,RPM打包

                                                   版本控制,svn基础,实战案例,RPM打包 案例1:Subversion基本操作 案例2:使用Subver ...

  8. python--算法相关

    一.时间复杂度排序 1.O(1) < O(logn) < O(n) < O(nlogn) < O(n^2) < O(n^3) < O(2^n) < O(n!) ...

  9. mpvue微信小程序怎么写轮播图,和官方微信代码的差别

    目前用mpvue很多第三方的ui库是引入不了的,因为它不支持含有dom操作. 那我们要做轮播图的话一个是手写另外一个就是用小程序的swiper组件了: 官方代码: <swiper indicat ...

  10. sqlchemy查询的其他操作

    sqlalchemy的数据查询排序 1 .正序排序:session.query(model).order_by(model.attr).all() session.query(model).order ...