用S3C44B0与uClinux构建web服务器

Contex-M3寄存器组整理 看我以前的博客,关于ARM 寄存器和汇编,我之前写过和写过相关的博客至少有三次,可是实际情况却是过了一两年就基本忘了,感觉之前学的都是囫囵吞枣,没有真正的明白,也许学习就是这样,一开始只能记个大概,多看几遍多用几遍也许就理解了。每次看到汇编的地方,必然就会想起R0-R15寄存器的意思是啥。 阅读详情
用S3C44B0与uClinux构建web服务器
 
发布日期:2006-07-04 浏览数:195 作者:徐 明 来源:PLC&FA
 

关键词: ARM   uClinux   web服务器

1  引言
随着互联网在全球的飞速发展,网络技术广泛应用于各种企业和工业系统,越来越多的信息化产品需要能够接入互联网通过web页面进 行远程访问和控制。嵌入式web服务器是当今研究嵌入式[1]的应用热点,可广泛的应用到工业设备,自动化农业,信息化家电,远程监控报警系统等。目前正 在开发的嵌入式系统中,将近一半的项目都选用Linux作为嵌入式操 作系统,而uClinux是一个经过对标准Linux内核改动,高度优化、代码紧凑的嵌入式Linux[2]它保留了Linux的大多数优点,具有良好的 移植性、优秀的网络功能。目前,基于三星S3C4510b与uClinux下web服务器已经实现,而基于S3C44B0与uClinux下web服务器 的实现尚不多见。本文通过网口控制芯片RTL8109AS与S3C44B0的连接,实现了硬件设计,采用uClinux源代码和boa服务器源代码的编译 以及CGI网关接口程序的编写实现了软件设计,在自行设计的S3C44B0开发板上实现了基于uClinux下的boa服务器和动态网页CGI网关接口程 序,通过浏览器输入开发板的IP地址就可以动态地访问开发板上的网页。

2  硬件方案实现
本文设计的ARM开发板的核心是三星(Samsung)S3C44B0微处理器,是基于ARM7TDMI[3]的 RISC型CPU,是性价比较高的嵌入式32位处理器之一。S3C44B0芯片包含一个使用了66MHz和单周期精简指令处理器(ARM7TDMI),内 建8k高速缓存器,2通道通用DMA、2通道外设DMA并具有外部请求引脚、2通道UART带有握手协议、11通道SIO、1通道多主IIC-BUS控制 器、5个PWM定时器、71个通用I/O口等等并且能够与常用的外围设备实现无缝连接,从而简化了外围电路设计,降低了产品成本、体积和功耗。本文自行设 计的开发板使用16MSDRAM和2Mflash的内存构架。其中Flash型号是SST39VF160,主要用于存放BIOS程序、uClinux内核 映象以及ROMFS文件系统。SDRAM则采用两片HY57V641620,共同组成16M、32位宽的系统主存储器。外设方面,采用CS4334芯片进 行音频扩展,采用PDIUSBD12芯片扩展了一个USB接口,串口控制芯片采用常见的MAX232,网口控制芯片采用Realtek公司的 RTL8109AS扩展1个10/100M的网卡设备。开发板框架如图1所示:

图1     开发板整体框架图
3  软件设计
3.1  uClinux在S3C44B0上的移植
本开发板采用 uClinux作为操作系统,uClinux是专门针对没有MMU的CPU,适合嵌入式系统小型化应用。uClinux经过对标准Linux内核的改动, 形成了一个高度优化、代码紧凑的嵌入式Linux,uClinux保留了Linux的大多数优点:稳定,良好的移植性,优秀的网络功能,完备的对各种文件 系统的支持,以及标准丰富的API。而且在uClinux系统上开发的应用程序可移植性很好,系统升级也非常容易,所以本文选用uClinux作为嵌入式 操作系统。在S3C44B0上对uClinux内核进行的移植过程为:
首先对其源代码进行编译,从网上下载一个uClinux源代码,一般是压缩格式(tar.gz)的,将其解压,在当前目录下产生一个uClinux-dist目录,进入uClinux-dist目录,然后依次键入
(1) make menuconfig 进入菜单化的源代码配
     置工具
(2) make clean  清除所有的编译结果
(3) make dep   设置文件依赖关系
(4) make lib_only  编译库文件
(5) make user_only  编译应用程序
(6) make romfs  编译文件系统
(7) make image  生成映象文件
(8) make   完成整个编译过程
编 译完成后,在image下产生三个文件,image.ram,image.rom,romfs.img。将image.rom通过网口用tftp工具下载 到系统板的flash中0x0处,上电键入BIOS提供的命令,uClinux便从SDRAM启动,完成移植过程[4-5]。
3.2  基于uClinux的web技术实现
(1) web服务器的工作原理[6-7]
web 服务器作为一个数据载体,可以将本地的信息和数据通过网络传递给远端发出请求的客户,这在远程监控的实现有很大的意义。web服务器监听用户端的服务请 求,根据用户请求的类型提供相应的服务。用户端使用web浏览器和web服务器进行通信。web服务器在接收到用户端的请求后,处理用户请求并返回需要的 数据。一个完整的HTTP事务一般由以下四个阶段组成:
l 客户与服务器建立TCP连接;
l 客户向服器发送请求;

l 如果请求被接受,则由服务器发送应答,在应答中包括状态码和所要的文件;
l 客户与服务器关闭连接。
(2) uClinux下web服务器的实现
从本质上讲,web服务器是在计算机幕后运行的程序,等待发自web浏览器的各种请求。当接受到请求时,它用被请求的文档或错误消息进行答复。大多数的web服务器都提供后端技术,就象CGI,能够使web服务器和已有的应用程序相连,从而提供交互式活动和信息检索。
uClinux 下,主要有三个web服务器:httpd,thttpd和boa。Httpd[9]是最简单的一个web服务器,功能也最弱,不支持认证、CGI。 thttpd web服务器和boa web服务器都支持认证、CGI等,功能都比较全。本开发板选用适合于嵌入式应用的boa web服务器。boa是一个单任务的http服务器,源代码开放、性能高。它和传统服务器的主要区别是:它是单进程的,在接到新的httpd请求时并不 FORK出一个新的进程来响应,不能对每个到来的连接处理,而且也不能将自己拷贝很多份来处理多连接。它在内部处理所有正在进行的http连接请求,只对 单独的CGI程序、自动文件的产生、自动文件的解压等请求FORK出新进程。它的优点是代码简单、速度快、适合于嵌入式应用。对于嵌入式系统来说,实现 web服务器主要是为了使用www浏览器,最终让用户通过局域网或广域网访问和控制嵌入式系统设备。编写不同的HTML页面并结合CGI技术可以完成各种 灵活、友好的交互功能。在uClinux下实现boa,本文具体对boa.conf和mime.types文件进行了几项修改:
(1) 由于根文件系统是只读的,不能用mkdir来新建目录,所以在编译内核前建好要用到的目录,在此把web服务器的根目录设在/home/下,将服务器文档 根目录设在/home/httpd/目录下,把实现动态web网页功能的CGI程序放在/home/httpd/cgi-bin/ 目录下。这几个目录的建立通过修改开发平台的makefile来实现。在ROMFS_DIRS=bin dev etc home lib mnt proc usr var 增加home/httpd home/httpd/cgi-bin。这样修改后,通过上面的编译内核步骤编译后,根文件系统中就包含这些新建的目录。
(2) 指定web服务器的根目录路径,进入uClinux-dist/user/boa/src/目录下,通过修改define.h文件中 #define SERVER_ROOT/home语句来指定SERVER_ROOT。修改boa.conf文件,在uClinux- dist/user/boa/src/boa.conf里将User nobody,Group nogroup改为User 0,Group 0,Document Root/var/www改为DocumentRoot/home/httpd,定义默认首页和CGI程序所在的目录,即:
DirectoryIndex index.html,ScriptAlias /cgi-bin/   /home/httpd/cgi-bin/mini.type不需要修改。Boa.conf和mini.types必须放到web服务器根目录下,把修改 后的boa.conf和mini.types复制到uClinux-dist/romfs/home下,然后对uClinux- dist/Vendors/Samsung/4510b/inittab修改,在inet:unknow/bin/inetd后加入boa: unknown/bin/boa c/home。这样配置好后,此时web服务器的根目录为/home/httpd,httpd目录下放的是web服务器可以访问的文件,包括html网 页,JPG图片等。/home/httpd目录下放置的文件和网站文件类型完全一样,其中index.html为远程浏览客户访问web服务器所看到的默 认首页值,通过超级链接可以链接到/romfs/home/httpd目录以及其所有子目录下的所有静态网页。如果要实现动态网页,只能采用CGI,因为 目前uClinux还不支持ASP,PHP等技术。CGI即通用网关接口,它是一个WWW服务器主机对外服务的标准接口,一般来说一个CGI接口的功能就 是在超文本和服务器主机应用程序间传递信息。目前最为流行的CGI[10]程序语言有四种:C,Shell,Perl和Visual Basic。CGI程序属于一个外部程序,需要编译成为可执行文件,才能在服务端运行,其应用程序流程图如图2所示:

图2     CGI程序流程图

图3     uClinux下内嵌网页

图4     LED演示程序界面
浏览器将用户输入的数据送到web服务器,web服务器将数据使用stdin送给CGI程序,在执行CGI程序后,可能会访问存储数据的一些文档,最后使用stdout输出html形式的结果文件,经过web服务器送回浏览器显示给用户。
本 文通过c语言来编写CGI程序,编译成二进制文件放在/cgi-bin/目录下,由于前面配置了boa服务器的CGI目录, ScriptAlias/cgi-bin//home/httpd/cgi-bin/, 所以/cgi-bin/目录下的CGI程序就能被正确执行。配置完成后,重新编译内核,编译时选中boa选项将编译好的内核下载到开发板,启动 uClinux完成IP配置,启动boa web服务器之后就可以通过浏览器浏览网页了,如果想启动uClinux时自动启动boa web服务器,可以修改rc文件,进入uClinux-dist/vendors/Samsung/4510b,在运行脚本中加入boa c/home/&修改后重新编译内核,再下载到开发板运行,运行uClinux后即可访问网页了。下面结合一个例子来说明如何实现uClinux 下的动态网页技术。先用HTML语言编写web内嵌网页(如图3),然后点击内嵌主页上的LED DEMO演示程序超级链接,进入到网页的下一界面(如图4),由ACTION属性来指定要用到用到的CGI程序,即ACTION=/cgi- bin/led.cgi,由METHOD属性来指明所用的提交方法,即METHOD =POST。
选中LED复选框,然后点击SET,就能控制开发板上的发光二级管。说明uClinux下boa服务器已经运行成功。

4  结束语
本 文通过硬件方案的实现、软件设计、以及uClinux下web技术的实现,实现了基于S3C44B0与uClinux下的 boa服务器。通过启动开发板上的boa服务器,在PC机上的浏览器键入开发板上的IP地址,就能访问开发板中内嵌的静态网页,通过CGI程序的实现,实 现了网页的动态显示,并用一个控灯的例子对boa服务器的运行进行了实验验证。本文所实现的嵌入式web服务器通用性比较强,能够在嵌入式开发平台上高效 率地运行,应用前景非常看好。

 
S3c44B0在uClinux的移植步骤 S3c44B0在uClinux的移植步骤和配置参数。 立即下载

相关推荐

Vscode+ROS/ROS2 开发调试基于ROS/ROS2应用环境配置

在ROS操作系统开发应用程序时,我们常常需要调试代码,验证程序的正确性。但是在用rosrun或者roslaunch启动节点后,若程序运行过程中发生错误而导致发生出错停止工作,这时候终端并不会输出具体的信息指出在何处发生了错误,具体错误的原因又是什么。往往仅仅是core dump 或者segmentation fault 等等一类的模糊提示。

Chasinglight的博客 5800

uClinux内存管理分析

2007-12-25 09:45:58 1 引言 内存管理在嵌入式操作系统中是很重要的子模块,能够对系统性能起决定性作用。uClinux是嵌入式Linux领域非常重要的分支,已成功应用于路由器、机顶盒、PDA等领域,与标准Linux在内存管理方面有着本质的区别。2 uClinux概述 uClinux从Linux2.0/2.4内核派生而来,其内核二进制映

mybirdsky的专栏 894

手把手教你用YOLOv5和OpenCV实现DNF全自动刷图(含自动拾取与Boss战逻辑)

本文详细介绍了如何使用YOLOv5和OpenCV构建DNF全自动刷图系统,包括环境配置、游戏画面采集、目标检测、场景导航及操作控制等核心模块。通过实战案例,帮助开发者掌握游戏自动化技术,实现自动拾取与Boss战逻辑,提升游戏效率。

weixin_42628941的博客 446

Linux C小项目 —— 简单的web服务器

简单的Web服务器 实现一个基于HTTP通信协议的web服务器。客户端向服务器程序发送所需文件的请求,服务器端分析请求并将文件发送个客户端。 1、整体程序设计 客户端发送所需文件,服务器返回该文件,通信结束。 服务器程序的任务大致分为3步: a、解析客户端程序发来的内容,找到需求文件的路径或者名字 b、在服务器主机上查找该文件 c、将该文件内容组织成客户端程序可以理解的形式,并将其发...

trb331617的博客 6906

告别TwinCAT:手把手教你用IgH EtherCAT Master在LinuxCNC上搭建实时运动控制平台

本文详细介绍了如何利用IgH EtherCAT Master和LinuxCNC搭建开源实时运动控制平台,替代商业软件TwinCAT。通过分步指南,包括实时Linux环境配置、EtherCAT主站安装、LinuxCNC集成及多轴同步控制实现,帮助开发者构建高性能、低成本的工业自动化解决方案。

weixin_42641741的博客 400

基于ESP32-S3的电子吧唧DIY:蓝牙传图、触摸交互与动态显示全解析

本文详细解析了如何利用ESP32-S3芯片DIY一个功能丰富的电子吧唧(智能徽章)。项目核心实现了通过蓝牙低功耗(BLE)接收手机小程序发送的图片,并存储至文件系统,最终在带触摸功能的TFT屏幕上进行动态显示与交互。教程涵盖了从硬件选型、软件开发环境搭建,到蓝牙通信、图片处理与触摸功能实现的完整步骤,并分享了实用的调试技巧,适合创客和嵌入式爱好者动手实践。

weixin_42510243的博客 672

uCLinux Web服务器 动态Web技术 CGI

摘要:本文介绍了在S3C44B0X型ARM7平台上实现 Linux下的Web 服务器的几种途径;对实现 Linux下的静态、动态Web页面技术进行了分析和比较,并给出了一个通过网络远程访问温度传感器的实例。 关键词: Linux Web服务器 动态Web技术 CGI(通用网关接口) 前言 嵌入式系统已经大量应用于各种场合,网络技术的发展使嵌入式系统的网络功能日益完善。在测控领域里,常常需要远

lishan1998的专栏 1481

YOLO26改进策略【Head】| (独家改进)轻量化检测头:利用 EfficientNet 中的移动倒置瓶颈模块 MBConv 改进检测头

本文记录的是基于移动倒置瓶颈 MBConv 的 YOLO26 的检测头轻量化改进方法研究。采用了独特的倒置瓶颈结构,通过的操作以及,在高效提取特征的同时极大地降低了计算量。本文将的设计优势融入j检测头中,使其在目标检测任务中不仅能够更精准地识别各类目标,还能在计算资源有限的情况下快速响应,展现出更为卓越的实时检测能力。EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks的实现代码如下: 首先在代码中加入如下代码: 其

Limiiiing的博客 286

S3C44B0 调试笔记—uClinux

导读:   上班时间很少有机会搞这些东西,基本上都是下班在家里搞,不过在公司写写文挡还是可以的。调试uClinux也是断断续续进行的。以前根本没接触过 linux,搞起来可真是头都要大了。虽说到最后调通比前面耗时少很多,主要原因是网上很多参考资料。但个人感觉这部分难度要更大一些。   接着前面的说吧,编译出一个uClinux的内核出来,就必须在linux环境下,windows下是编译不了的

yingfox的专栏 1901

错误代码:11300001 数据集 [xxx] 配置错误“=”附近有语法错误(原理分析)

错误代码:11300001 数据集 [1_Workshift] 配置错误“=”附近有语法错误。

码农研究僧的博客 914

STM32入门教程:无人机控制

我们将会一步一步引导您完成无人机的控制代码,包括无人机的姿态控制、飞行控制和通信控制等。第三步:配置无人机姿态控制 无人机的姿态控制是指控制无人机在空中的倾斜和转向。为了实现姿态控制,我们需要使用加速度计和陀螺仪传感器来获取无人机的姿态信息,并使用PID控制算法来控制无人机的姿态。在这一步骤中,您需要根据您使用的具体传感器和控制算法的要求进行更详细的配置和编码。在通信控制中,您需要考虑到通信的稳定性和可靠性。第五步:通信控制 无人机的通信控制是指与地面站或其他设备进行通信,传输飞行数据和接收飞行指令。

m0_75244442的博客 747

arm服务器系统设计,基于ARM的嵌入式服务器的设计

摘要:Internet技术的快速发展和移动互联网时代的到来,使嵌入式技术成为了当前IT领域发展最迅速的方向之一.ARM技术占据了3/4以上的32位RISC微处理器市场,此外,其网络接口驱动技术特别适合于需要网络支持的服务端设备.基于ARM的嵌入式操作系统可简便地实现各种控制功能,使其在工控领域应用更广泛.嵌入式Linux操作系统内核小,适用于特定嵌入式应用的专用Linux操作系统的要求.Inter...

weixin_35348182的博客 596

用urdf给自己的ROS小车编写模型

3.3 使用urdf编写自己的ROS小车模型 3.3.1 常见的ROS小车结构有哪些? 下面就是常见的ROS小车,相信在大家的脑海里已经有了自己小车的样子,下面我和大家一起使用urdf对ros小车建模。 这里只对urdf进行简单介绍,然后就带大家使用urdf最基础的标签,建立机器人的urdf机器人模型。关于更多细节,请参看官网:http://wiki.ros.org/urdf/Tutorials 3.3.2 什么是urdf?建模的原因? 什么是urdf? URDF(Unified Robot Descri

「小白学移动机器人」一个专注分享移动机器人相关知识的公众号! 1万+

基于44B0平台的uC-Linux Web服务器实现方法研究

  摘要:本文介绍了在S3C44B0X型ARM7平台上实现uCLinux下的Web 服务器的几种途径;对实现uCLinux下的静态、动态Web页面技术进行了分析和比较,并给出了一个通过网络远程访问温度传感器的实例。 关键词:uCLinux Web服务器 动态W

yingfox的专栏 1115

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

uclinux boa服务器在s3c44b0配置移植

<br />1.web服务器的工作原理<br />        web 服务器作为一个数据载体,可以将本地的信息和数据通过网络传递给远端发出请求的客户,这在远程监控的实现有很大的意义。web服务器监听用户端的服务请求,根据用户请求的类型提供相应的服务。用户端使用web浏览器和web服务器进行通信。web服务器在接收到用户端的请求后,处理用户请求并返回需要的数据。一个完整的HTTP事务一般由以下四个阶段组成:<br />l 客户与服务器建立TCP连接;<br />l 客户向服器发送请求;<br /> 如果请

嵌入精灵 1545

假人有限元模型

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

S3C44B0(1):uclinux中boa web server的配置

uclinux中boa web server的配置(转贴并修改)一、环境准备编译环境:arm-elf-tools-20040427.sh编译工具:arm-elf-*板子型号:s3c44b0 公测板 二、编译配置1、选择Kernel/Library/Defaults Selection -> Customize Vendor/User Settings -> Netw

GodSpeed513的专栏 2183

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

php连接c webserver,uClinux下的Web Server(主要是boa服务器)

uCLinux 环境下,主要有三个Web 服务器:httpd、thttpd和Boa。httpd是最简单的一个Web 服务器,它的功能最弱,不支持认证,不支持CGI。如果Web 服务器仅需提供一些静态页面,例如简单的在线帮助、系统介绍等,完全可以用静态服务器httpd来实现。thttpd和Boa都支持认证、CGI等,功能都比较全。若需提高系统的安全性,或需要与用户进行交互,例如数据查询、实时状态查询...

weixin_34672875的博客 280

嵌入式Linux开发资源大全

1.Linux资源Linux以其开源、免费的特点而成为嵌入式系统的优选操作系统,然而它还有一个巨大的优势就是其浩瀚无限的资源!即无数各色的maillist,下面给出各个嵌入式Linux的站点资源:(1)uClinux:所有NOMMU的处理器都跑uClinuxuClinux发行包下载点:http://www.uclinux.org/MAILLIST搜索引擎:http://mailman.uclinu

489

如何配置uClinux实现简易HTTP应用(显示web网页)

导读:   1用户选项配置   在用户选项的network application中,选中“Boa”和“httpd”两项服务。   2建立home/httpd目录   修改44b0/makefile文件,加入/home/httpd目录;   将测试网页index.html拷贝到该目录下,下面是一个最为简单的HTML语言写成的测试网页:         A test web page   

yingfox的专栏 1172

【STM32】 ADC 完全指南:从模拟信号采样量化到五大架构原理

本文系统介绍ADC核心概念与五大主流架构。模拟信号具时间与幅值连续性,需经采样(满足奈奎斯特准则防混叠)、量化(引入±1/2LSB误差,SNR≈6.02N+1.76dB)、编码三步转为数字信号。重点解析Flash(并行高速但受限于比较器数量)、SAR(逐次逼近,低功耗适合MCU如STM32)、双积分(高精度抗工频,用于万用表)、流水线(高速吞吐)及Σ-Δ(高分辨率,靠过采样与噪声整形)五类架构原理、优缺点与应用场景。强调分辨率≠精度,选型本质是速度、精度、功耗与面积的权衡。

专注后端与底层技术,分享实战干货与学习笔记,梦想进入字节跳动,步履不停,热爱不止。 428

18.STM32F103C8T6时钟系统基础

本文以电脑与单片机类比,阐释时钟系统在嵌入式开发中的核心作用。单片机内核类比CPU,AHB/APB类比PCle与USB接口,Flash与RAM对应硬盘与内存。通过CubeMX配置时钟,从8MHz内部时钟到72MHz外部晶振,改变HCLK影响主频,进而改变板载LED闪烁速度。分析for循环耗时:虽理论800万次循环应耗1秒,但实际受指令周期、编译优化(可能删除空循环)、数据类型及中断影响,耗时可达数秒或趋近零。强调时钟频率决定“心跳”,但精准定时需考虑多因素,验证时钟差异需依赖实际配置调整。

2603_94865212的博客 210

基于STM32的智能浇花系统

本文设计基于STM32F103C8T6的智能浇花系统,集成DHT11、YL-69、MQ-135、GL5528四类传感器,实现温湿度、土壤湿度、CO₂浓度与光照的实时监测。系统支持自动、手动、远程三模式联动控制,通过ESP8266-01S以MQTT协议上云,配合手机APP实现数据可视化与远程指令下发。硬件采用多通道ADC采样、继电器驱动与OLED显示,软件实现精准时序控制与双向通信。测试表明系统稳定可靠,完整覆盖“感知—控制—云联”IoT全链路,具备高扩展性与工程实践价值。

weixin_45732499的博客 154

35ms 抗量子握手:ESP32-S3 跑通 ML-KEM-768

ML-KEM(Module-Lattice-based Key Encapsulation Mechanism)基于格密码,是 NIST 2024 年正式发布的 FIPS 203 标准。选 768 参数级(而不是更低的 512)是因为它被广泛视为"长期安全"档位——CATAPULT 等行业联盟也推荐 IoT 长寿命设备直接上 768。密钥交换的抗量子性。现有 IoT 设备大量使用 ECDH,量子计算机(Shor 算法)一旦可用,ECDH 直接失效。

嵌入式单片机实验室 208
上一篇: 如何利用Video4Linux获取摄像头数据
下一篇: 摄像头(WebCam)在Linux操作系统中的驱动方法 (v0.1b)
zhulingchen
博客等级 码龄20年 71粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值