(OK)(OK) port mptcp on Android-x86-kernel-4.4.12 (SUCCESS)


mptcp_android-x86-kernel-4.4.12.txt


++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
in PC
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

# ls /opt/android-x86/

android-x86-6.0-rc1  mptcp_v0.91  mptcp_v0.91.zip

-------------------------------

[root@localhost android-x86-6.0-rc1]# pwd
/opt/android-x86/android-x86-6.0-rc1

[root@localhost android-x86-6.0-rc1]# 


-------------------------------

[root@localhost kernel]# pwd
/opt/android-x86/android-x86-6.0-rc1/kernel

[root@localhost kernel]# ls
android     block    CREDITS        drivers   include  Kbuild   lib          mm      REPORTING-BUGS  security  usr
Android.mk  certs    crypto         firmware  init     Kconfig  MAINTAINERS  net     samples         sound     virt
arch        COPYING  Documentation  fs        ipc      kernel   Makefile     README  scripts         tools

[root@localhost kernel]# 

-------------------------------

mptcp_v0.91.zip.part  download from  https://github.com/multipath-tcp/mptcp

[root@localhost mptcp_v0.91]# pwd
/opt/android-x86/mptcp_v0.91

[root@localhost mptcp_v0.91]# ls
arch     CREDITS        drivers   include  Kbuild   lib          mm      REPORTING-BUGS  security  usr
block    crypto         firmware  init     Kconfig  MAINTAINERS  net     samples         sound     virt
COPYING  Documentation  fs        ipc      kernel   Makefile     README  scripts         tools

[root@localhost mptcp_v0.91]# find . -name mptcp*

./include/net/mptcp.h
./include/net/mptcp_v4.h
./include/net/mptcp_v6.h
./include/net/netns/mptcp.h

./net/mptcp
./net/mptcp/mptcp_balia.c
./net/mptcp/mptcp_binder.c
./net/mptcp/mptcp_coupled.c
./net/mptcp/mptcp_ctrl.c
./net/mptcp/mptcp_fullmesh.c
./net/mptcp/mptcp_input.c
./net/mptcp/mptcp_ipv4.c
./net/mptcp/mptcp_ipv6.c
./net/mptcp/mptcp_ndiffports.c
./net/mptcp/mptcp_ofo_queue.c
./net/mptcp/mptcp_olia.c
./net/mptcp/mptcp_output.c
./net/mptcp/mptcp_pm.c
./net/mptcp/mptcp_redundant.c
./net/mptcp/mptcp_rr.c
./net/mptcp/mptcp_sched.c
./net/mptcp/mptcp_wvegas.c

[root@localhost mptcp_v0.91]# grep mptcp -R .|cut -d: -f1|uniq

./Documentation/networking/ip-sysctl.txt

./include/linux/tcp.h
./include/net/inet_sock.h
./include/net/net_namespace.h
./include/net/tcp.h

./net/Kconfig
./net/Makefile

./net/core/sock.c
./net/ipv4/af_inet.c
./net/ipv4/inet_connection_sock.c
./net/ipv4/ip_sockglue.c
./net/ipv4/syncookies.c
./net/ipv4/tcp.c
./net/ipv4/tcp_fastopen.c
./net/ipv4/tcp_input.c
./net/ipv4/tcp_ipv4.c
./net/ipv4/tcp_minisocks.c
./net/ipv4/tcp_output.c
./net/ipv4/tcp_timer.c
./net/ipv6/ipv6_sockglue.c
./net/ipv6/syncookies.c
./net/ipv6/tcp_ipv6.c


./include/net/mptcp.h
./include/net/mptcp_v4.h
./include/net/mptcp_v6.h
./include/net/netns/mptcp.h

./net/mptcp/Kconfig
./net/mptcp/Makefile

./net/mptcp/mptcp_balia.c
./net/mptcp/mptcp_binder.c
./net/mptcp/mptcp_coupled.c
./net/mptcp/mptcp_ctrl.c
./net/mptcp/mptcp_fullmesh.c
./net/mptcp/mptcp_input.c
./net/mptcp/mptcp_ipv4.c
./net/mptcp/mptcp_ipv6.c
./net/mptcp/mptcp_ndiffports.c
./net/mptcp/mptcp_ofo_queue.c
./net/mptcp/mptcp_olia.c
./net/mptcp/mptcp_output.c
./net/mptcp/mptcp_pm.c
./net/mptcp/mptcp_redundant.c
./net/mptcp/mptcp_rr.c
./net/mptcp/mptcp_sched.c
./net/mptcp/mptcp_wvegas.c

[root@localhost mptcp_v0.91]# 
cp -a net/mptcp/ /opt/android-x86/android-x86-6.0-rc1/kernel/net/
cp include/net/mptcp.h /opt/android-x86/android-x86-6.0-rc1/kernel/include/net/
cp include/net/mptcp_v4.h /opt/android-x86/android-x86-6.0-rc1/kernel/include/net/
cp include/net/mptcp_v6.h /opt/android-x86/android-x86-6.0-rc1/kernel/include/net/
cp include/net/netns/mptcp.h /opt/android-x86/android-x86-6.0-rc1/kernel/include/net/netns/

-------------------------------
modify /opt/android-x86/android-x86-6.0-rc1/kernel/* abiding by /opt/android-x86/mptcp_v0.91/*
-------------------------------
[root@localhost mptcp_v0.91]# pwd
/opt/android-x86/mptcp_v0.91
[root@localhost mptcp_v0.91]# gedit 


[root@localhost kernel]# touch timestamp.txt		// important

[root@localhost kernel]# pwd
/opt/android-x86/android-x86-6.0-rc1/kernel
[root@localhost kernel]# gedit 


net/core/request_sock.c		reqsk_queue_alloc(struct request_sock_queue *queue, gfp_t flags)

net/ipv4/inet_connection_sock.c		no	u32 inet_synq_hash()

net/ipv4/syncookies.c		__u32 cookie_v4_init_sequence(const struct sk_buff *skb, __u16 *mssp)

net/ipv4/tcp_fastopen.c

net/ipv4/tcp_minisocks.c		if (!is_meta_sk(sk))

net/ipv4/tcp_output.c		void tcp_set_skb_tso_segs(struct sk_buff *skb, unsigned int mss_now)

net/ipv6/inet6_connection_sock.c	inet6_synq_hash()

net/mptcp/mptcp_output.c	tcp_xmit_probe_skb(sk_it, 0); -->  tcp_xmit_probe_skb(sk_it, 0, LINUX_MIB_TCPWINPROBE);

-------------------------------
copy files to IBM Server
-------------------------------
[root@localhost android-x86-6.0-rc1]# pwd
/opt/android-x86/android-x86-6.0-rc1

[root@localhost android-x86-6.0-rc1]# ls
find-alter-files.sh  kernel  timestamp.txt

[root@localhost android-x86-6.0-rc1]# rm /root/opt/android-x86/android-x86-6.0-rc1/kernel -rf

[root@localhost android-x86-6.0-rc1]# ./find-alter-files.sh kernel

[root@localhost android-x86-6.0-rc1]# scp -r /root/opt/android-x86/android-x86-6.0-rc1/kernel 10.109.253.80:/opt/android-x86/android-x86-6.0-rc1/

-------------------------------
copy files to IBM Server
-------------------------------

[root@localhost mptcp_v0.91]# pwd
/opt/android-x86/mptcp_v0.91

[root@localhost mptcp_v0.91]# 

scp -r net/mptcp/ 10.109.253.80:/opt/android-x86/android-x86-6.0-rc1/kernel/net/
scp include/net/mptcp.h 10.109.253.80:/opt/android-x86/android-x86-6.0-rc1/kernel/include/net/
scp include/net/mptcp_v4.h 10.109.253.80:/opt/android-x86/android-x86-6.0-rc1/kernel/include/net/
scp include/net/mptcp_v6.h 10.109.253.80:/opt/android-x86/android-x86-6.0-rc1/kernel/include/net/
scp include/net/netns/mptcp.h 10.109.253.80:/opt/android-x86/android-x86-6.0-rc1/kernel/include/net/netns/

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
	注意:不要在 android-x86-6.0-rc1/kernel/ 中 执行 make menuconfig
		直接设置 (./net/ipv4/Kconfig, ./net/mptcp/Kconfig) 中的 MPTCP参数
		要使用 Android 本身的 编译系统 规则,否则,会出现下面的失败 (下面不看)——> (上面不看)。
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

-------------------------------
in IBM Server
-------------------------------

--------------

[root@localhost android-x86-6.0-rc1]# pwd

/opt/android-x86/android-x86-6.0-rc1

[root@localhost android-x86-6.0-rc1]# 

echo $JAVA_HOME

export JAVA_HOME=/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.75-2.5.4.2.fc20.x86_64
export PATH=$JAVA_HOME/bin:$PATH
. build/envsetup.sh
lunch android_x86_64-userdebug
m -j32 iso_img

m -j1 iso_img		// use this command, can find issues.
--------------


[root@localhost android-x86-6.0-rc1]# m -j32 iso_img

make[2]: *** wait: No child processes。 停止。
Makefile:146: recipe for target 'sub-make' failed
make[1]: *** [sub-make] Error 2
make[1]: Leaving directory '/opt/android-x86/android-x86-6.0-rc1/kernel'
build/core/tasks/kernel.mk:51: recipe for target 'out/target/product/x86_64/kernel' failed
make: *** [out/target/product/x86_64/kernel] Error 2
make: *** 正在等待未完成的任务....
target  C++: libLLVMARMCodeGen <= external/llvm/lib/Target/ARM/ARMBaseInstrInfo.cpp
Warning: AndroidManifest.xml already defines minSdkVersion (in http://schemas.android.com/apk/res/android); using existing value in manifest.
make: Leaving directory '/opt/android-x86/android-x86-6.0-rc1'

#### make failed to build some targets (09:43 (mm:ss)) ####

[root@localhost android-x86-6.0-rc1]# 

make clean

--------------------------------------------------------------------------------------------

[root@localhost kernel.tmp]# grep MPTCP `find . -name Kconfig`

./net/ipv4/Kconfig:	tristate "MPTCP Linked Increase"
./net/mptcp/Kconfig:config MPTCP

[root@localhost kernel.tmp]# gedit ./net/ipv4/Kconfig ./net/mptcp/Kconfig

具体修改见:http://blog.csdn.net/ztguang/article/details/52084530

scp ./net/ipv4/Kconfig 10.109.253.80:/opt/android-x86/android-x86-6.0-rc1/kernel/net/ipv4/
scp ./net/mptcp/Kconfig 10.109.253.80:/opt/android-x86/android-x86-6.0-rc1/kernel/net/mptcp/

--------------------------------------------------------------------------------------------
[root@localhost android-x86-6.0-rc1]# m -j32 iso_img

host C++: v8_mksnapshot.x86_64 <= external/v8/src/base/atomicops_internals_x86_gcc.cc
make[2]: Leaving directory '/opt/android-x86/android-x86-6.0-rc1/out/target/product/x86_64/obj/kernel'
Makefile:146: recipe for target 'sub-make' failed
make[1]: *** [sub-make] Error 2
make[1]: Leaving directory '/opt/android-x86/android-x86-6.0-rc1/kernel'
build/core/tasks/kernel.mk:51: recipe for target 'out/target/product/x86_64/kernel' failed
make: *** [out/target/product/x86_64/kernel] Error 2
make: *** 正在等待未完成的任务....
host C++: v8_mksnapshot.x86_64 <= external/v8/src/base/platform/platform-linux.cc
make: *** wait: No child processes。 停止。

#### make failed to build some targets (01:15:05 (hh:mm:ss)) ####

--------------------------------------------------------------------------------------------
m -j1 iso_img		// use this command, can show errors.
--------------------------------------------------------------------------------------------



+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
	下面不看
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-------------------------------
in IBM Server
-------------------------------

[root@localhost kernel]# pwd
/opt/android-x86/android-x86-6.0-rc1/kernel

[root@localhost kernel]# make menuconfig


Networking support->Networking options->TCP/IP networking->MPTCP protocol (MPTCP)

Choose a path-manager, 
Networking support->Networking options->"MPTCP: advanced path-manager control"
						->MPTCP Full-Mesh Path-Manager
						->MPTCP ndiff-ports;
					--->Default MPTCP Path-Manager (Full mesh)

enable Policy-Routing
Networking support->Networking options->IP: advanced router->IP: policy routing (IP_MULTIPLE_TABLES)

Networking support->Networking options->TCP: advanced congestion control->MPTCP Linked Increase (Lia)
						->"Opportunistic Linked Increase (Olia)", 
						->"WVEGAS CONGESTION CONTROL (Wvegas)" 
						->"BALIA CONGESTION CONTROL (Balia)".
					--->Default TCP congestion control (Lia)

--------------

[root@localhost android-x86-6.0-rc1]# pwd

/opt/android-x86/android-x86-6.0-rc1

[root@localhost android-x86-6.0-rc1]# 

echo $JAVA_HOME

export JAVA_HOME=/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.75-2.5.4.2.fc20.x86_64
export PATH=$JAVA_HOME/bin:$PATH
. build/envsetup.sh
lunch android_x86_64-userdebug
m -j32 iso_img

--------------

cd kernel
make menuconfig
make oldconfig
cd -
m -j32 iso_img
--------------

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
make oldconfig
----------------------------------------------------------
  INET: socket monitoring interface (INET_DIAG) [M/n/y/?] 105 m
    UDP: socket monitoring interface (INET_UDP_DIAG) [M/n/?] 105 m
    INET: allow privileged process to administratively close sockets (INET_DIAG_DESTROY) [Y/n/?] 105 y
  TCP: MD5 Signature Option support (RFC2385) (TCP_MD5SIG) [N/y/?] 105 n
  NetLabel subsystem support (NETLABEL) [N/y/?] 105 n
  MPTCP protocol (MPTCP) [N/y/?] (NEW) 
name MPTCP
type 1
curr.val n
curr.tri 0
visible 2
flags 42880
108 check_stdin()
aborted!

Console input/output is redirected. Run 'make oldconfig' to update configuration.
----------------------------------------------------------

[root@localhost android-x86-6.0-rc1]# pwd
/opt/android-x86/android-x86-6.0-rc1

[root@localhost android-x86-6.0-rc1]# vim ./kernel/scripts/kconfig/conf.c 
----------------------------------------------------------
	case silentoldconfig:
		if (sym_has_value(sym)) {
			printf("105 %s\n", def);
			return 0;
		}

		printf("\nname %s\n", sym->name);
		printf("type %d\n", sym->type);
		printf("curr.val %s\n", (const char *)sym->curr.val);
		printf("curr.tri %d\n", sym->curr.tri);
		printf("visible %d\n", sym->visible);
		printf("flags %d\n", sym->flags);

		printf("108 check_stdin()\n"); check_stdin();
----------------------------------------------------------
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
[root@localhost android-x86-6.0-rc1]# m -j32 iso_img
----------------------------------------------------------

host Java: signapk (out/host/common/obj/JAVA_LIBRARIES/signapk_intermediates/classes)
target Export Resources: framework-res (out/target/common/obj/APPS/framework-res_intermediates/package-export.apk)
host Prebuilt: jack (out/host/common/obj/JAVA_LIBRARIES/jack_intermediates/jack.jar)
arch/x86/Makefile:133: stack-protector enabled but compiler support broken
Install: out/host/linux-x86/bin/conscrypt_generate_constants
host SharedLib: libart-compiler (out/host/linux-x86/obj/lib/libart-compiler.so)
Install: out/host/linux-x86/lib/libbacktrace.so
host SharedLib: libart_32 (out/host/linux-x86/obj32/lib/libart.so)
  CHK     include/config/kernel.release
  UPD     include/config/kernel.release
  GEN     ./Makefile
  CHK     include/generated/uapi/linux/version.h
  UPD     include/generated/uapi/linux/version.h
  CHK     include/generated/utsrelease.h

"4.4.12Error: kernelrelease not valid - run make prepare to update it" exceeds 64 characters
/opt/android-x86/android-x86-6.0-rc1/kernel/Makefile:1018: recipe for target 'include/generated/utsrelease.h' failed
make[2]: *** [include/generated/utsrelease.h] Error 1
make[2]: *** 正在等待未完成的任务....
Install: out/host/linux-x86/lib64/libbacktrace.so
make[2]: *** wait: No child processes。 停止。
Makefile:146: recipe for target 'sub-make' failed
make[1]: *** [sub-make] Error 2
make[1]: Leaving directory '/opt/android-x86/android-x86-6.0-rc1/kernel'
build/core/tasks/kernel.mk:51: recipe for target 'out/target/product/x86_64/kernel' failed
make: *** [out/target/product/x86_64/kernel] Error 2
make: *** 正在等待未完成的任务....
host SharedLib: libartd-compiler (out/host/linux-x86/obj/lib/libartd-compiler.so)
host SharedLib: libartd-compiler_32 (out/host/linux-x86/obj32/lib/libartd-compiler.so)
warning: string 'gsm_alphabet_default_charset' has no default translation.
make: Leaving directory '/opt/android-x86/android-x86-6.0-rc1'

#### make failed to build some targets (53:51 (mm:ss)) ####

---------------

[root@localhost android-x86-6.0-rc1]# vim kernel/scripts/setlocalversion 
[root@localhost android-x86-6.0-rc1]# ll kernel/include/config/auto.conf

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

brctl addbr br_a_1
ifconfig br_a_1 up

brctl addbr br_a_2
ifconfig br_a_2 up

brctl addbr br_a_3
ifconfig br_a_3 up

--------------

ifconfig br_a_1 down
brctl delbr br_a_1

ifconfig br_a_2 down
brctl delbr br_a_2

ifconfig br_a_3 down
brctl delbr br_a_3

--------------
mptcp-android-1

ifconfig eth0 112.26.0.1 netmask 255.255.255.0 up
ifconfig eth1 112.26.1.1 netmask 255.255.255.0 up
ifconfig eth2 112.26.2.1 netmask 255.255.255.0 up

mptcp-android-2

ifconfig eth0 112.26.0.2 netmask 255.255.255.0 up
ifconfig eth1 112.26.1.2 netmask 255.255.255.0 up
ifconfig eth2 112.26.2.2 netmask 255.255.255.0 up

--------------

mptcp-android-1

nc -l 12123 < /dev/zero

mptcp-android-2

nc 112.26.0.1 12123 > /dev/null

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

./external/tcpdump/tests/mptcp.out
./external/tcpdump/print-mptcp.c
./external/tcpdump/mptcp.h
./external/tcpdump/mptcp.h

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
kernel/scripts/kconfig/conf.c
------------------------------
[root@localhost android-x86-6.0-rc1]# m -j32 iso_img
------------------------------
*
* Restart config...
*
fffffff
*
* Networking options
*
eeeeeee
dddddddddddd
bbbbbbbbbb
Packet socket (PACKET) [Y/n/m/?] 105 y

name PACKET
type 2
curr.val n
curr.tri 2
visible 2
flags 108416
------------------
eeeeeee
dddddddddddd
bbbbbbbbbb
  MPTCP protocol (MPTCP) [N/y/?] (NEW) 

name MPTCP
type 1
curr.val n
curr.tri 0
visible 2
flags 42880
108 check_stdin()
aborted!

------------------------------
main
check_conf
conf
conf_sym
conf_askvalue
------------------------------
gedit kernel/scripts/kconfig/zconf.y kernel/scripts/kconfig/menu.c kernel/scripts/kconfig/gconf.c kernel/scripts/kconfig/symbol.c kernel/scripts/kconfig/zconf.tab.c_shipped kernel/scripts/kconfig/confdata.c

gedit kernel/scripts/kconfig/symbol.c kernel/scripts/kconfig/menu.c kernel/scripts/kconfig/confdata.c
sym->flags

scp kernel/scripts/kconfig/symbol.c kernel/scripts/kconfig/menu.c kernel/scripts/kconfig/confdata.c 10.109.253.80:/opt/android-x86/android-x86-6.0-rc1/kernel/scripts/kconfig/
------------------------------
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
	上面不看
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
为什么会这样[user_mongo@nosql01 replicaset]$ cd /opt [user_mongo@nosql01 opt]$ ll total 0 drwxr-xr-x. 3 root root 25 Mar 16 17:08 servers drwxr-xr-x. 2 root root 51 Mar 16 17:10 software [user_mongo@nosql01 opt]$ tar -zxvf /opt/software/mongodb-linux-x86_64-rhel70-4.4.12.tgz -C /opt/servers/mongodb_demo/replicaset/ mongodb-linux-x86_64-rhel70-4.4.12/LICENSE-Community.txt tar: mongodb-linux-x86_64-rhel70-4.4.12: Cannot mkdir: Permission denied tar: mongodb-linux-x86_64-rhel70-4.4.12/LICENSE-Community.txt: Cannot open: No such file or directory mongodb-linux-x86_64-rhel70-4.4.12/MPL-2 tar: mongodb-linux-x86_64-rhel70-4.4.12: Cannot mkdir: Permission denied tar: mongodb-linux-x86_64-rhel70-4.4.12/MPL-2: Cannot open: No such file or directory mongodb-linux-x86_64-rhel70-4.4.12/README tar: mongodb-linux-x86_64-rhel70-4.4.12: Cannot mkdir: Permission denied tar: mongodb-linux-x86_64-rhel70-4.4.12/README: Cannot open: No such file or directory mongodb-linux-x86_64-rhel70-4.4.12/THIRD-PARTY-NOTICES tar: mongodb-linux-x86_64-rhel70-4.4.12: Cannot mkdir: Permission denied tar: mongodb-linux-x86_64-rhel70-4.4.12/THIRD-PARTY-NOTICES: Cannot open: No such file or directory mongodb-linux-x86_64-rhel70-4.4.12/bin/install_compass tar: mongodb-linux-x86_64-rhel70-4.4.12: Cannot mkdir: Permission denied tar: mongodb-linux-x86_64-rhel70-4.4.12/bin/install_compass: Cannot open: No such file or directory mongodb-linux-x86_64-rhel70-4.4.12/bin/mongo tar: mongodb-linux-x86_64-rhel70-4.4.12: Cannot mkdir: Permission denied tar: mongodb-linux-x86_64-rhel70-4.4.12/bin/mongo: Cannot open: No such file or directory mongodb-linux-x86_64-rhel70-4.4.12/bin/mongod tar: mongodb-linux-x86_64-rhel70-4.4.12: Cannot mkdir: Permission denied tar: mongodb-linux-x86_64-rhel70-4.4.12/bin/mongod: Cannot open: No such file or directory mongodb-linux-x86_64-rhel70-4.4.12/bin/mongos tar: mongodb-linux-x86_64-rhel70-4.4.12: Cannot mkdir: Permission denied tar: mongodb-linux-x86_64-rhel70-4.4.12/bin/mongos: Cannot open: No such file or directory tar: Exiting with failure status due to previous errors [user_mongo@nosql01 opt]$ tar -zcvf /opt/software/mongodb-linux-x86_64-rhel70-4.4.12.tgz -C /opt/servers/mongodb_demo/replicaset/ tar: Cowardly refusing to create an empty archive Try `tar --help' or `tar --usage' for more information.
最新发布
06-01
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值