今天移植了2.6.25的网卡驱动 总结一下

国产CPU与自研Wi-Fi 6芯片协同,构建自主可控高速无线连接方案 Wi-Fi 6作为新一代无线局域网标准,通过引入OFDMA、MU-MIMO等核心技术,实现了频谱效率与网络容量的显著提升,为高密度接入、低延迟应用提供了技术基础。其价值在于能够支撑4K/8K视频、VR/AR、云计算边缘接入等高带宽场景。在信息技术应用创新与供应链安全日益重要的背景下,国产计算平台与通信芯片的深度融合成为关键。本次适配成功,正是将Wi-Fi 6的通用技术原理,与国产化平台对高性能、高安全性的特定需求相结合。它解决了在政企、金融等关键行业中,既要满足高速无线接入性能,又要实现从CPU、操作系统到 阅读详情

今天移植了2.6.25的网卡驱动 总结一下

因为在驱动中使用的是虚拟地址,因此要首先将网卡的物理地址映射到虚拟地址

**************************************************************

1 。在include/asm-arm/plat-s3c24xx/common-smdk.h文件中添加

其中必须使用宏__phys_to_pfn 即将物理地址右移12位,跟踪源码可知 与struct map_desc中的pfn相关

#define pSMDK2410_ETH_IO  __phys_to_pfn(0x19000000)
#define vSMDK2410_ETH_IO  S3C2410_ADDR(0x04000000)
#define SMDK2410_ETH_IRQ   IRQ_EINT9
***********************************************************************************

2.我是在arch/arm/mach-s3c2410/mach-smdk2410.c  文件中添加
修改

static struct map_desc smdk2410_iodesc[] __initdata={
        {vSMDK2410_ETH_IO, pSMDK2410_ETH_IO, SZ_1M, MT_DEVICE}//添加的
};

*****************************************************************************
4、修改 drivers/net/cs89x0.c

下面是我diff:'+'为我添加出 '-'为原来的代码
+****************************************************************************
 /* Event inputs bank 1 - ID 35/bit 3 */
 static unsigned int netcard_portlist[] __initdata = {CIRRUS_DEFAULT_BASE, 0};
 static unsigned int cs8900_irq_map[] = {CIRRUS_DEFAULT_IRQ, 0, 0, 0};

+#elif defined(CONFIG_ARCH_S3C2410) //Added weibing
+#include <linux/irq.h>
+#include <asm/irq.h>
+#include <asm/arch/irqs.h>
+#include <asm/arch/regs-mem.h>
+#include <asm/arch/regs-gpio.h>
+#include <asm-arm/plat-s3c24xx/common-smdk.h>

+static unsigned int netcard_portlist[] __initdata = { vSMDK2410_ETH_IO +
DEFAULTIOBASE, 0};
+static unsigned int cs8900_irq_map[] = {SMDK2410_ETH_IRQ , 0, 0, 0};
+
+#ifdef request_region
+#undef request_region
+#endif

+#ifdef release_region
+#undef release_region
+#endif

+#define request_region(a,s,n) request_mem_region(a,s,n)
+#define release_region(a,s) release_mem_region(a,s)

 #else
 static unsigned int netcard_portlist[] __initdata =
    { 0x300, 0x320, 0x340, 0x360, 0x200, 0x220, 0x240, 0x260, 0x280, 0x2a0, 0x2c0, 0x2e0, 0};
*************************************************************************************

 

**************************************************************************
//其中BWSCON BANKCON3必须设置,其用法s3c2410中文手册
@@ -324,6 +348,10 @@
  io = dev->base_addr;
  irq = dev->irq;

+#ifdef CONFIG_ARCH_S3C2410
+ __raw_writel((__raw_readl(S3C2410_GPGCON)&~(0x3<<2))|(0x2<<2),S3C2410_GPGCON);
+ __raw_writel((__raw_readl(S3C2410_EXTINT1)&~(0x7<<4))|(0x4<<4),S3C2410_EXTINT1);
+ __raw_writel(0x2211d110,S3C2410_BWSCON);
+ __raw_writel(0x1f7c,S3C2410_BANKCON3);
+#endif

  if (net_debug)
   printk("cs89x0:cs89x0_probe(0x%x)/n", io);
****************************************************************************


***************************************************************************
@@ -386,6 +414,18 @@
 {
  outw(value, base_addr + (portno << 1));
 }
+#elif defined(CONFIG_ARCH_S3C2410)
+static u16
+readword(unsigned long base_addr, int portno)
+{
+ return __raw_readw(base_addr+portno);
+}
+
+static void
+writeword(unsigned long base_addr, int portno,u16 value)
+{
+ __raw_writew(value,base_addr+portno);
+}
 #else
 static u16
 readword(unsigned long base_addr, int portno)
***************************************************************************


**************************************************************************

此处设置MAC地址 ,其值不能随便设置。  其高32为指定的厂商号,即00 E0 4C 4D (为某牌网卡)
后16为可以随便设置,否则在使用ifconfig时出错。

因为在嵌入式版中没有EPROM所以MAC地址不能指定,需自己设置。
@@ -638,7 +678,18 @@
     the driver will always do *something* instead of complain that
     adapter_cnf is 0. */
 
-#ifdef CONFIG_SH_HICOSH4
+#if defined CONFIG_ARCH_S3C2410
+ lp->force=FORCE_RJ45;
+ lp->auto_neg_cnf=IMM_BIT;
+
+ dev->dev_addr[0]=0x00; /*setMACaddress*/
+ dev->dev_addr[1]=0xE0;
+ dev->dev_addr[2]=0x4C;
+ dev->dev_addr[3]=0x4D;
+ dev->dev_addr[4]=0x10;
+ dev->dev_addr[5]=0x30;
+
+#elif defined CONFIG_SH_HICOSH4
  if (1) {
   /* For the HiCO.SH4 board, things are different: we don't
      have EEPROM, but there is some data in flash, so we go
*************************************************************************

 

***************************************************************************
@@ -1278,7 +1329,7 @@
  int i;
  int ret;
 
-#if !defined(CONFIG_SH_HICOSH4) && !defined(CONFIG_ARCH_PNX010X) /* uses irq#1, so this won't work */

+#if !defined(CONFIG_SH_HICOSH4) && !defined(CONFIG_ARCH_PNX010X) && !defined
(CONFIG_ARCH_S3C2410) /* uses irq#1, so this won't work */
  if (dev->irq < 2) {
   /* Allow interrupts to be generated by the chip */
 /* Cirrus' release had this: */
*************************************************************************************

*************************************************************************************
@@ -1309,7 +1360,7 @@
  else
 #endif
  {
-#if !defined(CONFIG_MACH_IXDP2351) && !defined(CONFIG_ARCH_IXDP2X01) && !defined(CONFIG_ARCH_PNX010X)
+#if !defined(CONFIG_MACH_IXDP2351) && !defined(CONFIG_ARCH_IXDP2X01) && !defined(CONFIG_ARCH_PNX010X) && !defined(CONFIG_ARCH_S3C2410)
   if (((1 << dev->irq) & lp->irq_map) == 0) {
    printk(KERN_ERR "%s: IRQ %d is not in our map of allowable IRQs, which is %x/n",
                                dev->name, dev->irq, lp->irq_map);
*************************************************************************************

*************************************************************************************
@@ -1324,6 +1375,9 @@
   writereg(dev, PP_BusCTL, ENABLE_IRQ | MEMORY_ON);
 #endif
   write_irq(dev, lp->chip_type, dev->irq);
+#if defined(CONFIG_ARCH_S3C2410)
+  set_irq_type(dev->irq, IRQT_RISING);
+#endif
   ret = request_irq(dev->irq, &net_interrupt, 0, dev->name, dev);
   if (ret) {
    if (net_debug)
****************************************************************************************


************************************************************************************
@@ -1394,7 +1448,7 @@
  case A_CNF_MEDIA_10B_2: result = lp->adapter_cnf & A_CNF_10B_2; break;
         default: result = lp->adapter_cnf & (A_CNF_10B_T | A_CNF_AUI | A_CNF_10B_2);
         }
-#ifdef CONFIG_ARCH_PNX010X
+#if defined(CONFIG_ARCH_PNX0105) || defined(CONFIG_ARCH_S3C2410)
  result = A_CNF_10B_T;
 #endif
         if (!result) {
*******************************************************************************


4  燃后在make menuconfig
  [*]   Ethernet (10 or 100Mbit)  --->
       -*-   EISA, VLB, PCI and on board controllers

                <*>   CS89x0 support

make zImage  成功

*********************************************************************************
注:

我在网上看到有人在  drivers/net/Kconfig文件中的config CS89*0配置信息中加入


depend  on ARCH_S3C2410 
我觉得没有必要的 

我验证了一下  确实没有必要的。

网卡驱动架构以及源码分析 由于工作很忙,一直没有时间静下心来好好整理文档。文档的功夫不仅反映了一个人对相关知识的掌握,也可以发现不足之处,从而提高自己,增加自己的内功。希望从这篇开始,日积月累,成为一个优秀的程序员。本文的stmmac驱动以linux内核5.15为参考。stmmac驱动用于支持 synopsys ip的系列网卡芯片,包括xgmac,以及gmac。xgmac对应的是10G网卡芯片,gmac对应的则是千兆网卡芯片。我将从三个方面进行网卡驱动的分析,分别是网卡驱动架构,link方式,以及收发包流程。 阅读详情

相关推荐

GD32F4 Freertos实战:YT8512以太网PHY驱动移植与RMII模式配置详解

本文详细讲解了在GD32F4系列MCU上,基于FreeRTOS实时系统,将YT8512以太网PHY芯片驱动从官方LAN8700 Demo移植适配的完整流程。核心内容包括RMII模式配置、时钟源选择、PHY地址修改以及关键状态寄存器适配,并提供了实战调试排坑指南,帮助开发者快速解决移植过程中的常见问题。

brown的博客 689

银河麒麟桌面操作系统V10 SP1 新增和优化功能和特性

银河麒麟桌面操作系统V10 SP1 新增和优化功能和特性

RZer的博客 2881

嵌入式Linux实战:EC20 4G模块驱动移植与网络连接方案对比(PPP与GobiNet)

本文详细介绍了在嵌入式Linux系统中为移远EC20 4G模块移植驱动并实现网络连接的两种主流方案。文章首先指导如何修改内核驱动以正确识别模块,随后深入对比了经典的PPP拨号方案与高性能的GobiNet驱动方案,分析其原理、配置步骤、优缺点及适用场景,帮助开发者根据项目需求选择最佳网络连接方案。

weixin_29158047的博客 196

基于S3C2440的Linux-3.6.6移植——DM9000网卡驱动移植

Linux-3.6.6很好的支持了DM9000,因此对于S3C2440芯片来说无需进行任何修改,甚至连menuconfig都已经默认配置了网卡驱动。但我们还需要设置网卡的MAC和IP等信息。有许多方法可以实现网卡的设置,在这里我们选择一种比较简单的方法——修改根文件系统的启动脚本文件rcS。在根文件etc/init.d/rcS文件中添加下列语句: /sbin/ifconfig  lo  127.

赵春江的专栏 6493

STM32F407移植lwIP并搭建HTTPD服务器:从底层驱动到动态网页

嵌入式设备联网是物联网与智能硬件的核心能力,而TCP/IP协议栈则是实现网络通信的基石。lwIP作为专为MCU设计的轻量级协议栈,通过精简资源占用与分层架构,让资源受限的STM32也能具备完整的网络功能。其移植过程涉及MAC/PHY驱动、内存管理、DMA描述符配置等关键环节,需要开发者深入理解底层原理。通过协议栈提供的HTTPD服务,设备可像路由器后台一样被浏览器访问,实现远程控制与状态监测。本文以STM32F407为例,结合实际工程经验,从PHY芯片、RMII接口、netif驱动到HTTPD的CGI与SS

weixin_29166013的博客 231

树莓派5扩展PCIe NPU实战:DeepX DX-M1驱动移植与边缘AI性能优化

神经网络处理单元(NPU)作为专为AI计算设计的协处理器,其核心原理是通过专用硬件加速矩阵乘加等张量运算,显著提升推理能效比。这项技术的关键价值在于,它能让资源受限的边缘设备(如树莓派)也能高效运行复杂的深度学习模型,如目标检测和图像分类。在智能安防、工业质检、机器人等实时性要求高的场景中,低延迟、高能效的边缘AI推理至关重要。本文聚焦于将x86平台的PCIe接口NPU(以DeepX DX-M1为例)适配到树莓派5的工程实践,深入探讨了在ARM架构下进行驱动移植、解决供电与带宽瓶颈,并优化YOLOv8等模型

weixin_34277853的博客 646

s3c2410 cs8900a 网卡驱动

/* CS8900a.h */ #define CONFIG_CERF_CS8900A 1 /* * cs8900a.c: A Crystal Semiconductor (Now Cirrus Logic) CS8900A driver for SMDK-s3c2410 (based on cs89x0.c) * * Author: Yong-iL Joh t

思索的IT脚印 1337

APM32F103 配置CAN

摘要: 本文介绍了基于APM32F103RCT6的CAN通信实现,包含GPIO初始化、CAN配置、数据收发功能。通过配置CAN1的GPIO引脚(PB8/PB9)和波特率(500Kbps),实现标准帧格式的数据传输。发送函数支持8字节数据包,接收函数通过FIFO0处理消息,并根据接收ID触发响应发送(如ID 0x1回复0x2)。代码还包含错误状态检测(如总线关闭处理)和过滤器配置(32位掩码模式)。整体实现了基础的CAN通信与错误管理功能。

weixin_43676660的博客 862

linux驱动移植-linux网卡驱动基础

---------------------------------------------------------------------------------------------------------------------------- 内核版本:linux 5.2.8 根文件系统:busybox 1.25.0 u-boot:2016.05 ---------------------...

Graceful_scenery的博客 572

Power BI财销一体分析——KPI分析应用实践

第九步:插入三个散点图,行拖入分销商表分销商字段,将度量值中的销量拖入X轴,将利润拖入Y轴,大小拖入度量值总销售额,将分销商表业务类型字段作为筛选条件添加给散点图,分别选择专业自行车店、增值经销商、仓库,使视觉对象固定显示不同业务类型的散点分布。这个公式其实是不需要我们自己写的,依赖于快度量值功能星级评分,基值选择度量值总销售额,星数选择5,最低星值评分选择0,最高星级评分值选择100,点击添加,星级评分度量值就建立好了,接下来我们理解一下公式。好的,今天的讲解就到这里。

BI瓶子的博客 1552

MATLAB不能识别已安装的visual studio 2015解决方法

首先,对于MATLAB识别已经安装的vs版本通过命令: mex -setup 下图为本电脑下同时安装的两个visual studio 如果搞清楚MATLAB识别电脑上安装vs的过程,可通过命令: mex -setup -v MATLAB输出识别编译器的整个过程。其中HKLM和HKCU分别是注册表中的HKEY_CURRENT_USER,HKEY_LOCAL_MA…的缩写,MATLAB没有找到对应编译器是由于注册表里没有对应信息(主要是文件路径,C++编译器的路径),或者在注册表里存在该信息,但是找不到

qq_36320710的博客 4895

移植linux-2.6.32.2到mini2440开发板(实录)

今天,参考《Mini2440_Linux移植开发实战指南.pdf》和《【申嵌培训】Mini2440 Linux移植开发实战指南-内核部分2010-9-9.pdf》,对公司购买的友善之臂的mini2440进行了linux2.6.32.2的系统移植。下面是移植的全程记录: 开发环境: 虚拟机:VMware Player 4.0.1 build-528992 主机:Red Hat Enterp

小鹏博客 1345

目标检测数据集 第069期-基于yolo标注格式的玻璃清洁状态检测数据集(含免费分享)

但这类技术的落地,离不开大量标注规范、场景丰富的数据集作为算法训练的支撑,玻璃清洁状态检测数据集的出现,正是为了满足这一市场与技术需求。在高校与科研机构的计算机视觉研究中,该数据集可作为基础研究素材,用于探索物体状态识别的算法优化方向,比如针对玻璃这类透明物体的检测算法改进,或是小样本场景下的状态识别研究。通过摄像头采集车窗、挡风玻璃的图像,算法自动检测玻璃清洁度,若识别到脏污影响视线,及时提醒运维人员清洁,避免因玻璃脏污引发的安全事故,提升交通出行的安全性。

深度学习算法工程师,专注于前沿算法研究与实战应用。在这里,我将分享深度学习领域的实战经验、优质数据集资源以及最新论文解读与精度分析,旨在与广大技术爱好者共同探索人工智能的奥秘,助力技术成长与创新。 128

非常详细的ok6410的linux系统移植《转载》

标签: 6410 系统移植 linux 嵌入式 编译内核 it 分类: 嵌入式linux 目录 Linux 3.3.5系统移植 2 LED驱动移植 8 按键驱动移植 9 LCD驱动移植 11 DM9000网卡驱动移植 14 搭建NFS网络文件系统 25 移植触摸屏驱动 38 移植Qt4.8.1 42 tslib移植及测试 42 移

cmy673986的专栏 2429

1、JMP脚本编程全面指南:从基础到高级应用

本博客全面介绍了JMP脚本编程的各个方面,从JMP基础和JSL入门,到数据类型、数据结构、编程方法、数据表操作、图形与三维场景脚本,再到应用程序创建与扩展功能。内容涵盖脚本工具使用、常见任务实现、兼容性说明及未来发展趋势,旨在帮助用户掌握JMP脚本语言的强大功能,提升数据分析的自动化与定制化能力。适合从初学者到高级用户的深入学习与实践参考。

flink9streamer的博客 266

智能硬件产品 App 全球发布 第 1 章:全球 App 发布战略设计

本章阐述智能硬件 App 全球发布战略,涵盖市场分析、竞争格局、用户画像及资源配置。通过制定可执行的全球化推广路径,整合地区法规合规、渠道分发策略与营销活动设计,助力团队快速进入主流商店并确立品牌影响力。同时构建可量化的 KPI 监控体系,指导项目进度追踪与效果复盘,确保产品迭代持续优化,降低运营总成本。

moton2017的博客 156

AI辅助Linux驱动移植:从RT3070老驱动到现代内核

Linux驱动开发作为操作系统核心组件,其版本兼容性问题一直是嵌入式开发的难点。随着内核迭代,早期驱动代码面临API变更、硬件抽象层重构等挑战。传统移植方法依赖开发者手动比对内核变更日志,效率低下且容易遗漏关键修改。现代AI编程助手通过语义分析技术,能自动识别废弃API并建议等效替代方案,大幅提升老驱动现代化效率。以RT3070无线网卡驱动为例,AI工具可精准处理中断注册表变更、内存分配标志更新等典型问题,同时保持对旧硬件的兼容性。这种技术特别适用于工业控制、物联网设备等长生命周期场景,为legacy硬件提

weixin_29163797的博客 279

Synopsys逻辑工艺库(DC综合)

逻辑库包括仅与综合过程有关的信息且通过DC用于设计的综合和优化。这一信息包括引脚到引脚的时序、面积、引脚类型和功耗以及其他DC需要的必须数据。逻辑库是一个文本(通常扩展名".lib"),通过使用Library Compiler(LC)编译生成带有扩展名名".db"的二进制文件。以SMIC的逻辑综合库为例:库文件下载地址。

baidu_34971492的博客 2423

调试 - 从ST官方demo移植的LAN8720工程移植到自己的板子

试验原因 前段时间, 产品板子上的网络通讯好像有点问题。 特意从ST官方板子的工程上,学了一下如何从头移植LAN8720. 当时移植完的demo程序,在ST官方板子跑的挺好的。 在和ST官方同样硬件(LAN8720)连接的第三方板子上也跑的挺好的。 就是没在产品板子上跑(因为有更优先的SD卡试验要做)。 今天在产品板子上更新完SD卡驱动,SD卡挂载和操作挺好的,突然发现网卡ping不通了。 这时,...

博客标题不能为空 1945

【软考高级架构】论文范文16——论分布式缓存架构设计及其应用

随着互联网业务的快速发展,高并发访问和海量数据处理对系统响应时间提出了极高要求,传统基于磁盘的数据库存储已难以满足毫秒级的性能需求。分布式缓存作为一种高性能、可扩展的数据存储中间件,能够有效减轻后端数据库压力、加速热点数据访问、提升系统吞吐量,已成为高并发系统架构中的核心组件。本文以笔者主导的某大型电商平台秒杀系统建设项目为案例,围绕分布式缓存架构设计展开论述。笔者担任系统架构师,主导了缓存选型、数据分片策略、缓存一致性方案、高可用架构及缓存穿透/雪崩/击穿防护机制的设计与落地。

qq837993702的博客 162

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

非常详细的ok6410的linux系统移植…

目录 Linux 3.3.5系统移植 2 LED驱动移植 8 按键驱动移植 9 LCD驱动移植 11 DM9000网卡驱动移植 14 搭建NFS网络文件系统 25 移植触摸屏驱动 38 移植Qt4.8.1 42 tslib移植及测试 42 移植qt-everywhere-opensource-src-4.8.1 45 今天听了宋宝华(http://www.embedu.org/

不积跬步无以至千里,千里之行始于足下! 3075

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

详细讲解u-boot之网络移植与调试

首先来回顾一下,上一篇我们采用的是NXP官方默认imx6ull开发板的配置参数,任何参数都未做修改,现在使用默认配置网络未能正确识别,说明我们的硬件设计与官方的设计有偏差。,从设备树文件中可以得到,imx6ull FEC1对应位ethphy0,而ethphy0对应的phy地址默认位2,这与我们开发板硬件给的phy地址不符合,因此修改设备树中FEC1对应的phy地址为0。查找结果如上,spi4接口中使用了GPIO5的7和8两个管脚,并且该设备status状态为“okay”激活,解决方法如下,

Wang_XB_3434的博客 1万+

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

OK6410移植linux3.3.5

| superzuo 目录 Linux 3.3.5系统移植    2 LED驱动移植    8 按键驱动移植    9 LCD驱动移植    11 DM9000网卡驱动移植    14 搭建NFS网络文件系统    25 移植触摸屏驱动    38 移植Qt4.8.1    42 tslib移植及测

metuu的专栏 1957

iw命令 linux 没有_linux上移植iw工具(最终无法使用)

今天接到一个新任务,要求在已经配置好操作系统、硬件和驱动的主板上,用其wifi连接公司网络。这个主板的功能是为一个嵌入式应用提供底层支持,而这个嵌入式应用是用QT开发的,因此最终目的是通过这个应用搜索无线网络并连接。于是我想,要再应用层中实现功能,首先还是要在操作系统上先把功能实现了,但因为对linux不是很熟只能上网寻找答案。于是发现有两个工具可以让wifi实现STA(相当于从机)模式,1、iw...

weixin_39774808的博客 952

RT-Thread上W5500以太网驱动移植实战:从硬件抽象到跨平台优化

嵌入式网络开发中,硬件TCP/IP协议栈芯片通过SPI接口与主控通信,能显著降低CPU负载并提升实时性。其原理是将网络协议处理卸载到专用芯片,主控仅需操作寄存器,技术价值在于高确定性和低资源占用,广泛应用于工业网关、Modbus TCP和MQTT等场景。在RT-Thread设备框架下,SPI设备与NETDEV设备的协同工作实现了硬件抽象与网络协议栈的无缝集成。本文以W5500为例,详细拆解从GD32F103到STM32F103的移植过程,涵盖SPI模式配置、片选控制、中断处理及性能优化,帮助开发者快速构建稳

weixin_33871366的博客 363
上一篇: 类型限定词volatile
下一篇: C/C++ 开发人员采用 Windows 64 位
suacker
博客等级 码龄24年 46粉丝 19原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值