人生似水岂无涯,浮云吹作雪,世味煮成茶...

移植 AWTK 到 SigmaStar SSD201

2022年08月03日 14:11    0 人评论    816 人阅读

前言

AWTK 全称 Toolkit AnyWhere,是 ZLG 开发的开源 GUI 引擎,旨在为嵌入式系统、WEB、各种小程序、手机和 PC 打造的通用 GUI 引擎,为用户提供一个功能强大、高效可靠、简单易用、可轻松做出炫酷效果的 GUI 引擎。 这里参考 AWTK 在 arm-linux 上的移植示例 awtk-linux-fb ,详细介绍移植 AWTK 到 SigmaStar SSD201的过程,其方法同样适用于其他 SigmaStar arm-linux 平台。

准备工作

安装 scons

由于 AWTK 使用 scons 进行编译,所有需要安装 scons:

sudo apt install scons

下载源码

1、新建目录 awtk-port-arm,在该目录下下载 AWTK 和 awtk-linux-fb 的源码:

cd awtk-port-arm
git clone https://github.com/zlgopen/awtk.git
git clone https://github.com/zlgopen/awtk-linux-fb.git

2、准备一个可以展示 AWTK GUI 酷炫功能的示例作为移植的 demo,这里使用 CleanAir.v2-Demo 示例吧!CleanAir.v2-Demo 是 awtk-examples.v2下的一个示例。将下载好的 CleanAir.v2-Demo 放到 awtk-port-arm 下。

开始移植

1、设置工具链的路径

编辑 awtk-linux-fb 目录下的 awtk_config.py,设置工具链的路径:

TSLIB_LIB_DIR=''
TSLIB_INC_DIR=''
TOOLS_PREFIX='/home/arkinux/work/toolchain/sigmastar/gcc-arm-8.2-2018.08-x86_64-arm-linux-gnueabihf/bin/arm-linux-gnueabihf-'

注:为了快速验证GUI的移植,这里暂时不配置 tslib,即定义 TSLIB_LIB_DIR 和 TSLIB_INC_DIR 为空,另外请将 TOOLS_PREFIX 修改为你实际的路径。

2、将屏参文件,DISP、PANEL初始化的模块文件放到 CleanAir.v2-Demo/src 目录下,具体如下:

CleanAir.v2-Demo
            ├── src
            │   ├── RX050I_800x480.h
            │   ├── sstardisp.c
            │   ├── sstardisp.h

其中 RX050I_800x480.h 是屏参定义文件;sstardisp.c 和 sstardisp.h 是 DISP、PANEL 初始化的模块文件。

3、在 CleanAir.v2-Demo/src/window_main.c 文件中添加以下代码:

#include "mi_gfx.h"
#include "sstardisp.h"

#define MAKE_YUYV_VALUE(y, u, v) ((y) << 24) | ((u) << 16) | ((y) << 8) | (v)
#define YUYV_BLACK MAKE_YUYV_VALUE(0, 128, 128)

static MI_DISP_PubAttr_t stDispPubAttr;

void app_sstar_init(void)
{
    stDispPubAttr.eIntfType = E_MI_DISP_INTF_LCD;
    stDispPubAttr.eIntfSync = E_MI_DISP_OUTPUT_USER;
    stDispPubAttr.u32BgColor = YUYV_BLACK;
    sstar_disp_init(&stDispPubAttr);

}

这里 app_sstar_init 函数是调用了 sstardisp.c 里面的 sstar_disp_init 对 DISP、PANEL 进行初始化。

4、在 CleanAir.v2-Demo/src/window_main.c 文件中的 application_init 函数调用 app_sstar_init:

ret_t application_init(void) {
  app_sstar_init(); // 初始化 DISP、PANEL
  system_info_set_default_font(system_info(), "default");
  window_manager_set_cursor(window_manager(), NULL);
  
  widget_t* win = window_open("home_page/home_page");
  if (win) {
    init_children_widget(win);

    change_locale("zh_CN");
    widget_t* lang_btn = widget_lookup(win, "language_btn", TRUE);
    widget_on(lang_btn, EVT_CLICK, on_language, win);

    timer_add(on_systime_update, win, 1000);
    on_switch(win, NULL);
    on_auto(win, NULL);
    return RET_OK;
  }
  return RET_FAIL;
}

5、修改 SConscript

要使代码可以正常编译,还需要修改 SConscript 文件:

import os
import sys
import awtk_config as awtk

env=DefaultEnvironment().Clone()
BIN_DIR=os.environ['BIN_DIR']

SIGMASTAR_SDK_DIR='/home/arkinux/work/sigmastar/TAKOYAKI_DLS00V050/'
LIBS = awtk.STATIC_LIBS + ['mi_sys', 'mi_common', 'mi_disp', 'mi_panel', 'mi_ao', 'mi_divp', 'mi_gfx'];
LIBPATH = awtk.LIBPATH + [SIGMASTAR_SDK_DIR + 'project/release/nvr/i2m/common/glibc/8.2.1/mi_libs/dynamic', SIGMASTAR_SDK_DIR + 'project/release/nvr/i2m/common/glibc/8.2.1/ex_libs/dynamic']
CPPPATH = awtk.CPPPATH + [SIGMASTAR_SDK_DIR + 'project/release/include', SIGMASTAR_SDK_DIR + 'project/kbuild/4.9.84/i2m/include/uapi/mstar']

src_files = Glob('*.c')

env.Program(target = os.path.join(BIN_DIR, 'demo'), source = src_files, CPPPATH = CPPPATH, LIBPATH=LIBPATH, LIBS=LIBS);

6、编译

进入 awtk-linux-fb 目录,指定 CleanAir.v2-Demo 进行编译:

cd awtk-linux-fb
scons APP=../CleanAir.v2-Demo

生成结果为 build/bin 文件夹下的 demo 文件。

7、生成发布包

这里需要加入资源文件夹参数,指向应用程序 assets 的父目录:

./release.sh ../CleanAir.v2-Demo/res demo

8、运行测试

把 release.tar.gz 上传到开发板,并解压,然后运行:

./release/bin/demo

注:上传文件到开发板的方法

(1)、如果开发板支持 ssh,可以使用 scp 命令上传文件或文件夹,比如上传文件:

# 上传文件 release.tar.gz 到 /appconfigs 目录
scp release.tar.gz root@192.168.0.103:/appconfigs

(2)、将 release.tar.gz 文件拷贝到U盘里,将U盘挂载到开发板的 mnt 目录下:

mount /dev/sda1 /mnt

然后直接解压并运行。


如果文章对您有所帮助, 请随意打赏! 您的支持将鼓励我写出更好的文章!

发表评论 已发布 0