韦东山 数码相框 项目学习 (七)awtk的移植到百问网STM32MP157

awtk是国内一个优秀的开源GUI引擎,gitee网址在这里

由于LVGL无法直接显示JPG和PNG等格式的图片,折腾起来也较为麻烦,所以尝试了使用AWTK。

一 预备知识

(一)scons

awtk使用的是scons作为构建工具,scons的脚本分为两种,一种是SConstruct,一种是SConstript。举个例子,我们交叉编译一个helloworld程序,分为两部分,第一部分是设置交叉编译工具链,配置各种编译选项等等,这一部分由我们的SConstruct文件负责,第二部分是根据配置文件进行编译,这一部分就交给了我们的SConstript文件。
所以,我们要在SConstruct文件中设置我们的交叉编译环境,在SConstript文件中根据SConstruct设置的环境进行实际的编译。

(二)Python

还是scons的问题,scons使用的两种脚本,使用的都是python语言,所以需要一定的python基础

二 下载源码

这里我们首先需要下载两个仓库,一个是awtk,一个是awtk-linux-fb
下载好之后得到如下两个文件夹

关于如何使用awtk-linux-fb这个步骤,在官方gitee仓库里已经讲得很详细,这里我当前完成的目标是把awtk里面的demo提取出来到一个自定义的文件夹,并且成功编译运行

三 编译官方demo

(一)设置TSLIB环境变量以及交叉编译工具链

根据awtk官方仓库的步骤安装好下相应的工具,然后把这两个文件上传到服务器。
把这两个文件夹上传到服务器,进入到awtk-linux-fb目录下,编辑awtk_config.py文件,在#for prebuild tslib 下面添加如下几行(注意,这里根据自己的实际情况配置)

TSLIB_LIB_DIR='/home/tao/learn/100ask/100ask_stm32mp157_pro-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/arm-buildroot-linux-gnueabihf/sysroot/usr/lib'
TSLIB_INC_DIR='/home/tao/learn/100ask/100ask_stm32mp157_pro-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/arm-buildroot-linux-gnueabihf/sysroot/usr/include'
TOOLS_PREFIX='/home/tao/learn/100ask/100ask_stm32mp157_pro-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/bin/arm-buildroot-linux-gnueabihf-'

可以不用注释前面的直接添加,直接添加会覆盖前面的值,然后接着往下看,如果有覆盖这三个变量的,就把那些代码注释掉
到这里可以保存退出了。

(二) 编译官方demo

在上一步设置好交叉编译工具链之后,在awtk-linux-fb目录下执行

scons

随后,它会进入到当前目录下的SConstruct,根据这个文件进行编译,来看看它的代码,完整代码在附录给出

import awtk_config as awtk

首先是包含当前目录下的awtk_config.py,就是我们上面修改的那个文件,在这里面配置了一些环境变量之类的,然后在SConstruct中,我们可以使用awtk_config.py里面配置好的,也可以使用我们自定义的配置。
接着往下看,可以看到下面这一段代码

env = DefaultEnvironment(CCFLAGS = awtk.CCFLAGS + APP_CCFLAGS, ENV = os.environ,CFLAGS = awtk.CFLAGS,CC=awtk.CC,CXX=awtk.CXX,LD=awtk.LD,AR=awtk.AR,RANLIB=awtk.RANLIB,STRIP=awtk.STRIP,LIBS = awtk.LIBS,LIBPATH = awtk.LIBPATH,CPPPATH = awtk.CPPPATH + [awtk.joinPath(awtk.TK_ROOT, 'res')],LINKFLAGS = awtk.LINKFLAGS,OS_SUBSYSTEM_CONSOLE=awtk.OS_SUBSYSTEM_CONSOLE,OS_SUBSYSTEM_WINDOWS=awtk.OS_SUBSYSTEM_WINDOWS
)

这里是应用环境变量,当设置这个DefaultEnvironment之后,下面调用的SConscript(SConscriptFiles)会进入到指定的目录去编译,当编译这些目录的时候,就会使用这里设置的环境

在应用环境变量之前,注意到这一段代码

APP_ROOT = ARGUMENTS.get('APP', '')
if len (APP_ROOT) > 0:app_sconstruct = awtk.joinPath(APP_ROOT, 'SConstruct')if not os.path.exists(APP_ROOT) or not os.path.exists(app_sconstruct):print('APP: ' + APP_ROOT + ' not found!')exit(0)

在awtk-linux-fb目录下执行scons时,默认是去编译awtk里面的demo,这一段代码就是用来区分是编译官方demo还是我们自定义的demo
用法在awtk-linux-fb仓库下也有提到

scons APP=../awtk-examples/HelloWorld.Xml-Demo

APP等于我们的自定义的demo路径,如果这里赋值了,它就不会去编译官方的demo,反而回去编译我们指定的工程。
这里的awtk-examples是另外的一个仓库,给出了一些awtk的例子,官方已经把它放到了软件里面去了,所以官方仓库是空的,不过可以去别的大佬的仓库下载,我下载的是这一个
有点尴尬的是,那款软件登录不了,所以也就下载不到最新的examples,而运行上面的命令是无法直接编译通过的。
刚开始不了解scons的过程,花了挺长时间去搞清楚这个的。

新建一个与上面两个目录同级的awtk-learn-demo目录
在awtk-learn-demo下新建01_helloworld目录,这个就是我们的第一个demo目录

把awtk-examples里的HelloWorld-Demo目录下的assets_gen.sh、assets_gen.bat、SConstruct复制到01_helloworld下面,之所以只复制这三个是看SConstruct文件,里面在获取awtk的配置时需要用到assets_gen脚本,这里面也需要做一处修改,把…/…/awtk修改成…/…/awtk-linux-fb,这样当编译我们这个demo时,就会去awtk-linux-fb里面找了。

在01_helloworld下新建一个bin目录

这与在awtk-linux-fb里面直接运行scons编译官方的demo不同,编译我们的demo是在SConscript(SConscriptFiles)之后进行的,而这时的环境变量已经失效了,所以需要重新包含一下awtk_config.py和在01_helloworld下的SConstruct重新配置一下环境。

然后是把awtk目录下的res复制到01_helloworld目录下,还有demos复制到01_helloworld目录下并且重命名为src,关于修改这里不过多赘述,可以参考上传的完整demo。然后对比一下HelloWorld-Demo就很明显了。

(四)demo的使用

awtk-learn-demo压缩包
下载压缩包,并且解压到和awtk、awtk-linux-fb同级的目录下,进入到awtk-linux-fb目录下,执行scons APP=…/awtk-learn-demo/01_helloworld即可编译

韦东山 数码相框 项目学习 (七)awtk的移植相关推荐

  1. 韦东山 数码相框 项目学习(四)简易的TXT文档显示器(电纸书)

    韦东山 数码相框 项目学习(四)简易的TXT文档显示器(电纸书) 有了前面关于LCD.freetype的学习,已经可以开始TXT文档显示器的编写了.整个实现过程并不复杂,必须要弄清楚的是freetyp ...

  2. 韦东山 数码相框 项目学习(五)libjpeg-turbo的移植

    韦东山 数码相框 项目学习(五)libjpeg-turbo的移植 效果图 能够在100ask STM32MP157上显示一张JPG图片 一.下载源码 首先去libjpeg-turbo官网下载源码,这里 ...

  3. 韦东山数码相框项目进度一

    数码相框进度一 项目需求分析 程序架构 点阵字符显示 参考文章: 韦东山数码相框任务需求分析 项目需求分析        程序架构 1. 为了提高程序的复用性,将应用程序分为两个进程,进程之间通过so ...

  4. 【学习笔记】韦东山freertos直播学习笔记

    韦东山FreeRTOS学习 如果刚好有大佬看到发现笔记中有什么写错了的,欢迎大佬指点,我十分乐意受到大佬的指点哈哈哈,顺便我还想问一下csdn的编辑器有没有保存的快捷键啊,CTRL+S好像没有用啊. ...

  5. 韦东山第一期学习笔记——重定位

    重定位 说明 必须知道的几个概念 什么是代码重定位? 什么是位置无关码 什么是运行地址 为什么要代码重定位? nand flash启动的情况 nor flash启动的情况 两种方式的重定位 代码重定位 ...

  6. 开发板、Windows、Ubuntu三者互联——韦东山嵌入式Linux学习笔记08

    实验环境: 1. Windows7 2. VMware12.0+Ubuntu 3. JZ2440 按理说,在物理机上安装Ubuntu操作系统是比较推荐的方法.不过,因为windows上有很多好用的工具 ...

  7. win7下不能使用dnw烧写的解决办法——韦东山嵌入式Linux学习笔记05

    本文实验环境: 1. windows 7(64bit) 2. JZ2440 一. 问题的提出--没有驱动 假设板子的 Nor Flash 上已经烧好了 u-boot,那么如何通过 u-boot 的US ...

  8. 烧写文件系统——韦东山嵌入式Linux学习笔记11

    本文实验环境: 1. windows 7(64bit) 2. JZ2440(V2) 使用 u-boot 烧写文件系统,一般有两种方法. 1. 通过USB下载功能 2. 通过TFTP功能 通过USB下载 ...

  9. 使用 u-boot 烧写内核——韦东山嵌入式Linux学习笔记10

    本文实验环境: 1. windows 7(64bit) 2. JZ2440(V2) 使用 u-boot 烧写内核,一般有两种方法. 1. 通过USB下载功能 2. 通过TFTP功能 通过USB下载功能 ...

最新文章

  1. webservice-WebService试题
  2. Intel PAUSE指令变化影响到MySQL的性能,该如何解决?
  3. CString类(转)
  4. fopen的路径怎么写_用C++写光线追踪:单根光线的渲染
  5. bzoj1024 [SCOI2009]生日快乐 结论+dfs
  6. OpenShift 4 - 使用Prometheus监控Node节点
  7. Django表单字段汇总
  8. Inter core i7处理器中(x86架构)驱动开发:关于APCI Hardware ID的描述
  9. mysql数据库druid密码加密_Spring+mysql+druid对数据库连接的用户名密码加密-Go语言中文社区...
  10. NLP工具——doccano标注系统自动标注功能使用
  11. linux安装程序企鹅,Linux-小企鹅输入法的安装与使用
  12. background 背景图
  13. Azure媒体服务的Apple FairPlay流功能正式上线
  14. Python代码太长换行
  15. C++ unordered_map和unordered_set的使用
  16. VisualGDB的基本使用
  17. ppp协议 java_PPP协议的应用-网络协议
  18. 基于Autosar 架构设计思想
  19. 大学期间如何自学编程?
  20. 纺织印花胶浆和色浆的区别?

热门文章

  1. a76比a73强多少_ARM的Cortex-A76性能提升35%又怎样?还要被去年的苹果A11虐
  2. 微信小程序 对onShareAppMessage进行封装,分为分享到个人和分享到群
  3. 流程图怎么画?如何轻松绘制流程图
  4. QQ发送PDF为什么显示服务器,qq上传输文件默认发送在线文件设置.pdf
  5. Siamese Network Triplet NetWork
  6. Kotlin 中的suspend 关键字
  7. 深度学习基础之代价函数
  8. 2015 - 2016
  9. 如何用Python瞬间获取LOL官网全英雄皮肤的图片?
  10. 基于Vue+ElementUI+Springboot劳动仲裁法院纠纷调解系统