移植MiniGUI到JZ2440

Linux上miniGUI的移植详细方法 手把手教你Linux上miniGUI的移植详细方法,你一定学得会。呵呵。 立即下载

优快云仅用于增加百度收录权重,排版未优化,日常不维护。请访问:www.hceng.cn 查看、评论。
本博文对应地址: https://hceng.cn/2017/05/26/移植MiniGUI到JZ2440/#more

尝试将MiniGUI到JZ2440上。

移植所需文件:

文件包名作用
libminigui-1.6.10.tar.gz MiniGUI开发库
minigui-res-1.6.10.tar.gzMiniGUI资源文件
mg-samples-1.6.10.tar.gzMiniGUI示例程序
tslib-1.4.tar.gz触摸屏功能

1.移植MiniGUI

1.1 解压、编译MiniGUI开发库

{% codeblock lang:shell%}
tar xzf libminigui-1.6.10.tar.gz
cd libminigui-1.6.10/
mkdir tmp
./configure CC=arm-linux-gcc --prefix=${PWD}/tmp --build=i386-linux --host=arm-linux --target=arm-linux
make
make install
{% endcodeblock %}
  完成上面操作,即可在tmp目录下生成以下文件:

  将生成的/lib下所有文件(和共享库相关)拷贝到开发板/lib目录下,将生成的/etc下的MiniGUI.cfg也拷贝到开发板/etc目录下:
{% codeblock lang:shell%}
cp –rfd ./lib/* /work/hceng/nfs_rootfs/lib
cp ./etc/* /work/hceng/nfs_rootfs/etc
{% endcodeblock %}

1.2 解压MiniGUI资源文件

{% codeblock lang:shell%}
tar xzf minigui-res-1.6.10.tar.gz
cd minigui-res-1.6.10/
{% endcodeblock %}
  修改config.linux,指定生成文件路径:

  编译生成:
{% codeblock lang:shell%}
make install
{% endcodeblock %}
  此时会在指定的/tmp目录下生成以下文件:

  这些文件包含了MiniGUI会使用到的资源,包括基本字体、图标、位图和鼠标光标等,
将这些文件全部复制到开发板的/usr/local/lib/minigui/res/路径下,这个路径是前面MiniGUI.cfg指定的。

1.3 编译MiniGUI示例程序

解压、配置、编译:
{% codeblock lang:shell%}
tar xzf mg-samples-1.6.10.tar.gz
cd mg-samples-1.6.10.tar.gz/
./configure CC=arm-linux-gcc --build=i386-linux --host=arm-linux -target=arm-linux CFLAGS=-I/work/minigui/libminigui-1.6.10/tmp/include LDFLAGS=-L/work/minigui/libminigui-1.6.10/tmp/lib
make
make install
{% endcodeblock %}
  此时会在/src目录下生成示例程序:

  复制示例程序到开发板里面去,注意有些程序需要本目录下的图片文件,需要一同拷贝过去。这里以helloworld为例:
{% codeblock lang:shell%}
cp helloworld /work/hceng/nfs_rootfs/
{% endcodeblock %}

1.4 其他修改

  • 修改前面复制到开发板/etc目录下的MiniGUI.cfg以适应JZ2440。
  • 在开发板的/etc目录下建立ld.so.conf文件,并添加如下内容:
    {% codeblock lang:shell%}
    /usr/local/lib
    /usr/lib
    /lib
    {% endcodeblock %}
  • 在/etc/init.d/rcS脚本文件里添加如下内容(非必需):
    {% codeblock lang:shell%}
    /bin/ln –s /dev/vc/0 /dev/tty0
    {% endcodeblock %}
      移植MiniGUI完成,运行应用程序:

2.移植tslib

2.1 安装一些工具

{% codeblock lang:shell%}
sudo apt-get install autoconf
sudo apt-get install automake
sudo apt-get install libtool
{% endcodeblock %}

2.2 解压、编译

{% codeblock lang:shell%}
tar xzf tslib-1.4.tar.gz
cd tslib
./autogen.sh

mkdir tmp
echo “ac_cv_func_malloc_0_nonnull=yes” >arm-linux.cache
./configure --host=arm-linux --cache-file=arm-linux.cache --prefix=$(pwd)/tmp
make
make install
{% endcodeblock %}

2.3 安装

{% codeblock lang:shell%}
cd tmp
cp * -rfd /work/hceng/nfs_rootfs
{% endcodeblock %}

2.4 修改/etc/ts.conf第1行(去掉#号和第一个空格)

{% codeblock lang:shell%}

module_raw input

{% endcodeblock %}
  改为:
{% codeblock lang:shell%}
module_raw input
{% endcodeblock %}

2.5 在开发板设置环境变量

{% codeblock lang:shell%}
export TSLIB_TSDEVICE=/dev/event0
export TSLIB_CALIBFILE=/etc/pointercal
export TSLIB_CONFFILE=/etc/ts.conf
export TSLIB_PLUGINDIR=/lib/ts
export TSLIB_CONSOLEDEVICE=none
export TSLIB_FBDEVICE=/dev/fb0
{% endcodeblock %}

2.6 运行校准示例程序

{% codeblock lang:shell%}
ts_calibrate
{% endcodeblock %}

如果在运行程序的时候,出现提示:
{% codeblock lang:shell%}
selected device is not a touchscreen I understand
{% endcodeblock %}
  有显示,但无法触屏,可能是编译器版本和内核版本不一致,解决方法如下:

修改编译器的input.h:
{% codeblock lang:shell%}
cd /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/usr/include/linux
sudo vim input.h
{% endcodeblock %}
  将
{% codeblock lang:c%}
#define EV_VERSION 0x010000
{% endcodeblock %}
  改为:
{% codeblock lang:c%}
#define EV_VERSION 0x010001
{% endcodeblock %}
  重新进行前面的编译即可,编译后,记得改回编译器的版本。


3.MiniGUI和tslib链接

此时虽然分别移植好了MiniGUI和tslib,但触屏并不能正常的控制GUI,需要进行将
MiniGUI和tslib进行链接。

  • 使用MiniGUI 的 IAL 引擎,修改/libminigui-1.6.10/src/ial/下的dummy.c成如下:
    {% codeblock lang:c%}
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <unistd.h>
    #include <fcntl.h>
    #include “common.h”
    #include “tslib.h”

#ifdef _DUMMY_IAL

#include <sys/ioctl.h>
#include <sys/poll.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <linux/kd.h>

#include “ial.h”
#include “dummy.h”

#ifndef _DEBUG
#define _DEBUG // for debugging
#endif

/* for storing data reading from /dev/touchScreen/0raw */
typedef struct {
unsigned short pressure;
unsigned short x;
unsigned short y;
unsigned short pad;
} TS_EVENT;

static unsigned char state [NR_KEYS];
static int mousex = 0;
static int mousey = 0;
static TS_EVENT ts_event;
static struct tsdev *ts;

/************************ Low Level Input Operations *********************/
/

  • Mouse operations – Event
    */
    static int mouse_update(void)
    {
    return 1;
    }

static void mouse_getxy(int x, int y)
{
if (mousex < 0) mousex = 0;
if (mousey < 0) mousey = 0;
if (mousex > 639) mousex = 639;
if (mousey > 479) mousey = 479;

#ifdef _DEBUG
// printf (“mousex = %d, mousey = %d/n”, mousex, mousey);
#endif

   *x = mousex;
   *y = mousey;

}

static int mouse_getbutton(void)
{
return ts_event.pressure;
}

#ifdef _LITE_VERSION
static int wait_event (int which, int maxfd, fd_set *in, fd_set *out, fd_set *except,
struct timeval *timeout)
#else
static int wait_event (int which, fd_set *in, fd_set *out, fd_set *except,
struct timeval *timeout)
#endif
{
struct ts_sample sample;
int ret = 0;
int fd;
fd_set rfds;
int e;

   if (!in) {
          in = &rfds;
          FD_ZERO (in);
   }

fd = ts_fd(ts);

   if ((which & IAL_MOUSEEVENT) && fd >= 0) {
          FD_SET (fd, in);

#ifdef _LITE_VERSION
if (fd > maxfd) maxfd = fd;
#endif
}
#ifdef _LITE_VERSION
e = select (maxfd + 1, in, out, except, timeout) ;
#else
e = select (FD_SETSIZE, in, out, except, timeout) ;
#endif

   if (e > 0) {

        // input events is coming
         if (fd > 0 && FD_ISSET (fd, in)) {
               FD_CLR (fd, in);
               ts_event.x=0;
              ts_event.y=0;

              ret = ts_read(ts, &sample, 1);
              if (ret < 0) {
                    perror("ts_read()");
                    exit(-1);
              }

              ts_event.x = sample.x;
              ts_event.y = sample.y;
              ts_event.pressure = (sample.pressure > 0 ? 4:0);

           //   if (ts_event.pressure > 0 &&
                 if((ts_event.x >= 0 && ts_event.x <= 639) &&
                    (ts_event.y >= 0 && ts_event.y <= 479)) {
                    mousex = ts_event.x;
                     mousey = ts_event.y;
               // printf("ts_event.x is %d, ts_event.y is %d------------------------------------->/n",ts_event.x ,ts_event.y);
               }

//#ifdef _DEBUG
// if (ts_event.pressure > 0) {
// printf (“mouse down: ts_event.x = %d, ts_event.y = %d,ts_event.pressure = %d/n”,ts_event.x,ts_event.y,ts_event.pressure);
// }
//#endif
ret |= IAL_MOUSEEVENT;

              return (ret);
         }

  }
   else if (e < 0) {
         return -1;
  }

   return (ret);

}BOOL InitDummyInput(INPUT* input, const char* mdev, const char* mtype)
{
char *ts_device = NULL;

   if ((ts_device = getenv("TSLIB_TSDEVICE")) != NULL) {

        // open touch screen event device in blocking mode
        ts = ts_open(ts_device, 0);
  } else {

#ifdef USE_INPUT_API
ts = ts_open("/dev/input/0raw", 0);
#else
ts = ts_open("/dev/touchscreen/ucb1x00", 0);
#endif
}
#ifdef _DEBUG
printf (“TSLIB_TSDEVICE is open!!!/n”);
#endif
if (!ts) {
perror(“ts_open()”);
exit(-1);
}

  if (ts_config(ts)) {
        perror("ts_config()");
        exit(-1);
   }

  input->update_mouse = mouse_update;
  input->get_mouse_xy = mouse_getxy;
  input->set_mouse_xy = NULL;
  input->get_mouse_button = mouse_getbutton;
  input->set_mouse_range = NULL;

  input->wait_event = wait_event;
  mousex = 0;
  mousey = 0;
  ts_event.x = ts_event.y = ts_event.pressure = 0;

   return TRUE;

}

void TermDummyInput(void)
{
if (ts)
ts_close(ts);
}

#endif /* _DUMMY_IAL */
{% endcodeblock %}

  • 指定tslib 相关的头文件和共享库文件重新编译libminigui:
    {% codeblock lang:shell%}
    cd /work/minigui/libminigui-1.6.10/
    ./configure CC=arm-linux-gcc --prefix=${PWD}/tmp --build=i386-linux --host=arm-linux --target=arm-linux CFLAGS="-I/work/minigui/tslib/tmp/include -L/work/minigui/tslib/tmp/lib -lts"
    {% endcodeblock %}
      将新生成的/tmp/lib下的文件覆盖掉开发板原来的文件:
    {% codeblock lang:shell%}
    cp –rfd ./lib/* /work/hceng/nfs_rootfs/lib
    {% endcodeblock %}

  • 因为共享文件变了,这里重新编译示例程序libminigui:
    {% codeblock lang:shell%}
    ./configure CC=arm-linux-gcc --build=i386-linux --host=arm-linux -target=arm-linux CFLAGS=-I/work/minigui/libminigui-1.6.10/tmp/include LDFLAGS=-L/work/minigui/libminigui-1.6.10/tmp/lib
    {% endcodeblock %}
      再将生成的应用程序复制到开发板重新运行:
    {% codeblock lang:shell%}
    cp painter /work/hceng/nfs_rootfs/
    {% endcodeblock %}
      在开发板运行:
    {% codeblock lang:shell%}
    ./ painter
    {% endcodeblock %}

MiniGUI图形库在嵌入式Linux平台上的移植与实现. 立即下载

相关推荐

qPCRtools | 神仙R包分分钟搞定你的qPCR实验结果!~

1写在前面 不知道大家都是怎么完成qPCR的计算的,在不会R的时候,我是用一个祖传的Excel表进行计算的。🤣 但是,一直有个缺点,如果需要计算的量比较大时,就不方便了,去搜了一下文献,发现了一个最近发表的R包,不仅可以计算反转录的RNA体积,还可以帮助选择定量方法,简直是神仙R包,本期就介绍一下它的使用吧。🥰 感谢原作者的开发,嘿嘿,文末有引用方法。👀 2用到的包 rm(list = ls())library(tidyverse)library(ggsci)library(qPCRtools)librar

m0_72224305的博客 3983

HI3521A/HI3520DV300移植MiniGUI

不知是新手还是什么原因,MiniGUI的安装和移植显得特别的麻烦,前前后后折腾了好几天。MiniGUI自带了hi3510和hi3560的编译参数,如果要移植海思其他的平台还是需要修改不少东西。这里记录移植到Hi3521A/Hi3520DV300的一个过程,以供参考。 前期准备: 先确定设备能正常运行显示屏能够正常显示,使用海思sample提供的hifb,看设备是否能够正常显示。....................................

Biao 4002

cadence—virtuosoic617的使用技巧收集区

cadence使用

qq_33599939的博客 3万+

Linux miniGUI移植分析

在进行Linux下的图形系统编程时,我们常常会遇到以下这些概念:Framebuffer, X11, SDL,DFB, miniGUI, OpenGL,QT, GTK,KDE, GNOME等等。

l00102795的博客 1454

传输线的特征阻抗

信号源内阻与所接传输线的特性阻抗大小相等且相位相同,或传输线的特性阻抗与所接负载阻抗的大小相等且相位相同,分别称为传输线的输入端或输出端处于阻抗匹配状态,简称为阻抗匹配。否则,便称为阻抗失配。有时也直接叫做匹配或失配。指一个电路输入端的等效阻抗。在输入端上加上一个电压源U,测量输入端的电流I,则输入阻抗Rin就是U/I。可以把输入端想象成一个电阻的两端,这个电阻的阻值,就是输入阻抗。- 对于电压驱动的电路,输入阻抗越大,则对电压源的负载就越轻,因而就越容易驱动,也不会对信号源有影响;

学海无涯的专栏 4462

Titans:谷歌新型神经记忆架构,突破 Transformer 长序列处理的瓶颈

Titans 是谷歌推出的新型神经网络架构,通过神经长期记忆模块突破 Transformer 在处理长序列数据时的瓶颈,支持并行计算,显著提升训练效率。

士多啤梨先生の博客 990

在海思hi3520上移植minigui3.0

首先从官网上下载以下几个包:libminigui-gpl-3.0.12.tar.gz,minigui-res-be-3.0.12.tar.gz,mg-samples-3.0.12.tar.gz,zlib-1.2.2.tar.gz,libpng-1.2.37.tar.gz,libmgplus-1_2_4.tar.gz,freetype-2.3.9-fm20100818.tar.gz,jpegsrc.

曾经沧海 3718

在macOS上使用GitHub的超详细指南

GitHub:免费的远程仓库,可用来托管自己的开源项目。它利用了Git强大的克隆和分支功能,让我们参与别人的开源项目和让别人参与自己的开源项目变得简单高效。

Mars的博客 3390

minigui 移植

自定义小键盘对MINIGUI1.6.2的支持 http://blog.chinaunix.net/uid-20725756-id-767118.html

weixin_44740398的博客 262

【WRF-FDDA】观测 Obs nudging 的配置与使用说明(中)

WRF-FDDA

WW、forever的博客 280

华为OD机试真题 新系统2026-04-15 Java&Go 实现【小猫钓鱼纸牌游戏】

有两名玩家甲和乙,他们玩一种“小猫钓鱼”扑克牌游戏。扑克牌为A、2、3、....J、Q、K,不考虑花色都用1-13来表示,然后给甲,乙两人各发n张牌,按给定顺序排成队列,这些牌背面朝上,正面朝下放置,队列的第一个元素是背面的第一张牌。 游戏规则如下:

MISAYAONE的博客 350

hi-3531a:minigui3.2.0移植

一、移植资源包介绍: 作者:gavinpong,相关源码可以在github仓库下载到,欢迎fork 与 交流:https://github.com/GavinPong 所有组件都可以在minigui官网上下载到:http://www.minigui.com/zhcn/download/ 下载miniGUI3.2.0组件 简单介绍一下各个库: freetype:字体 qvfb2和gvfb...

u012125696的专栏 1101

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

移植MiniGUI 3.0和tslib到JZ2440

最近尝试移植Mini GUI到JZ2440,过程中虽然参考他人过程,但仍有一些小问题出现。为了便于以后移植和其他玩家参照,下面将过程总结如下。1、下载MiniGUI 3.0资源,并建立工作目录登录网址:http://www.minigui.org/en/download/下载,假设下载的文件都存放在“/home/book/Downloads”中。建立工作目录“/opt/mini_GUI/arm/c...

boayel的博客 369

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

UE5地形创建:利用Mapbox与Landscaping插件实现真实地理数据导入与艺术化编辑

在游戏开发和数字孪生项目中,大规模地形的创建是核心挑战之一。传统方法效率低下,而直接导入高精度地理数据又面临优化难题。其技术原理在于构建一个从地理信息系统到实时渲染引擎的桥梁,通过数据格式转换、坐标系统一和渲染管线适配,将真实世界的地理骨架转化为可交互的虚拟环境。这一流程的技术价值在于显著提升了原型构建速度与成品的可信度,实现了“源于真实,高于真实”的创作自由。其核心应用场景包括开放世界游戏地图制作、城市规划的数字孪生演示以及影视虚拟场景预览。本文聚焦于利用**Landscaping插件**作为关键枢纽,无

weixin_34406086的博客 350

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

minigui编译移植

Minigui1.6.10 支持单色LCD 交叉编译

帅的没拼音 843

嵌入式Linux环境下MiniGUI的研究与移植

 作者:小野狼<br />--  发布时间:2009-8-31 16:31:10<br />--  嵌入式Linux环境下MiniGUI的研究与移植<br /><br /> 前言<br /> 近年来随着嵌入式设备与市场需求的广泛结合,手机、PDA、DVD播放机等产品的应用对可视化操作界面的简洁和方便提出了更高的要求,这都需要一个稳定可靠的高性能GUI系统来提供支持。图形用户界面(Graphic User Interface,简称GUI)的广泛流行是当今计算机技术的重要成就之一,它极大地方便了非专业用户的使用

嵌入精灵 1338

MiniGUI移植总结

需准备的软件包:libminigui-1.6.x-linux.tar.gz           //开发库minigui-res-1.6.tar.gz                  //资源文件,如bmp,font,icon 等minigui-dev-1.6.2-for-win32          //用于在windows VC开发的程序包下载地址:www.minigui.o

sK.坤 5783

我的MiniGUI移植之路

<br />作者:翔飞 (桂电)E-Mail:ymg2002abc@163.com<br /> <br />一:前言<br />最近几天在移植minigui,一直没有使用过minigui界面,想看看什么效果,顺便学习一下,毕竟是国产的。花了我三天的时间,终于在我的LCD上显示minigui界面了,可以运行MDE演示程序。期间遇到很多问题,还好我都把我的问题以及解决方法都记录下来,下面开始我的移植。<br /> <br />二:使用环境的搭建<br />1.主机:RedHat Enterprise Linux

嵌入精灵 3029

Linux安装minigui教程,Linux miniGUI程序移植经过

有幸搞起了Linux系统,准备做嵌入式开发.我在Linux系统里,做了个小程序p,"正弦波的动态刷新演示". 想把它放到开发板上.我用串口minicom接通了开发板. 用mount命令拷贝文件p,成功.拷贝后, 执行./p 提示p.c line 1: syntax error: unexpected "("上网查到原因, 终于明白:到开发板上, 程序时不能运行的, 需要使用与开发板相对应的gcc进...

weixin_31091881的博客 384

MiniGUI移植s3c2440(一)

今天开始决定用MiniGUI,Ubuntu系统莫名的挂掉了,进不去桌面了,原因不详,以后研究吧 参考了两篇很好的文章1.http://wiki.minigui.com/bin/view/Columns/HuangSHArticle1?rev=3(主要根据这篇文章做的)2.http://hi.baidu.com/dropcrab/blog/item/137308120676b4886

叶落寒 3831

MiniGui移植详解

 MiniGUI 1.3.3 移植详解 [转] MiniGUI 1.3.3 移植详解 作者:大漠孤狼   E-Mail:yuqiang0107@126.com 最近移植了 MiniGUI 1.3.3 到一个开发板上,中间遇到许多问题,在论坛上发问题,结果也没多少人回我,就算偶尔有回的,基本上回答也没有什么用,网上找不到一个完整的移植文章,所以 就决定把自己这次移植摸出来的一些方法

流氓兔子的嵌入式生活 7429

不得不说,minigui真的很坑

开发项目在嵌入式平台上使用MiniGui作为用户界面开发工具,在工作之余准备在ubuntu14.04上搭建一个测试环境,这样代码测试起来比较方便。 前前后后搞了好多天,遇到了很多麻烦,但是最后还是跑通了。作为一个之前对minigui完全不懂的小白来说,真的需要好好摸索。 总结一下:minigui真的很坑!如果不是项目必须的东西,我建议读者,能不用就不用。 问题: min

猫哥 的沉淀、积累、总结。天天学习,好好向上...c/c++,嵌入式 linux,Android,HarmonyOS,AIOT) 1万+

基于嵌入式Linux 系统的MiniGUI 的移植与应用

1. 引言随着嵌入式系统应用越来越来广泛,以及嵌入式系统资源的日益丰富、性能的大幅度提高,人们对嵌入式系统中的人机交互接口的要求也越来越高。配备图形用户接口,在一些消费类产品中已经不可缺少,比如常见的手机、PDA、手持设备等。嵌入式领域中出现了专门的公司致力于开发Linux 下的GUI,从而大大提升了嵌入式GUI 的研发速度。随着GUI 的不断完善,在嵌入式 Linux 中出现了一批高性能、轻量级的GUI 系统,主要包括:紧缩的XWindow、MiniGUI、Microwindows、OpenGUI、Qt/

yyt7529的专栏 2149

嵌入式Linux的MiniGUI研究和移植

但作为一个窗口系统,该项目提供的窗口处理功能还需要进一步完善,比如控件或构件的实现还很不完备,键盘和鼠标等的驱动还很不完善。该平台是SUNPLUS公司提供的一个多媒体平台,不仅仅实现DVD的播放,还包含一些附加功能,例如游戏、卡拉OK、VOD及上网等功能,并为用户提供了编程接口,使用户可以在DVD上对Lego公司的机器人进行控制。稍后将对它作详细的介绍。图形驱动程序屏蔽了底层驱动的细节,实现底层驱动相关的功能,而不是硬件相关的一些功能,如一些画圆和画线的GDI函数、普通的剪切,可直接在HAL接口层实现。

ic2121的博客 926

arm linux移植笔记,arm-linux学习笔记之minigui移植

arm-linux学习笔记之minigui移植minigui-1.6.10在s3c2410平台的移植开发板:atmel9263CPU:at9263linux-2.6.26fs:nfsLCD:TFT320 X 240PC:ubuntu 8.10(一)准备工作下载软件包libminigui-1.6.10.tar.gzmg-samples-1.6.10.tar.gzminigui-res-1.6.10....

weixin_33393017的博客 538
上一篇: Linux环境编程学习
下一篇: AM437x——LED裸机
hceng_blog
博客等级 码龄10年 263粉丝 53原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值