linux kernel startup process!

Emacs不是编辑器,是Linux终端里的可编程操作系统 Emacs本质上是一个嵌入Linux终端的Lisp运行时环境,它将文件编辑、Shell命令执行、Git操作、日志分析和系统调试等能力统一在缓冲区抽象与可编程接口之下。其核心原理在于用Elisp重定义人机协作范式——不再切换工具,而是扩展环境;不依赖GUI,而是深度适配TTY/SSH/WSL2等纯文本交互场景。技术价值体现在消除上下文切换、实现跨工具数据流转、支撑嵌入式与信创等严苛生产环境。典型应用场景包括ARM寄存器十六进制分析、内核日志实时过滤、Git rebase交互式编辑、以及基于org-babel的 阅读详情
compile kernel:
make xconfig  此过程需要QT的支持,并且要很多选项进行选择(可以copy /boot/config-2.6.33.3-85.fc13.i686 文件到 linux_kernel/linux_source/linux-2.6.33.3/.config   就是用系统的配置文件替代编译环境的文件,从而此make xconfig可以省略)
make

then will make the following new file:
./vmlinux   :  未经压缩的原始linux内核镜像.
./arch/<arch>/boot/zImage(bzImage):  使用zlib压缩后的内核镜像.
./System.map    


need copy the new file to the following boot directory:
/boot/vmlinuz-<version>        : 用于启动的压缩内核镜像, 它也就是/arch/<arch>/boot中的压缩镜像.
/boot/system.map-<version>  : 存储内核符号地址.
/boot/initrd.img-<version>     : 初始化RAM硬盘时, 用来存储挂载根文件系统所需的模块.
/boot/grub/menu.lst                : grub的配置文件. (不同的发行版中它可能位于不同位置.


#cp ./System.map     /boot/System.map-mykernel
#cp ./arch/i386/bzImage /boot/vmlinuz-mykernel 
修改menu.list,加入以下内容(从既有的menu.list中相关的内容拷贝):
title Fedora (2.6.27.5-117.fc10.i686)
root (hd0,1)
kernel /boot/vmlinuz-mykernel ro root=UUID=fa01caba-5bf7-4a08-8f5f-26e8b5bffe6e rhgb quiet



如何制作initrd.img文件, 一般使用原来系统的initrd.img文件就可以了; 要添加新的模块so,则需要解开,然后加入新so后重新压缩。
mather one: make install   说明:并没有生成initrd.img 文件;
It is equal the following two command:
#cp ./System.map     /boot/System.map-mykernel
#cp ./arch/i386/bzImage /boot/vmlinuz-mykernel 

mather two: mkinitrd 命令 说明:并没有生成initrd.img 文件;
mather three: make bzImage 说明:并没有生成initrd.img 文件;

在Proteus中用80C51模拟4线SPI点亮OLED屏幕 在Proteus里用80C51模拟4线SPI控制OLED屏幕使其显示图案(汇编实现)。 阅读详情

相关推荐

OSPF路由协议配置

构建直连连通让R1、R2、R3、R4加入OSPF,实现全网互通。掌握OSPF邻居状态的解读。掌握单区域OSPF的配置。理解OSPF的基本概念。AR3上的OSPF配置。AR4上的OSPF配置。R1上的OSPF配置。R2上的OSPF配置。

SURTR999的博客 7694

Linux内核启动函数start_kernel的简单分析

欧长坤 原创作品转载请注明出处 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000 这学期学校恰好有操作系统的课程,上个学习就开始寻思研究研究Linux内核代码,恰好MOOC有这个课程,遂选了此课。 一、准备工作 废话不多说,命令一行行敲下去,搭建好环境。 1 2

yiyeguzhou100的专栏 4907

(详细教程)opencv+pycharm+笔记本摄像头 做一个人脸识别

文章目录 前言 一、pandas是什么? 二、使用步骤 1.引入库 2.读入数据 总结 一、安装opencv-python 这里推荐使用pycharm直接安装opencv-python 打开文件——设置——python解释器——点击+号 搜索opencv-python,点击安装包,等待片刻即可安装好 检查是否安装好,新建一个项目输入以下代码,若无报错则安装好 import cv2 二、准备分类器 咱们使用opencv官方提供的分类器,包括面部识别,侧...

qq_52852432的博客 1万+

Linux startup process 图示

蓝月的职场人生 569

无人机频谱侦测与智能识别技术实战解析

本文深入解析无人机频谱侦测与智能识别技术实战应用,涵盖无线电侦测、信号处理和定位技术等核心内容。通过频谱分析、特征提取和机器学习算法优化,实现高精度无人机识别与定位,并分享复杂环境下的应对策略和系统集成经验。

weixin_28419039的博客 488

电源新手别怕!手把手教你搞定Buck电路的环路补偿(附Type II/III补偿器参数计算)

本文为电源设计新手详细解析Buck电路环路补偿技术,重点介绍Type II和Type III补偿器的参数计算与设计方法。通过实例演示和实用技巧,帮助工程师快速掌握环路补偿原理,解决电源振荡、响应慢等问题,提升电路稳定性与性能。

weixin_30607029的博客 617

6 Stages of Linux Boot Process (Startup Sequence)

<br />http://www.thegeekstuff.com/2011/02/linux-boot-process/<br /> <br />Press the power button on your system, and after few moments you see the Linux login prompt.<br />Have you ever wondered what happens behind the scenes from the time you press the po

leolinux的专栏 1012

【RT-DETR有效改进】利用MobileNetV3替换Backbone(轻量化网络结构,提点)

本文给大家带来的改进机制是,其主要改进思想集中在结合硬件感知的网络架构搜索(NAS)和NetAdapt算法,以优化移动设备CPU上的性能。它采用了新颖的架构设计,包括反转残差结构和线性瓶颈层,以及新的高效分割解码器Lite Reduced Atrous Spatial Pyramid Pooling(LR-ASPP),以提升在移动分类、检测和分割任务上的表现。实验表明,MobileNets在资源和准确性的权衡方面表现出色,并在多种应用(如对象检测、细粒度分类、面部属性识别和大规模地理定位)中展现了其有效性。

Snu77的博客 2748

The Linux Boot Process – System Startup, Explained from Power-On to Shell

【代码】The Linux Boot Process – System Startup, Explained from Power-On to Shell。

allway2的博客 926

预测股票价格趋势:使用MATLAB进行股票价格预测

通过收集股票数据、数据预处理、构建预测模型以及可视化结果,我们可以利用MATLAB强大的计算和分析功能来预测股票价格的走势。然而,需要注意的是,股票市场具有高度复杂性和不确定性,预测结果仅供参考,并不构成投资建议。然而,借助计算机编程和数据分析工具,我们可以利用历史股价数据来建立模型,并预测未来的股票价格走势。首先,我们需要获取股票的历史价格数据。完成模型的拟合后,我们可以使用该模型来进行未来股票价格的预测。最后,我们可以使用MATLAB的绘图功能将预测的股票价格与实际股票价格进行对比,并进行可视化展示。

2301_79326588的博客 1018

Unity中使用TCP和UDP传输摄像头视频的实践

本文探讨了在Unity中通过TCP和UDP协议传输摄像头视频的实现方法。TCP通过自定义消息帧保证数据完整性但效率较低,UDP传输速度快但可能丢帧。文章提供了Python和Unity的代码示例,分析了两种协议的适用场景:TCP适合要求数据完整性的应用,UDP则适合追求实时性的场景。最终选择取决于具体需求,并需要注意线程安全与同步机制。

m0_74337424的博客 145

基于RK3568的Kernel初始化到init进程启动:实战

基于正点原子RK3568开发板进行Kernel初始化初始化实战

weixin_43390831的博客 246

Unreal5从入门到精通之初学者碰到解决不了的问题怎么办?

在学习Unreal的过程中,你曾陷入困境了吗?对于我来说,这种情况发生得比我愿意承认的要多得多。幸运的是,除了一般地在网上搜索之外,还有很多地方可以获得虚幻引擎的帮助。

TxNet 979

基于RK3568的UBoot功能开发和启动Kernel:实战

基于正点原子RK3568开发板实战UBoot功能开发和启动Kernel

weixin_43390831的博客 216

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Linux 系统启动过程详解

Linux 的启动过程就像一辆老式汽车从熄火到轰鸣前进:从“钥匙转动”(开机)到“引擎点火”(内核加载),再到“油门踩下”(系统就绪)。整个过程高效、有序,通常只需几秒到几十秒。 Linux的启动不是魔法,而是模块化的设计:每个环节独立、可调试。理解这个过程,能帮助我们更好地诊断启动问题、优化系统性能,甚至在定制系统时游刃有余。这意味着如果遇到“开机黑屏”或“引导失败”,我们能快速定位问题。比如,优化 GRUB 可以加速 20% 的启动时间;精简 systemd 服务,能让服务器停止运行不必要的服务。Lin

工程师小星星 889

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

linux 单步启动_Linux内核的启动过程初见

讲真,因为启动过程太复杂,这个博客很难写,想了几天,不知道从哪里开始讲起。不过,不开始,永远不知道有多难写,那么就试试看。***一般的学习主线是:Start_kernel(); –> rest_init(); -> kernel_init(); ***在写的过程中,感觉到自己文字的生硬,完全是硬解,而不能算得上是真的理解。内核代码交叉引用链接在本地制作Menu OS,成功。惯例,...

weixin_36146690的博客 315

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

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

深入解析Linux启动:从BootLoader到桌面

Linux系统启动流程是一个精密的多阶段过程,包括BootLoader、内核初始化和用户空间运行三个阶段。BootLoader(如U-Boot)负责硬件初始化、内核加载和参数传递;内核初始化阶段通过start_kernel()等函数建立内存管理、进程调度等核心功能;最终由init/systemd启动用户进程。关键配置包括内核命令行参数、init配置文件(/etc/inittab或systemd目标)和fstab挂载定义。嵌入式系统可定制initramfs,并通过systemd/SysV控制服务启动顺序。调试

weixin_44932366的博客 530

【Linux】【busybox】基于busybox的根文件系统的完善以及介绍根文件系统下的文件夹和文件与Linux内核的衔接

最直观的是就是用户日常直接交互的那一层所有文件夹是根文件系统,内核作为底层支撑,运行在后台,不直接以文件夹的形式呈现给用户。1. 内核启动↓2. 解析 bootargs 中的 root 参数↓3. 加载 initrd 到内存↓4. 执行 initrd 中的 init 脚本- 加载必要的驱动- 检测存储设备- 挂载根文件系统↓5. 切换根文件系统(pivot_root)↓6. 启动 init 进程(PID 1)↓7. init 进程执行系统初始化。

qq_73648789的博客 288

快速掌握Linux启动过程:像看接力赛一样简单

BIOS/UEFI检录硬件,选定起跑盘。GRUB2提供菜单,加载内核与急救包。内核驱动硬件,奠定系统基石。initramfs搞定依赖,挂载真根分区。systemd并行启动,拉起所有服务。登录管理器验证身份,恭候大驾。理解这个过程,你就握住了排查启动问题的“地图”。下次服务器启动异常,你就能精准判断问题区间,高效解决。关注【刘叨叨趣味运维】,用有趣的方式,啃下最硬核的技术。咱们下期见!

qq_44750131的博客 875

Android 7系统休眠唤醒(二)开机全链路—BootROM到Launcher

摘要:Android开机流程全解析 本文是系列第二篇,详细拆解Android从BootROM到Launcher的完整开机链路,分为六大阶段: BootROM(芯片固件):完成基础硬件初始化,加载BootLoader BootLoader(LK/U-Boot):加载boot.img(内核+ramdisk),移交控制权 Linux内核:初始化核心子系统,挂载根文件系统并启动init进程(PID=1) init进程: 挂载/proc、/sys等虚拟文件系统 解析init.rc脚本,按阶段触发early-init/

AfinalStone的专栏 276

Floorplan 贡献者手册:从 Bug 报告、特性建议到合并 PR 的完整工作流

本文基于 Floorplan 仓库的 [CONTRIBUTING.md](https://link.gitcode.com/i/9652bdcc62c2ef4a887e3b61fd2f0f44) 展开,完整梳理向该 Claude Code / Codex 插件提交 bug 报告、提出功能建议以及走完一次 Pull Request 的全流程,并结合 [docs/development.md](htt

gitblog_00391的博客 943

Linux内核深度剖析:四层动态切片实战方法论

Linux内核不是黑箱,而是可观测、可干预的精密系统。理解其核心机制需跨越源码与运行态、抽象与硬件、配置与行为三大断层。本文基于真实云原生故障案例(如soft lockup、P99延迟抖动),聚焦内核剖析与动态观测两大关键技术能力,解析启动流程、调度器行为、内存映射和中断生命周期四大可观测切面。通过QEMU+GDB单步跟踪、ftrace函数级追踪、page_owner内存溯源、trace-cmd中断时序分析等工程化手段,将内核从理论概念转化为终端可验证的实时状态。适用于性能优化、SRE排障与嵌入式移植等一线

weixin_33701617的博客 382

8. Linux 内核驱动详情

【代码】8. Linux 内核驱动详情。

雯辰的博客 237

Windows进程管理:从基础到实战的6种信息获取方法

进程是操作系统资源分配的基本单位,Windows通过进程ID(PID)唯一标识每个运行中的程序。理解进程管理机制对系统监控、性能优化和安全防护至关重要。本文深入解析Windows进程数据结构与内核原理,重点介绍6种实用的进程信息获取技术:从图形化的任务管理器到命令行工具tasklist,从PowerShell的Get-Process到WMI查询,再到性能计数器和API编程方案。这些方法覆盖了日常维护、自动化脚本和企业级监控等场景,特别是针对进程PID、内存占用和线程数等关键指标的监控技巧,能有效帮助开发者和

weixin_34075268的博客 396

微软Azure Linux深度解析:云原生操作系统的技术架构与实践指南

Linux操作系统作为开源生态的核心基础,其内核优化和发行版定制在云计算时代展现出新的技术价值。通过深度定制内核参数和系统组件,云优化操作系统能够显著提升在特定云环境中的性能表现和安全防护能力。Azure Linux采用声明式配置驱动架构,基于Fedora构建并针对Azure云平台进行深度优化,实现了启动速度提升30%、网络吞吐量增益15%的技术突破。这种云原生操作系统通过内核级安全加固、供应链安全可追溯性以及原生Azure服务集成,为容器化部署、微服务架构等云原生应用场景提供底层支撑。对于需要在Azure

weixin_33744141的博客 372

终极威胁狩猎指南:Osquery-ATT&CK如何映射MITRE ATT&CK矩阵?

Osquery-ATT&CK是一个专为企业威胁狩猎设计的开源项目,旨在通过Osquery将MITRE ATT&CK矩阵映射到实际的安全检测中。每个配置文件都是一个查询包,可直接用于企业级威胁狩猎,帮助安全团队更精准地识别和响应潜在威胁。 ## 什么是Osquery-ATT&CK? Osquery-ATT&CK的核心目标是将MITRE ATT&CK框架与Osquery强大的系统查询能力相结合。通

gitblog_01054的博客 491
上一篇: initrd**.img: boot loader initialized RAM disk
下一篇: strace 命令是一种强大的工具,它能够显示所有由用户空间程序发出的系统调用
bamboolsu
博客等级 码龄22年 200粉丝 394原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值