rootfs和ramdisk的制作

android img 制作工具,Android 镜像文件制作 【ramdisk.img system.img userdata.img】 Android项目生成的镜像文件包括ramdisk.img, system.img, userdata.imgramdisk.img 是out/target/product/项目名/root 目录经过打包压缩而成; system.img是out/target/product/项目名/system目录打包压缩而成; userdata.img是out/target/product/项目名/data目录... 阅读详情
 1、ramdisk是一个最小的linux rootfs系统,它包含了除内核以外的所有linux系统在引
导和管理时需要的工具,包含如下目录:bin,dev,etc,home,lib,mnt,proc,sbin,usr,va
r。还需要有一些基本的工具:sh,ls,cp,mv……(位于/bin目录中);必要的配置文
件:inittab,rc,fstab……位于(/etc目录种);必要的设备文件:/dev/tty*,/dev/co
nsole,
/dev/men……(位于/dev目录中);sh,ls等工具必要的运行库:glibc。

2、首先建立一个空的ramdisk image文件:
xuxian@omap1:~$cd /home/xuxian/fsys
xuxian@omap1:~$dd if=/dev/zero of=rootfs bs=1M count=16
ramdisk image文件名为rootfs,大小为16M。
把它格式化为你需要的文件系统,比如 ext2 ,ext3等。
比如ext3 :
xuxian@omap1:~$mkfs.ext3 -m 0 -N 2000 ./rootfs
这里的-N 2000表示最大的node数为2000。因为linux的设备也是基于文件系统的,需要
占用文件系统的node,如果数目建立的太少,以后可能会不够用。
然后把它mount到某个目录:
xuxian@omap1:~$mkdir ramdisk
xuxian@omap1:~$mount -t ext3 -o loop ./rootfs ./ramdisk
xuxian@omap1:~$cd ramdisk
xuxian@omap1:~$ls
xuxian@omap1:~$lost+found
通过这一步,已经得到一个空的ramdisk image文件了。

3、建立各个目录:
xuxian@omap1:~/fsys/ramdisk$mkdir dev
xuxian@omap1:~/fsys/ramdisk$mkdir proc
xuxian@omap1:~/fsys/ramdisk$mkdir etc
xuxian@omap1:~/fsys/ramdisk$mkdir sbin
xuxian@omap1:~/fsys/ramdisk$mkdir bin
xuxian@omap1:~/fsys/ramdisk$mkdir lib
xuxian@omap1:~/fsys/ramdisk$mkdir mnt
xuxian@omap1:~/fsys/ramdisk$mkdir usr
xuxian@omap1:~/fsys/ramdisk$mkdir tmp
xuxian@omap1:~/fsys/ramdisk$mkdir root
xuxian@omap1:~/fsys/ramdisk$mkdir home
xuxian@omap1:~/fsys/ramdisk$mkdir var
xuxian@omap1:~/fsys/ramdisk$mkdir usr/bin
xuxian@omap1:~/fsys/ramdisk$mkdir usr/sbin
xuxian@omap1:~/fsys/ramdisk$mkdir usr/lib

对单用户来说,home和root不是必须的。

4、/dev目录:

omap1:/home/xuxian/fsys/ramdisk/dev$mknod -m 600 console c 5 1
omap1:/home/xuxian/fsys/ramdisk/dev$mknod -m 666 tty c 5 0
omap1:/home/xuxian/fsys/ramdisk/dev$mknod -m 600 tty0 c 4 0
omap1:/home/xuxian/fsys/ramdisk/dev$mknod -m 600 ttyS0 c 4 64

也可以用一种简单的方法来创建/dev里面的文件:首先你要下载一个文件系统

omap1:/home/xuxian/fsys/ramdisk/dev$cp -dpR /home/xuxian/osk/rootfs2.6/dev/*
.
这个命令把下载的文件系统的/dev目录拷贝到ramdisk的/dev中。dp参数表示符号连接拷
贝为符号连接,不拷贝连接的符号,并且拷贝源文件的所有属性。

5、/lib目录:

下面是arm-linux的动态库,可以选择一些必须的拷贝到ramdisk的lib下。
omap1:/home/iaadoa/work/crosstool/gcc-3.3.2-glibc-2.3.2/arm-linux/arm-linux/l
ib# ls
crt1.o                    libc_nonshared.a   libmcheck.a            
libnss_hesiod.so.2       librt.a
crti.o                    libcrypt-2.3.2.so  libmemusage.so         
libnss_nis-2.3.2.so      librt.so
crtn.o                    libcrypt.a         libm.so                
libnss_nisplus-2.3.2.so  librt.so.1
gconv                     libcrypt.so        libm.so.6              
libnss_nisplus.so        libSegFault.so
gcrt1.o                   libcrypt.so.1      libnsl-2.3.2.so        
libnss_nisplus.so.2      libstdc++.a
ld-2.3.2.so               libc.so            libnsl.a               
libnss_nis.so            libstdc++.la
ld-linux.so.2             libc.so.6          libnsl.so              
libnss_nis.so.2          libstdc++.so
ldscripts                 libc.so_orig       libnsl.so.1            
libpcprofile.so          libstdc++.so.5
libanl-2.3.2.so           libdl-2.3.2.so     libnss_compat-2.3.2.so 
libpthread-0.10.so       libstdc++.so.5.0.5
libanl.a                  libdl.a            libnss_compat.so       
libpthread.a             libsupc++.a
libanl.so                 libdl.so           libnss_compat.so.2     
libpthread_nonshared.a   libsupc++.la
libanl.so.1               libdl.so.2         libnss_dns-2.3.2.so    
libpthread.so            libthread_db-1.0.so
libBrokenLocale-2.3.2.so  libg.a             libnss_dns.so          
libpthread.so.0          libthread_db.so
libBrokenLocale.a         libgcc_s.so        libnss_dns.so.2        
libpthread.so_orig       libthread_db.so.1
libBrokenLocale.so        libgcc_s.so.1      libnss_files-2.3.2.so  
libresolv-2.3.2.so       libutil-2.3.2.so
libBrokenLocale.so.1      libiberty.a        libnss_files.so        
libresolv.a              libutil.a
libbsd-compat.a           libieee.a          libnss_files.so.2      
libresolv.so             libutil.so
libc-2.3.2.so             libm-2.3.2.so      libnss_hesiod-2.3.2.so 
libresolv.so.2           libutil.so.1
libc.a                    libm.a             libnss_hesiod.so       
librt-2.3.2.so           Mcrt1.o



以下这些是必须的:

ld-2.3.2.so               libmemusage.so           libnss_nisplus.so.2
ld-linux.so.2             libm.so.6                libnss_nis.so.2
libanl-2.3.2.so           libnsl-2.3.2.so          libpcprofile.so
libanl.so.1               libnsl.so.1              libpthread-0.10.so
libBrokenLocale-2.3.2.so  libnss_compat-2.3.2.so   libpthread.so.0
libBrokenLocale.so.1      libnss_compat.so.2       libresolv-2.3.2.so
libc-2.3.2.so             libnss_dns-2.3.2.so      libresolv.so.2
libcrypt-2.3.2.so         libnss_dns.so.2          librt-2.3.2.so
libcrypt.so.1             libnss_files-2.3.2.so    librt.so.1
libc.so.6                 libnss_files.so.2        libSegFault.so
libdl-2.3.2.so            libnss_hesiod-2.3.2.so   libthread_db-1.0.so
libdl.so.2                libnss_hesiod.so.2       libthread_db.so.1
libgcc_s.so.1             libnss_nis-2.3.2.so      libutil-2.3.2.so
libm-2.3.2.so             libnss_nisplus-2.3.2.so  libutil.so.1

拷贝到ramdisk的lib目录下就行了。

6、安装busybox:

下载busybox-1.01
xuxian@omap1:~/osk$tar -xjvf busybox-1.01.tar.bz2
xuxian@omap1:~/osk/busybox-1.01$make TARGET_ARCH=arm CROSS=arm-linux-
PREFIX=/home/xuxian/fsys/ramdisk menuconfig
xuxian@omap1:~/osk/busybox-1.01$make TARGET_ARCH=arm CROSS=arm-linux-
PREFIX=/home/xuxian/fsys/ramdisk dep
xuxian@omap1:~/osk/busybox-1.01$make TARGET_ARCH=arm CROSS=arm-linux-
PREFIX=/home/xuxian/fsys/ramdisk
xuxian@omap1:~/osk/busybox-1.01$make TARGET_ARCH=arm CROSS=arm-linux-
PREFIX=/home/xuxian/fsys/ramdisk inatall
xuxian@omap1:~/fsys/ramdisk/bin$ls
addgroup  chown     dmesg   gzip      login  netstat  sed    true
adduser   cp        echo    hostname  ls     pidof    sh     umount
ash       date      egrep   ip        mkdir  ping     sleep  uname
busybox   dd        false   ipaddr    mknod  ps       su     usleep
cat       delgroup  fgrep   iproute   more   pwd      sync   vi
chgrp     deluser   grep    kill      mount  rm       tar    zcat
chmod     df        gunzip  ln        mv     rmdir    touch
这些就是可用的命令。

7、/etc下系统配置文件说明:

xuxian@omap1:~/fsys/ramdisk/etc/$vi inittab
#
# This is run first except when booting in single-user mode
#指定初始化文件

::sysinit:/etc/init.d/rcS

# /bin/sh
#
# Start an "askfirst" shell on the console (whatever that may be)
#启动时执行的shell

::askfirst:-/bin/sh

# Stuff to do when restarting the init process
#重启动作

::restart:/sbin/init

# Stuff to do before rebooting
::ctrlaltdel:/sbin/reboot

#关机时动作,卸载所有文件系统

::shutdown:/bin/umount -a -r
::shutdown:/sbin/swapoff -a

再来编写rcS脚本:

xuxian@omap1:~/fsys/ramdisk/etc/$mkdir init.d

xuxian@omap1:~/fsys/ramdisk/etc/$cd init.d

xuxian@omap1:~/fsys/ramdisk/etc/init.d$vi rcS
脚本如下:

#!/bin/sh

PATH=/bin:/sbin:/usr/bin:/usr/sbin

HOSTNAME=OMAP5912OSK
hostname $HOSTNAME
echo ""
echo "******************************************"
echo "Starting System Init for $HOSTNAME"
echo "******************************************"

# goto the init.d directory
cd /etc/init.d

# Mount the default file systems
mount -a # Mount the default file systems

# Configure network
#/sbin/ifconfig lo 127.0.0.1 netmask 255.0.0.0 broadcast 127.255.255.255
#/sbin/ifconfig eth0 128.247.75.151 netmask 255.255.254.0 broadcast
128.247.75.255
#/sbin/route add default gw 128.247.74.1 eth0

然后时rcS2脚本:

xuxian@omap1:~/fsys/ramdisk/etc/init.d$vi rcS2

#!/bin/sh
/bin/mount -n -o remount,rw /

/bin/mount -a
echo Starting Network
#modprobe i2c-core
#modprobe i2c-algo-bit
#modprobe i2c-omap1510
#modprobe soundcore
#modprobe omap-audio
#modprobe omap1510-aic23

/sbin/ifconfig lo 127.0.0.1 netmask 255.0.0.0 broadcast 127.255.255.255
/sbin/route add -net 127.0.0.0 netmask 255.0.0.0 lo
/sbin/ifconfig eth0 10.1.3.3 netmask 255.255.0.0 broadcast 10.1.255.255
/sbin/route add default gw 10.1.0.100 eth0
~
~

最后时编写fstab脚本,我的很简单:

xuxian@omap1:~/fsys/ramdisk/etc$vi fstab
proc            /proc           proc    defaults        0       0

8、用nfs检查根文件系统:

做完以上这些就可以用nfs来启动目标系统了。编辑/etc/exports加入/home/xuxian/fsy
s/ramdisk 192.168.4.190(rw,sync,no_root_squash,no_all_squash)其中192.168.4.19
0是目标板的ip。
连接目标板用tftp或者串口线下载u-boot和kernel,在u-boot的环境变量中加入:seten
v bootargs console=ttyS0,115200n8 noinitrd rw ip=dhcp root=/dev/nfs
nfsroot=192.168.0.11:/home/xuxian/fsys/ramdisk,nolock mem=30M其中192.168.0.11
是主机ip,/home/xuxian/fsys/ramdisk为ramdisk目录。

9、通过烧写flash检查文件系统

最后如果想生成image文件烧到flash中可以执行如下命令:

xuxian@omap1:~/fsys$umount ramdisk
xuxian@omap1:~/fsys$gzip -v9 rootfs

这样就生成了rootfs.gz文件,可以连同u-boot,kernel一起烧到flash中了。
编译和使用QEMU运行riscv linux内核 执行配置、编译和安装。 阅读详情

相关推荐

[RK3399 Linux] 使用busybox 1.36.1制作rootfs

[RK3399 Linux] 使用busybox 1.36.1制作rootfs

Systemcall名屋 665

爱快路由研究中关于rootfs.gz文件的解压缩问题

爱快路由研究中关于rootfs.gz文件的解压缩问题 友情提示,如果你看完标题,不知道我要说什么,请直接关闭这个页面,免得浪费你的时间. rootfs.gz文件格式分析 这个文件的头部信息比较特别,开头的字节是FD377A585A ) 在网上查询后,确认是xz文件格式,网站介绍如下: 所以改名为rootfs.xz,但是改名后无法解压缩,后来在官网上找到一个标准的xz文件,比较发现,文件尾部有些奇...

zzlufida的博客 3643

NXP S32K1 SPI驱动实战:从配置到DMA传输的完整流程解析

本文深入解析了NXP S32K1系列MCU的SPI驱动开发全流程。基于S32 Design Studio环境,详细阐述了从引脚配置、LPSPI模块初始化,到实现阻塞、中断及DMA三种传输模式的实战代码与配置要点。文章重点剖析了DMA传输的配置细节与性能优化,旨在帮助开发者构建高效、稳定的嵌入式SPI通信,并提供了SPI Flash驱动的综合案例。

blue42的博客 713

Debian 文件系统制作

转载在https://whycan.cn/t_2666.html 运行环境在ubuntu 18.04 0. 准备工作 sudo apt install qemu-user-static -y sudo apt install debootstrap -y mkdir rootfs 1.debootstrap 用的是清华大学开源软件镜像用其中一个 debootstrap --...

yytyu2017的博客 1345

用R语言做WGCNA分析全步骤一(附代码解读)【转载】

代码逐句分析一、文章来源二、基因共表达网络构建及模块识别1.数据导入、清洗及预处理2.检查过度缺失值和离群样本3.聚类做离群样本检测4.载入临床特征数据三、自动构建网络及识别模块1.确定合适的软阈值:网络拓扑分析2.一步构建网络和识别模块 一、文章来源 初学WGCNA,觉得博主的代码写的很不错,但其中很多代码在第一遍看的时候有很多地方不理解,后查阅了很多资料,终于看明白了,于是写了一篇笔记,记录自己的学习心得,有不准确的地方,还望各位大佬们不吝赐教~ 原文链接:WGCNA简明指南 二、基因共表达网络构建及模

qq_43138237的博客 2万+

Win10管理员权限的‘暗门’:从mmc.exe被阻止,聊聊UAC与自动提权那些事儿

本文深入解析Windows 10中UAC(用户账户控制)与自动提权机制,探讨mmc.exe被阻止的深层原因及解决方案。从UAC工作原理到自动提权机制,再到具体诊断与修复步骤,帮助用户理解并解决权限管理问题,同时平衡安全性与便利性。

weixin_30521161的博客 418

ramfs、tmpfs、rootfs、ramdisk介绍

内核在启动初始化过程中会解压缩initrd文件,然后将解压后的initrd挂载为根目录,然后执行根目录中的/init脚本(cpio格式的initrd为/init,而image格式的initrd为/initrc),您就可以在这个脚本中运行initrd文件系统中的udevd,让它来自动加载realfs(真实文件系统)存放设备的驱动程序以及在/dev目录下建立必要的设备节点。ramdisk的大小是固定的,安装在其上的文件系统大小也是固定的。

团长的专栏 3299

快手极速版抓包实战:安卓/iOS双端获取client_salt全流程解析(避坑指南)

本文详细解析了在安卓和iOS平台上获取快手极速版关键参数`client_salt`的全流程,包括环境配置、抓包工具使用、参数识别与转换等实战技巧。特别针对双端差异和反抓包机制提供了避坑指南,帮助开发者高效安全地完成数据获取任务。

weixin_29021195的博客 713

直接修改zynq petalinux编译出来的rootfs.cpio.gz文件内容

直接修改zynq petalinux编译出来的rootfs.cpio.gz文件内容 直接修改zynq petalinux编译出来的rootfs.cpio.gz文件内容 直接修改zynq petalinux编译出来的rootfs.cpio.gz文件内容

weixin_55163060的博客 1552

基于STM32、HAL库的 CH9102X USB转UART收发器 驱动程序设计

/ 或 UART_HWCONTROL_RTS_CTS。// 其他函数实现类似,使用HAL_UART_Transmit_IT, HAL_UART_Receive_IT等。UART_TXD <---> USARTx_RX (STM32接收)UART_RXD <---> USARTx_TX (STM32发送)* @param huart: UART句柄指针。* @param huart: UART句柄指针。* @param huart: UART句柄指针。* @param huart: UART句柄指针。

corlin6688的博客 506

有之以为利,无之以为用,在 RAP 开发里的虚实取舍

摘要(149字) SAP RAP框架通过"有"与"无"的哲学平衡实现业务应用价值。其"有"体现在CDS视图、行为定义、服务绑定等具体对象,为系统提供形体;而"无"则表现为保留的扩展空间、未暴露的实现细节和框架托管的生命周期。在采购审批应用中,RAP既通过明确定义的行为模型建立业务语义,又通过验证、动作等机制保持灵活性。这种架构既确保核心功能稳固,又为未来演进留出余地,印证了"有之以为利,无之以为用"的技术智慧

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

根文件系统rootfs的移植及制作镜像ramdisk.img

根文件系统的移植 介绍 【1】移植根文件系统的工具 —> busybox 1. 短小精悍 2. 版本更新较快,版本之间差异不大 【2】 如何获取busybox 1)https://busybox.net/downloads/ 选择busybox-1.32.0.tar.bz2版本 2)前往我的博客里下载 使用busybox工具制作根文件系统 1. 拷贝busybox-1.32.0.tar.bz2到ubuntu中 2. 解压缩 tar -vxf busybox-1.32.0.tar.b

weixin_48498880的博客 4181

《QGIS快速入门与应用基础》108:CGCS2000对应的投影坐标系

本文详细解析了CGCS2000地理坐标系对应的各类投影坐标系,包括高斯-克吕格3°带/6°带、UTM、地方独立投影和Web墨卡托投影。文章系统阐述了各投影类型的分带规则、参数设置、精度特性及适用场景,并提供了EPSG编码对照表和QGIS操作指南。通过"基准+投影"的绑定机制,这些投影坐标系实现了平面坐标与经纬度的精准转换,满足从大比例尺工程测量到Web地图服务等不同应用需求。内容涵盖投影原理、坐标格式、变形控制等关键技术要点,为GIS开发者和测绘人员提供了实用的参考信息。

LuckyHanMo的博客 540

利用busybox制作android下的ramdisk启动盘

有时候急了还就记不起来了,记录下。 step 1 :源码下载 到这里 http://www.busybox.net/  下载最新的busybox源码 直接下载源码包 或者git://git.busybox.net/busybox  用git来下载。 step 2: 编译busybox 进入busybox源码根目录,然后 make menuconfig 这里几个选项注意下 Bui

Qiang的专栏 2437

linux mmap系统调用

brk/mmap linux 提供了两个比较重要的系统调用brk 和mmap,用于向内核申请相应用户空间,内核会根据系统运行状态判定是否申请新的VMA来管理新申请的用户空间,brk和mmap在整个系统中都占有非常重要的地位。 brk()系统调用被gblic进行了进一步封装成malloc接口,用户层程序一般都是通过调用malloc,由glibc间接调用brk来向内核申请用户空间。brk申请的用户空间属于堆空间 mmap系统调用也可以向内核申请用户空间,不过与brk不同的师,mmap申请的空间属于mma.

weixin_42730667的博客 1275

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

linux rootfs.img的制作

linux rootfs.img的制作 cramfs是只读压缩的文件系统,文件系统类型可以是ext2,ext3,什么的,  cramfs和romfs只是一个文件系统类型,ramdisk相当于一块硬盘空间,可以理解为在内存中虚拟出一块硬盘来,所以它上面就可以有你linux支持的各种文件系统什么的。所以你问的,它和romfs和cramfs确实不是一个层次的概念。 ^-^恭喜你,你答

prownd的专栏 8164

老版QQ原生表情gif动态

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

Linux内核移植 | 制作 rootfs

Linux内核启动后,需要挂载根文件系统。本章介绍文件系统的制作过程,留几个参考链接。1)自动生成: RAMDIRK。2)手工制作: ROOTFS。

本末实验室 549

android 蓝牙通讯demo

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

Camera2Demo

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

android rootfs 编译,android rootfs

ramdisk.img是编译Android生成的一个镜像文件,最后和kernel一起打包生成boot.img镜像。ramdisk.img中主要是存放android启动后第一个用户进程init可执行文件和init.*.rc等相关启动脚本以及sbin目录下的adbd工具。file ramdisk.img//ramdisk.img: gzip compressed data, from Unix看出为g...

weixin_39639550的博客 517

利用busybox制作zedboard使用的rootfs

FHS(Filesystem Hierarchy Standard)标准介绍 /bin 必备的用户命令,例如ls、cp等 /sbin 必备的系统管理员命令,例如ifconfig、reboot等 /dev 设备文件,例如mtdblock0、tty1等 /etc 系统配置文件,包括启动文件,例如inittab等 /lib 必要的链接库,例如C链接库、内核模块 /home 普通用户主目录 /root r...

Huskar_Liu的博客 813

AM335x(TQ335x)学习笔记——挂载Ramdisk

上篇文章中我们已经能够通过u-boot启动内核了,但是没有能够启动成功,从内核的log中可以看出,内核启动失败的原因是没有挂载到root文件系统,本文将使用busybox制作根文件系统并打包成ramdisk供u-boot启动内核使用。 (1)制作根文件系统 使用busybox构建根文件系统的步骤可以参考本博客的另外一篇文章“S5PV210(TQ210)学习笔记——内核移植与文件系统构建”,该文

girlkoo的专栏 1万+

linux pv镜像,制作PV8900开发板的linux系统镜像

烧写到开发板上的文件包括以下3个:ltcboot.rom --------------------------(bootloader)llinux.rom ------------------------------(Linux kernel)lramdisk.rom --------------------------(作为根文件系统的ramdisk)1,建立开发环境用户在使用PV8900进行开...

weixin_39609620的博客 182

initramfs文件系统

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33716557的博客 378

使用Busybox做一个小巧的Linux操作系统

1.基础知识 一个操作系统可以简单的抽象为,引导程序 内核 文件系统。   vmlinuz是Linux 内核的镜像文件,可以被引导程序加载,从而启动Linux系统。   initrd的全称是boot loader initialized RAM disk,它是系统启动时所使用的根文件系统映像文件,这个文件系统中包含几个驱动模块,用来装载实际的根文件系统,比如一个IDE或SCSI硬盘

leeagle的专栏 1336

linux2.6内核initrd机制解析

题记 很久之前就分析过这部分内容,但是那个时候不够深入,姑且知道这么个东西存在,到底怎么用,来龙去脉咋回事就不知道了。前段时间工作上遇到了一个initrd的问题,没办法只能再去研究研究,还好,有点眉目,索性整理了一下。 网络上流传着很多关于ramdisk、initrd的各种版本的分析,我的这篇源于对他们的理解,非常感谢那些前辈的无私奉献,要不然我们这些晚辈学起东西来该是多么艰难呀。在这里需要特

wenwuge_topsec的专栏 910
上一篇: yaffs2文件系统制作 .
下一篇: 使用arm-linux-gcc 4.3.2编译必须启用内核中的Use the ARM EABI选项
flymachine
博客等级 码龄23年 253粉丝 34原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值