SylixOS I/O系统

初识SylixOS 初识SylixOS 一、SylixOS概述 SylixOS是一款支持对称多处理器(SMP)的大型嵌入式实时操作系统,支持 ARM、MIPS、PowerPC、x86、SPARC、RISC-V 等架构处理器,支持主流国产通用处理器,如飞腾 1500A、龙芯 2F、龙芯 3A 等。SylixOS诞生于 2006 年,起初它只是一个小型多任务调度器,经过多年开发SylixOS 目前已经成为一个功能完善、性能卓越、可靠稳定的嵌入式系统软件开发平台。 二、SylixOS应用领域 SylixOS 采用抢占式、多任务、硬实 阅读详情

SylixOS I/O系统简介

SylixOS 兼容标准的POSIX输入输出系统,使用户非常容易上手。SylixOS 的I/O概念与UNIX兼容系统相同,认为一切都是文件。这些文件有不同的类型,它们包括:

目录文件:这个文件包含了其他文件的名字以及这些文件的指针。
块设备文件:这种文件提供的 I/O 接口标准符合 SylixOS 对块设备的定义。
字符设备文件:这是标准的不带缓冲的设备文件,系统中的设备不是块设备就是字符设备。
FIFO文件:管道通信文件。它对应了一个命名管道。
套接字(socket)文件:进程间或者主机间的网络通信。

在SylixOS中对文件的操作也同样遵循UNIX的方法,主要通过open、read、write、close等函数调用来操作文件。

SylixOS I/O驱动结构

SylixOS中I/O驱动结构分为ORIG型和NEW_1型,下面的两幅图分别对应了这两种类型的驱动结构。

ORIG型驱动结构


NEW_1型驱动结构

从两幅图可以看出NEW_1型驱动结构在ORIG型驱动结构的基础上增加了文件节点层(这一层相当于UNIX系统的vnode),这一层的引入,使SylixOS对文件的操作支持了记录锁,文件权限的功能。下面我重点学习一下文件节点层之下的各层。

SylixOS设备头

typedef struct {
    LW_LIST_LINE               DEVHDR_lineManage;              /*  设备头管理链表              */
    UINT16                     DEVHDR_usDrvNum;                /*  设备驱动程序索引号           */
    PCHAR                      DEVHDR_pcName;                  /*  设备名称                   */
    UCHAR                      DEVHDR_ucType;                  /*  设备 dirent d_type        */
    atomic_t                   DEVHDR_atomicOpenNum;           /*  打开的次数                 */
    PVOID                      DEVHDR_pvReserve;               /*  保留                      */
} LW_DEV_HDR;
typedef LW_DEV_HDR            *PLW_DEV_HDR;

上面结构就是SylixOS设备头结构,此结构中包含以下一些信息:

  • DEVHDR_lineManage这是一个设备链表,设备安装时将自动链到系统设备链表上;
  • DEVHDR_usDrvNum设备驱动程序索引号,SylixOS内核维护了一个驱动表如上面的两个图所示,每一个SylixOS设备都对应了一个驱动表项,当然不同的设备可以对应到同一个驱动表项,也就是说可以拥有一套驱动方法;
  • DEVHDR_pcName设备名字,每一个SylixOS设备都应该有一个唯一的名字,如“/dev/hotplug”;
  • DEVHDR_ucType设备类型,例如,字符设备类型、块设备类型等;
  • DEVHDR_atomicOpenNum这个成员记录了设备的打开次数,内核提供了下面几个函数对它进行操作;
INT  LW_DEV_INC_USE_COUNT(PLW_DEV_HDR  pdevhdrHdr);  /* 增加一次打开计数    */
INT  LW_DEV_DEC_USE_COUNT(PLW_DEV_HDR  pdevhdrHdr);  /* 减少一次打开计数    */
INT  LW_DEV_GET_USE_COUNT(PLW_DEV_HDR  pdevhdrHdr);  /* 获得打开计数        */
  • DEVHDR_pvReserve暂时保留。

所有安装的设备将被链到下面这个链表头上,系统进行统一管理。

LW_LIST_LINE_HEADER   _S_plineDevHdrHeader;     /*  设备表表头                  */

SylixOS驱动结构

typedef struct {
    LONGFUNCPTR                DEVENTRY_pfuncDevCreate;      /*  建立函数                    */
    FUNCPTR                    DEVENTRY_pfuncDevDelete;      /*  删除函数                    */

    LONGFUNCPTR                DEVENTRY_pfuncDevOpen;       /*  打开函数                    */
    FUNCPTR                    DEVENTRY_pfuncDevClose;      /*  关闭函数                    */

    SSIZETFUNCPTR              DEVENTRY_pfuncDevRead;       /*  读设备函数                  */
    SSIZETFUNCPTR              DEVENTRY_pfuncDevWrite;       /*  写设备函数                  */

    SSIZETFUNCPTR              DEVENTRY_pfuncDevReadEx;      /*  读设备函数扩展函数          */
    SSIZETFUNCPTR              DEVENTRY_pfuncDevWriteEx;     /*  读设备函数扩展函数          */

    FUNCPTR                    DEVENTRY_pfuncDevIoctl;      /*  设备控制函数                */
    FUNCPTR                    DEVENTRY_pfuncDevSelect;     /*  select 功能                 */
    OFFTFUNCPTR                DEVENTRY_pfuncDevLseek;     /*  lseek 功能                  */

    FUNCPTR                    DEVENTRY_pfuncDevFstat;     /*  fstat 功能                  */
    FUNCPTR                    DEVENTRY_pfuncDevLstat;     /*  lstat 功能                  */

    FUNCPTR                    DEVENTRY_pfuncDevSymlink;    /*  建立链接文件                */
    SSIZETFUNCPTR              DEVENTRY_pfuncDevReadlink;    /*  读取链接文件                */

    FUNCPTR                    DEVENTRY_pfuncDevMmap;       /*  文件映射                    */
    FUNCPTR                    DEVENTRY_pfuncDevUnmap;      /*  映射结束                    */

    BOOL                       DEVENTRY_bInUse;            /*  是否被使用                  */
    INT                        DEVENTRY_iType;             /*  设备驱动类型                */

    LW_DRV_LICENSE             DEVENTRY_drvlicLicense;     /*  驱动程序许可证              */
} LW_DEV_ENTRY;
typedef LW_DEV_ENTRY          *PLW_DEV_ENTRY;

上面就是SylixOS目前支持的驱动方法,基本上涵盖了设备的各种操作,当然, Linux程序员可能更习惯于struct file_operations,SylixOS为了兼容这部分,也加入了struct file_operations。

SylixOS字符设备驱动

通过上面的一个简单介绍,接下来我们写一个简单的字符设备驱动来简单的练习一下。下面的程序展示了一个SylixOS字符设备的编写方法,程序实现了一个字符设备的读、写。

#define __SYLIXOS_KERNEL
#include <SylixOS.h>

typedef struct {
    LW_DEV_HDR   CDEV_devhdr;
    CHAR         CDEV_cBuf[64];
    time_t       CDEV_time;
} CDEV;

static INT  devDrvNum = -1;

static LONG  devOpen (CDEV  *pcdev, PCHAR  pcName, INT  iFlag, INT  iMode)
{
    if (!pcdev) {
        _ErrorHandle(EFAULT);
        return  (PX_ERROR);
    }

    LW_DEV_INC_USE_COUNT(&pcdev->CDEV_devhdr);

    return  ((LONG)pcdev);
}

static INT  devClose (CDEV  *pcdev)
{
    if (!pcdev) {
        _ErrorHandle(EFAULT);
        return  (PX_ERROR);
    }

    if (LW_DEV_GET_USE_COUNT(&pcdev->CDEV_devhdr)) {
        LW_DEV_DEC_USE_COUNT(&pcdev->CDEV_devhdr);
    }

    return  (ERROR_NONE);
}

static ssize_t devRead (CDEV  *pcdev, PVOID  pvBuf,  size_t  stLen)
{
    ssize_t   stTempLen;

    stTempLen = min(stLen, 64);

    lib_memcpy(pvBuf, (PVOID)&pcdev->CDEV_cBuf[0], stTempLen);

    return  (stTempLen);
}

static ssize_t devWrite (CDEV  *pcdev, PVOID  pvBuf,  size_t  stLen)
{
    ssize_t   stTempLen;

    stTempLen = min(stLen, 64);

    lib_memcpy((PVOID)&pcdev->CDEV_cBuf[0], pvBuf, stTempLen);

    return  (stTempLen);
}

static INT  devIoctl (CDEV  *pcdev, INT iCmd, LONG  lArg)
{
    INT                  iError = ERROR_NONE;
    struct stat         *pstatGet;

    switch (iCmd) {

    case FIOFSTATGET:
        pstatGet = (struct stat *)lArg;
        if (pstatGet) {
            pstatGet->st_dev     = (dev_t)pcdev;
            pstatGet->st_ino     = (ino_t)0;          /*  相当于唯一节点              */
            pstatGet->st_mode    = 0666 | S_IFCHR;
            pstatGet->st_nlink   = 1;
            pstatGet->st_uid     = 0;
            pstatGet->st_gid     = 0;
            pstatGet->st_rdev    = 1;
            pstatGet->st_size    = 0;
            pstatGet->st_blksize = 0;
            pstatGet->st_blocks  = 0;
            pstatGet->st_atime   = pcdev->CDEV_time;
            pstatGet->st_mtime   = pcdev->CDEV_time;
            pstatGet->st_ctime   = pcdev->CDEV_time;

        } else {
            errno  = EINVAL;
            iError = (PX_ERROR);
        }
    }

    return  (iError);
}

static struct file_operations  fop = {
        .owner = THIS_MODULE,
        .fo_open = devOpen,
        .fo_close = devClose,
        .fo_read = devRead,
        .fo_write = devWrite,
        .fo_ioctl = devIoctl
};

INT  devDrvInstall (VOID)
{
    if (devDrvNum > 0) {
        return  (ERROR_NONE);
    }

    devDrvNum = API_IosDrvInstallEx(&fop);

    DRIVER_LICENSE(devDrvNum,     "Dual BSD/GPL->Ver 1.0");
    DRIVER_AUTHOR(devDrvNum,      "xx.xxx");
    DRIVER_DESCRIPTION(devDrvNum, "char dev driver.");

    return  (devDrvNum > 0 ? ERROR_NONE : PX_ERROR);
}

INT devCreate (VOID)
{
    CDEV  *pcdev;
    INT    iRet;

    pcdev = __SHEAP_ALLOC(sizeof(CDEV));
    if (!pcdev) {
        return  (PX_ERROR);
    }

    lib_bzero(pcdev, sizeof(CDEV));

    iRet = API_IosDevAddEx(&pcdev->CDEV_devhdr, "/dev/cdev", devDrvNum, DT_CHR);
    if (iRet != ERROR_NONE) {
        __SHEAP_FREE(pcdev);
        return  (PX_ERROR);
    }

    pcdev->CDEV_time = lib_time(LW_NULL);

    return  (ERROR_NONE);
}

VOID devDelete (VOID)
{
    PCHAR        pcTail;
    PLW_DEV_HDR  pdevhdr;

    pdevhdr = API_IosDevFind("/dev/cdev", &pcTail);

    API_IosDevDelete(pdevhdr);
    API_IosDrvRemove(devDrvNum, LW_TRUE);
}

void module_init (void)
{
    INT  iRet;

    iRet = devDrvInstall();
    if (iRet == ERROR_NONE) {
        iRet = devCreate();
        if (iRet != ERROR_NONE) {
            printk(KERN_ERR "Char device install failed.\n");
        }
    } else {
        printk(KERN_ERR "Char driver install failed.\n");
    }
}

void module_exit (void)
{
    devDelete();
}
SylixOS 经得起检验的国产操作系统 (五) 本篇开始介绍“信号系统”、“IO系统”以及“标准设备”。详细信息请访问SylixOS官网:http://www.sylixos.com。 阅读详情

相关推荐

SylixOS 应用开发指南

SylixOS是一款可以应用于多种嵌入式平台的嵌入式实时操作系统,SylixOS本身集成了丰富的中间件,这给软件工程师的开发与维护带来了极大的方便。

SylixOS启程之旅

随着SylixOS在各领域的广泛应用,更多的工程师想深入了解SylixOS的产品特性、功能特点、应用场景。翼辉信息针对客户需求与当前疫情特殊情况,首批推出10节网络公开课。通过课程您将全面了解SylixOS的功能与使用方法。这也将为您后续产品选型提供一个优秀产品的选择。

Win10家庭版没有Hyper-V?教你一招轻松解决(含避坑指南)

本文详细介绍了在Win10家庭版中启用Hyper-V的完整实战指南。通过DISM工具链绕过系统版本限制,无需重装系统即可完整启用所有Hyper-V组件,适用于开发者测试多系统环境和安全隔离应用场景。文章包含详细操作步骤、常见问题解决方案及性能优化配置,帮助用户轻松解决Win10家庭版没有Hyper-V的问题。

weixin_29239661的博客 495

SylixOS到底是不是真国产?

经过多年的努力,越来越多的客户相信SylixOS是真正的国产操作系统,翼辉也参与了众多国家及重大专项,有力的支持了国内信息工业自主可控发展。

ScilogyHunter的博客 7710

汽车底盘技术解析:从悬架调校到智能化,如何评价国产车底盘实力

汽车底盘作为决定车辆驾驶质感、安全性和耐久性的核心系统,其技术内涵远不止于悬架结构。从行驶系、转向系到制动系的协同工作,底盘调校是一门融合机械原理与工程实践的艺术。在电动化与智能化浪潮下,底盘技术正经历从被动适应到主动响应的变革,CDC可变阻尼减震器和空气悬架等技术的应用,让底盘具备了通过OTA升级实现性能优化的可能。国产汽车品牌如奇瑞、吉利等,通过平台化架构研发与调校经验积累,正推动底盘技术从“能用”向“好用”乃至“塑造独特驾驶风格”迈进。理解底盘技术,需超越简单的结构对比,关注其在实际路况中的滤震性、支

weixin_34413103的博客 387

嵌入式通信协议----Wi-Fi协议详解(一)

Wi-Fi,又称“无线网络”,是Wi-Fi联盟的商标,一个基于IEEE 802.11标准的无线局域网技术。“Wi-Fi”常写作“WiFi”或“Wifi”,但是这些写法并没有被Wi-Fi联盟认可。Wi-Fi产品经由Wi-Fi联盟的一家独立授权测试实验室进行严格测试,产品成功通过测试后,授予制造商或销售商使用Wi-Fi标志、Wi-Fi CERTIFIED标志和相关商标,Wi-Fi联盟使用术语“Wi-Fi CERTIFIED”来称呼这类通过认证的产品。

聪聪的成长之路 1656

SylixOS学习三—— SylixOS的引导与安装1

自学SylixOS启程之旅笔记一、SylixOS 引导过程分析1. SylixOS 常用引导程序2. SylixOS 支持ARM设备的几种引导方式3.SylixOS引导过程分析——总流程分析3.1 一个设备从上电到启动完成的整个流程3.2 引导程序和操作系统镜像的存储3.3 U-Boot引导SylixOS3.4 引导过程中的几个基本概念 《SylixOS启程之旅》是一门公开课,点开下面链接即可观看: SylixOS启程之旅 一、SylixOS 引导过程分析 1. SylixOS 常用引导程序 U-Boo

graceyun的博客 4420

什么是 SAP ABAP AMDP?

SAP HANA是SAP开发的一种内存数据库管理系统,它具有出色的性能和处理大规模数据的能力。为了充分利用SAP HANA的性能,SAP引入了AMDP技术,以便将数据库操作推送到数据库服务器执行,从而减少数据传输和处理时间。AMDP方法通常需要输入参数和输出参数。输入参数用于传递数据到SQLScript代码,而输出参数用于接收SQLScript代码的结果数据。ENDMETHOD.ENDCLASS.我们定义了一个输入参数来传递销售订单数据,以及一个输出参数来接收计算结果。ENDMETHOD.

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 908

翼辉sylixos国产嵌入式操作系统介绍

SylixOS 的自主研发之路并非一帆风顺。从 2006 年完成最基本的内核,到 2007 年增加 I/O 系统,再到 2008 年引入网络与文件系统和实用工具,以及后续不断丰富的功能和对各种处理器体系结构的支持,SylixOS 一直在不断进化和完善。在当今科技飞速发展的时代,国产嵌入式操作系统领域不断涌现出创新的成果,比如都江堰操作系统(djyos),rt-thread os,sylixos,其中 SylixOS 作为一款由中国人自主开发的大型嵌入式实时操作系统,正以其独特的魅力和卓越的性能崭露头角。

低速无人驾驶自动技术 2702

Clawdbot安装教程:从零开始到接入飞书

这几天,Clawdbot把整个科技圈都刷屏了。就是这个胖逼小龙虾🦞。不过现在改名叫Moltbot了。原因很简单:被Anthropic告了。Anthropic觉得Clawdbot这名字太像Claude Code的延伸产品,要求改名。真的,Anthropic你这家伙…更离谱的是,因为Clawdbot太火,Mac Mini都被抢断货了。无数人为了用它,疯狂买Mac Mini。我刚打开美团外卖,发现居然没货了???

Maynor的博客 2179

18年陕西省TI杯电赛无人机赛题视觉部分

更新: 相同任务另外两种不同的视觉方法: https://blog.youkuaiyun.com/qq_41895747/article/details/97613077 https://blog.youkuaiyun.com/qq_41895747/article/details/97614971 任务:识别前方的方框,无人机从方框中飞出去 视觉任务:识别特定方框,返回方框中心坐标 # -*- codin...

沉迷单车的追风少年 1506

SylixOS I/O系统

概述I/O 系统又称作输入输出系统, SylixOS兼容POSIX标准输入输出系统,SylixOS的I/O概念继承了UNIX操作系统的I/O概念,认为一切皆为文件。与UNIX操作系统相同, SylixOS中的文件也分为不同的类型。SylixOS的I/O系统结构,分为ORIG驱动结构和NEW_1驱动结构。NEW_1驱动结构就是在ORIG驱动结构基础上增加了设备节点结构,其负责文件访问权限、文件记录...

weixin_33963189的博客 187

为什么 CL_DEMO_OUTPUT 不能用于生产用途:不仅是 demo 标签那么简单

摘要:CL_DEMO_OUTPUT 虽能快速展示ABAP数据,但存在严重生产风险:1) 官方定位为示例工具,不承诺兼容性与支持;2) 非Released API,云环境直接不可用;3) 依赖SAP GUI,缺乏日志关键特性;4) 存在版本漂移、类型限制、性能隐患及安全缺口。典型事故案例包括后台Job崩溃、Gateway链路污染和云迁移失败。生产环境应改用结构化日志(如SLG1)或稳定API输出,避免将调试工具误作工程方案。(149字)

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 131

SylixOS的I/O系统结构类型(ORIG型和NEW_1型)

SylixOS 的 I/O 系统结构,由于历史原因分为 ORIG 型驱动结构和 NEW_1 型驱动结构。NEW_1 型驱动结构在 ORIG 型驱动结构的基础上增加了文件节点(文件访问权限、文件记录锁等功能)。 ![ORIG型驱动结构](https://img-blog.csdnimg.cn/20210103154253381.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6L...

qq_41915323的博客 570

AutoSAR MemMap模块概述及配置参数详解

这个模块是干啥的?它是用来配置Memory Mapping and Compiler Abstraction module。

4508

VB摄像头监控

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

SyliOS I/O 系统

I/O系统又称作输入输出系统,SylixOS 兼容POSIX标准输入输出系统,SylixOS 的IO概念继承了UNIX操作系统的I/O概念,认为一切皆为文件。与UNIX操作系统相同, SylixOS中的文件也分为不同的类型。 文件类型 SylixOS 系统最常见的是普通文件和目录文件,但也有另外一些特殊文件类型,这些文件类型包括以下几种: 普通文件,这是最常见的文件类型,这种文件包含了某种形式的数据。这种数据无论是普通文本还是二进制,对于 SylixOS 来说没什么区别。需要注意的是,一个二进制

动感超人_Crush 901

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

sylixos与harmonyOS,SylixOS 下的IO系统调用

SylixOS标准I/O基本介绍1.1 简介I/O 系统又称作输入输出系统,SylixOS 兼容POSIX标准输入输出系统,SylixOS的I/O概念继承了UNIX操作系统的I/O概念,认为一切皆为文件。与UNIX操作系统相同, SylixOS中的文件也分为不同的类型。1.2 两种I/O类型I/O系统分为 ORIG 型驱动结构和 NEW_1 型驱动结构,如图 1.1和图 1.2。图 1.1 ORI...

weixin_39710295的博客 218

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

SylixOS 下的IO系统调用

SylixOS标准I/O基本介绍 简介 I/O 系统又称作输入输出系统,SylixOS 兼容POSIX标准输入输出系统,SylixOS的I/O概念继承了UNIX操作系统的I/O概念,认为一切皆为文件。与UNIX操作系统相同, SylixOS中的文件也分为不...

chicuangan8636的博客 147

国产化实时操作系统研究之旅8.2-操作系统使用体验之I/O

I/O 系统又称作输入输出系统,SylixOS 兼容 POSIX 标准输入输出系统,SylixOS 的 I/O概念继承了 UNIX 操作系统的 I/O 概念,认为一切皆为文件。与 UNIX 操作系统相同,SylixOS中的文件也分为不同的类型。 文件类型 SylixOS 系统最常见的是普通文件和目录文件,但也有另外一些特殊文件类型,这些文件类型包括以下几种: 普通文件,这是最常见的文件类型,这种文件包含了某种形式的数据。这种数据无论是普通文本还是二进制,对于 SylixOS 来说没什么区别。需要注意的

xian_gw的博客 339

SylixOS IO系统

概述 I/O 系统又称作输入输出系统, SylixOS兼容POSIX标准输入输出系统,SylixOS的I/O概念继承了UNIX操作系统的I/O概念,认为一切皆为文件。与UNIX操作系统相同, SylixOS中的文件也分为不同的类型。 SylixOS的I/O系统结构,分为ORIG驱动结构和NEW_1驱动结构。NEW_1驱动结构就是在ORIG驱动结构基础上增加了设备节点结构,其负责文件访问权限、文件...

qq_29476813的博客 404

SylixOS Shell使用

什么是Shell Shell是操作系统“外壳”程序,它向使用者提供一个基于命令行类型的使用界面,也可称作命令解析器,系统开发人员常使用此接口来操作计算机。几乎所有的操作系统都包含shell程序,例如Linux系统中较为常见的shell是bash程序,Windows系统中的shell程序是cmd.exe。SylixOS也不例外,SylixOS也包含自己的shell程序:ttinyShell

糊涂岁月的专栏 3143

SylixOS里的错误号【3】--- 系统错误号

SylixOS里的系统错误号定义位于libsylixos\SylixOS\system\include\s_error.h文件中。 /********************************************************************************************************* ** ** 中国软件开源组织 ** **

ScilogyHunter的博客 570

SylixOS 中 select 原理及使用分析

select 是操作系统多路 I/O 复用技术实现的方式之一。select 函数允许程序监视多个文件描述符,等待所监视的一个或者多个文件描述符变为“准备好”的状态。所谓的”准备好“状态是指:文件描述符不再是阻塞状态,可以用于某类 IO 操作了,包括可读,可写,发生异常三种。

日常学习记录 1134

SylixOS块设备驱动模型

块设备简介 块设备是I/O设备中的一类,是将信息存储在固定大小的块中,每个块有自己的地址,数据块大小通常在512字节到32768字节之间。块设备的基本特征是每个块都能独立于其他块而读写。磁盘是最常见的块设备。 技术实现 SylixOS实现了兼容POSIX标准的输入输出系统,SylixOS的I/O概念继承了UNIX操作系统的概念,认为一切皆为文件。本章介绍SylixOS在I/O层之下提供的块设

huikai309的博客 607
上一篇: SylixOS 热插拔系统
下一篇: SylixOS xinput 系统
flags_s
博客等级 码龄11年 15粉丝 9原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值