DAVINCI DM365-DM368开发攻略——开发环境搭建(DVSDK4.02) .

本文转自“集成系统-踏上文明的征程” 博客,出处:http://zjbintsystem.blog.51cto.com/964211/621435

 

第一节、 技术开发环境中的社会环境

     这篇文章迟迟没有写出来奉献给一些爱好音频视频开发的网友,是有很多原因的,TI在短时间内,针对高清音视频方案DM365/368,连续发布DVSDK3.0,DVSDK4.00,DVSDK4.01和DVSDK4.02,这点让我们很不适应。虽然我们的DM365/368核心板早已经出来,但是需要做开发板,并调试开发板,还有就是帮三个客户批量生产DM6446产品和产品维护的原因,这是主要原因。但还有三个严重影响士气的原因,让本人管理公司倍感压力,就是这个夏天不好过,全国处处都流行市区里看海,严重影响公司员工的工作专注性,这是其一;全国各地人民近一年连续性和惯性地“喜迎物价上涨”,这个严重影响员工的积极性,更让我们物料采购和生产压力逐步加大,这是其二;其三就是我们血液流淌的民族良心、热心和爱心被无情欺骗、玩弄、践踏,而且这些事情还要继续掩盖和描黑下去,我想大家都知道的。压力很大,再大也要坚持下去;再忙,也还得坚持把博客写好。话说得好:从来没有救世主,全靠我们自己。这句话一点也不言重,以后会明白的。
    针对技术开发环境,我们分六部分进行描述:
      
        DM365/368介绍;
       下载相关软件包;
       Ubuntu 10.04 LTS环境搭建;
       Ubuntu网络环境静态IP的设置和SMABA的设置;
       交叉编译环境搭建;
       DVSDK4_02_00_06软件开发包的安装;
    
第二节、 DM365/368介绍
 
      回归正题,我们先看看TI网站对DM365/368的介绍: http://focus.ti.com.cn/cn/paramsearch/docs/parametricsearch.tsp?family=dsp&sectionId=2&tabId=2114&familyId=1446&paramCriteria=no;这里本人就不啰嗦了,DM365/368就是两款高清720p/1080p的芯片方案,单核ARM926EJS+视频子处理器,H264、MPEG4、MPEG2、MJPEG、JPEG,音频的ACC、G711编码解码都是硬件实现的,无需软件运算,编码解码速度极快。但DM36X里边没有DSP,不能拿来做智能视频算法和机器视觉算法,DM36X方案适合做IP-CAMERA、高清DVR、无线IP-CAMERA、智能家居低成本产品,等等。市场上还有一个非常流行更经济的台湾 智源和华为海思嵌入式高清IP-CAMERA、DVR方案(注,本人是中立嵌入式爱好者),但DM36X可扩展的功能比华为海思嵌入式芯片Hi系列强,,压缩率比海思和台湾 智源高,华为海思嵌入式芯片Hi更专注DVR方面的产品设计。这些SoC都是面对低端市场,讲究量的出货,做不了高端产品,只有带DSP的芯片才能做中高端产品。像本公司的DM6446、DM6437,和以后的DM8168等。
TI最开始发布的DM36X开发包是dvsdk_dm365_setuplinux_2_10_01_18,这个版本还有很多公司在用,这个是基于linux-2.6.18内核上开发的,TI觉得Montavista做的linux驱动太烂,决定自己搞,所以发布很多linux的版本,现在最新发布的版本是linux-2.6.37。上篇写到《RHEL6.0的开发环境》,主要针对去年发布的DVSDK3.0开发包的,DVSDK3.0里边包含DM36X和DM6467T三个高清方案芯片的开发包,内核基于linux-2.6.32,但是TI在今年连续发布DVSDK4.00,DVSDK4.01和DVSDK4.02,内核均是linux-2.6.32,同时把DM365和DM368分开了,说明在软件上DM365(720P)和DM368(1080P)区别还是比较大的,两个芯片在硬件管脚完全兼容,就是主频率(DM365最高297MHz,DM368为432MHz)和视频子处理系统不一样,DM368还包含“智能成像应用的脸部识别”,所以我们决定开发DVSDK4.02。因为全世界很多流行的软件都基于linux-2.6.32,比如RHEL6.0,Ubuntu 10.04,众多开发板公司,等稳定版本,加上现在比较流行的 Android(安卓)系统,要求linux的版本最好是linux-2.6.32以上。
要开发DVSDK4.02或者(DVSDK4.00,DVSDK4.01),TI要求必须在Ubuntu 10.04 LTS 32-bit系统上开发,不能在RHEL6.0上开发,这个和DVSD3.0有区别的。
 
第三节、 下载相关软件包
 
1、下载Ubuntu 10.04 LTS 32-bit
下载得到ubuntu-10.04.2-desktop-i386.iso,而且版本一定是ubuntu-10.04,不要下载更高级的版本。和RHEL6.0不一样,这个是完全免费和无版权纠缠问题的linux系统,而且这个和debian系统一样,非常好用,非常方便更新软件包,安装后,文件总体大小也小多了。
2、下载ARM交叉编译工具Code Sourcery ARM GCC Tool Chain
“Sourcery G++ Lite 2009q1-203 for ARM GNU/Linux”,比较流行和高效的ARM交叉编译工具,选择下载 IA32 GNU/Linux Installer
3、下载DVSDK_4_02包:
TI在DVSDK_4_0上做得比较好,把所有的开发软件全部打包好了(本人喜欢死了)包括UBL、U-BOOT-2010.12,LINUX-2.6.32.17,DRIVER,EXAMPLE,FILESYSTEM;
选择“另存为”,并加.bin后缀,否则你下载的是txt格式的文件;
选择“另存为”,并加.bin后缀;
下载完上面的开发包和文件后,先看看 TMS320DM365_EVM_Quick_Start_Guide.pdf或者 TMS320DM368_EVM_Quick_Start_Guide.pdf
 

 第四节、 Ubuntu 10.04 LTS环境搭建

和RHEL6.0的安装一样,我们选择虚拟机软件VM7.1,我们以按图说话,一步一步安装下去,熟悉这方面的朋友可以跳过本节的描述,当然给本人指出错误挑毛病更让本人喜欢。不熟悉的朋友可以先先看看《 DAVINCI DM36X开发攻略——RHEL6在VM7.1的安装》。
首先VM7.1已经安装后,并且VM7.1和WINDOWS的网络共享设置按照下图:

    要在自己电脑上找到一个有至少有20G的空余的空间,确保自己的PC有2G的内存以上,WINDOWS自己占用1G,分配给虚拟机的内存是1G以上,这样在Ubuntu里编译和开发就非常有效率。

VM-LINUX 图-1

选择Ubuntu,“Next”下去;

 

VM-LINUX 图-2

     

VM-LINUX 图-3

    在图-3里,也有人选择使用“Use NAT”,但是我们用第一种的方式也可以在Ubuntu系统里上网。
VM-LINUX 图-4
选择虚拟机I/O类型,

     

VM-LINUX 图-5

由于第一次在你的PC安装Ubuntu,我们选择第一个选项,产生一个新虚拟硬盘,VM把整个linux host的系统保存到一个文件(新虚拟硬盘)里,非常安全和容易备份保存,这也是本人喜欢VM的原因。

       

VM-LINUX 图-6

VM-LINUX 图-6里,选择虚拟硬盘的类型,我们建议使用IDE,有时选择“SCSI”会使后面的安装出问题,本人没时间去研究这个问题,所以直接用IDE。

     

VM-LINUX 图-7

    分配给Ubuntu host系统的虚拟硬盘空间是20G,够用了,因为后面安装完交叉编译工具、相关Ubuntu升级包、DVSDK4.02等软件包后,才7.x 多G的文件,够开发用了,这个虚拟硬盘会随开发安装更多的软件包变得越来越大。

       

VM-LINUX 图-8

   

VM-LINUX 图-9

图-8和图-9就是通过镜像方式安装Ubuntu,在虚拟机的光驱里,按图-9的选项找到你下载的ubuntu-10.04.2-desktop-i386.iso,然后点击确定后,在虚拟机的界面的左边,启动刚才配置的虚拟机。这样就开始Ubuntu安装了。

U-install 图-10
这里选择Ubuntu host系统的语言,一般是英语,也可以使用简体中文。

U-install 图-11
选择Asia重庆的时区或上海的时区。

U-install 图-12
Ubuntu系统采用美国键盘,你可以在空框里测试你的键盘。继续“Forward”,

U-install 图-13

这一步开始对虚拟硬盘就行格式化(就是*.vmdk文件),这个不会影响的WINDOWS下的硬盘,所以说VM安装LINUX HOST很安全。

U-install 图-14
图-14这一步就是要设置好Ubuntu的普通用户账号和密码,还有虚拟计算机的名字,我们使用简单的密码,会提示“strength fair”,没关系。

U-install 图-15

 配置到图-15这里,我们就可以安装Ubuntu了,这个安装需要比较长一点的时,可以去忙其他事情。
U-install 图-16
安装结束后,提示重启Ubuntu,先“Restart Now”,然后在进入重启界面,这时系统会停留在显示文本模式下,我们需要敲“ 回车键”,Ubuntu才能起来,这个有点奇怪。回车后,可以进入图形界面,然后出现登陆界面。

 

U-install 图-17
第一登陆请使用davinci普通账号进入,Ubuntu默认是普通用户进入,不建议使用超级用户root登陆,root超级用户是被禁用的。需要使用一些带权限操作的指令,都需要在最前面加”sudo”,这个确实有点繁。为了使用root登陆,从虚拟机”Applications”里找到“Terminal”终端,并打开,我们以后基本是在“Terminal”里操作和开发。使用:
$sudo passwd root
Password: <--- 输入你当前用户davinci的密码
Enter new UNIX password: <--- 新的Root用户密码
Retype new UNIX password: <--- 重复新的Root用户密码
passwd:已成功更新密码
这个解锁root的方法在Ubuntu 10.04 LTS及以后的版本都比较简单,就是上面的命令,然后重新启动Ubuntu,就可好使用图-17的“Other”登陆了,输入root和刚才设置的root密码,就可以登陆root模式。
我们开始安装和设置其他有用的工具。
   

 U-install 图-18

这一步是安装VM TOOL,这个工具非常有用,安装了VM TOOL就可以使鼠标在两个操作系统下自由切换,两个操作系统下共享目录,可以调整虚拟机的窗口大小,等等,所以我们建议安装,见图-18,直接点击“Install Vmare Tools”,这时VM系统自动会mount 虚拟机VM 里自带的ISO文件到光驱里,见下图-19.

 

U-install 图-19

 

U-install 图-20

进入linux光驱可以看到里边的内容。但这个是压缩软件包,不能直接安装。我们开始到命令模式下,通过指令操作。

U-install 图-21
图-21里,我们使用“cd /media/Vmware\ Tools/”进入光驱里,先把VmwareTools-xxxxx.tar.gz给解压到 /tmp的目录里
如果在root模式,直接tar zxf VmwareTools-8.4.5-324285.tar.gz –C /tmp,如果在普通用户的模式,使用sudo tar zxf VmwareTools-8.4.5-324285.tar.gz –C /tmp,解压结束后,我们到/tmp/vmware-tools-distrib目录下使用./vmware-install.pl,直接回车安装,

U-install 图-22

一直拍“回车”键安装下去,直到安装结束。

U-install 图-23

安装VM TOOL结束后,在虚拟机的菜单里,开始设置和WINDOWS共享的文件夹,见图-23,因为GCC交叉安装包和DVSDK4.02的安装包很大,没必要通过SAMBA方式 COPY到LINUX里去,使虚拟机的空间越变越大。

U-install 图-24

在Settings->”Options”里,对“Shared Folders”进行“Always enabled”,同时在WINDOWS下的先生成一个共享的文件夹,比如本人的是G盘下,直接生产“Ubuntu10”的文件夹,并设置成共享模式,见图-25。然后在图-24的“Add”处添加刚才的Ubuntu10的共享文件夹,见图-26。

 

U-install 图-25

U-install 图-26

U-install 图-27

最后选择图-27的“Enable this share”,点击finish,这样Ubuntu和windows就可以共享文件夹了,这样系统会自动mount这个共享文件夹到/mnt/hgfs/的目录下。COPY你下载的arm-2009q1-203-arm-none-linux-gnueabi.bin和dvsdk_dm365-evm_4_02_00_06_setuplinux.bin或者dvsdk_dm368-evm_4_02_00_06_setuplinux.bin到这个WINDOWS下的Ubuntu10文件夹里,然后在linux里边,使用以下命令,看看在LINUX里是否看到你COPY过来的文件:
#cd /mnt/hgfs/Ubuntu10/
#ls
这时应该可以看到刚才COPY的两个大文件。
到这里Ubuntu的环境基本搭建好,还有NFS, TFTP, SAMBA等,NFS和TFTP在后面安装好DVSDK4.02后,再告诉大家如何设置。
 
第五节、 Ubuntu网络环境静态IP的设置和SMABA的设置
 
由于Ubuntu的默认安装状态的IP是DHCP,而我们TFTP SERVER, NFS SERVER, SAMBA SERVER这些网络环境都要求是固定的静态IP模式,所以我们先设置静态IP,编辑/etc/network/interfaces的文件,
#gedit /etc/network/interfaces
在auto lo
iface lo inet loopback
的后面加上:
auto eth0
iface eth0 inet static
address 192.168.1.252
netmask 255.255.255.0
gateway 192.168.1.1
broadcast 192.168.1.255
然后保存退出,重启networking:
#/etc/init.d/networking restart
而有些网友指出改成静态IP上不了网,这时就需要设置DNS,这个就不提示了,网上有很多介绍,本人没发觉apt-get install xxxx过不去,所以本人的静态IP还是可以连上网的。本人还发觉有个BUG,每天打开Ubuntu如果不做/etc/init.d/networking restart的话,发觉还是使用DHCP,做了/etc/init.d/networking restart后,就变成静态IP,这个BUG一直没查到什么原因,这个和RHEL6.0的不一样,不知是否有Ubuntu高手指点一下。本人还有个小建议:为了上网方便,建议DHCP,调试开发的时候,直接使用:
ifconfig eth0 192.168.1.252,临时去指定IP就可以做相应的开发。
 
搞定静态IP和DNS,可以设置SAMBA了,使用以下命令:
#apt-get install samba
#apt-get install smbfs
#apt-get install samba-cmmon-bin
#apt-get install system-config-samba
系统自动从 Ubuntu的官方镜像网站下载稳定的最新的软件包版本,大家可以通过#gedit /etc/apt/sources.list命令看看这些链接的地址。
安装samba结束后,先使用
#touch /etc/samba/smbpasswd
#smbpasswd -a davinci ( davinci普通用户)
输入samba访问密码两次。
然后编辑gedit /etc/samba/smb.conf的配置文件,在 smb.conf最后增加下面一段内容:
[smb_share]
;comment = Shared Folder with username and password
path = /home/davinci
public = yes
writable = yes
valid users = davinci
create mask = 0700
directory mask = 0700
force user = nobody
force group = nogroup
available = yes
browseable = yes
保存退出。
重启 samba,/etc/init.d/smbd restart
这个和以前的(/etc/init.d/samba restart)不一样了。
使 samba生效。
最后使用:
# ufw disable
把防火墙给关闭掉,这样在WINDOWS下就可以使用\\192.168.1.252 登录samba共享目录了。
 
第六节、 交叉编译环境搭建
 
    Ubuntu网络环境搞定,我们可以着手安装GCC交叉编译环境,先使用:
#ln -sf /bin/bash /bin/sh
否则无法运行./arm-2009q1-203-arm-none-linux-gnueabi.bin的操作。网友指出是dash搞的鬼。
进到我们的VM TOOL共享目录:
#cd /mnt/hgfs/Ubuntu10
#chmod +x ./arm-2009q1-203-arm-none-linux-gnueabi.bin
#./arm-2009q1-203-arm-none-linux-gnueabi.bin
这时,会出现Sourcery G++的安装界面,

U-install 图-28

“Next”下去,

U-install 图-29

开始安装人家的东西,

U-install 图-30
这里建议使用Typical,

U-install 图-31
图-31开始选择安装目录,这个比较讲究,不要乱安装,因为后面安装DVSDK4.02会涉及这个目录。

U-install 图-32
 
在/opt的目录下,生产arm-2009q1-203的文件夹,见图-32,把Sourcery G++ Lite for ARM安装在这里,

U-install 图-33

继续下去,

U-install 图-34

图-34把刚才设置的路径生效,

U-install 图-35

图-35开始安装LINK环境(Sourcery G++的链接环境等)的路径,

U-install 图-36
我们保存到/opt/arm-2009q1-203/CodeSourcery下,

U-install 图-37
点击图-37的install按键,开始安装交叉编译工具,这个也需要一点时间。

U-install 图-38

U-install 图-39
 
安装包结束后,事情还没结束,开始设置root超级用户的交叉编译环境变量,

U-install 图-40
使用以下命令,编辑/root下的.bashrc文件,注意前面有个小“.”:
#cd /root
#gedit .bashrc

U-install 图-41
最后面加上:export PATH=$PATH:/opt/arm-2009q1-203/bin:,或者PATH=”/opt/arm-2009q1-203/bin:$PATH”,建议选择前者,并保存退出。
使用#source .bashrc生效,或重新退出Ubuntu的root,然后再登录root。
这样整个Sourcery G++ Lite for ARM全部搞定,这个交叉编译环境适合DM365/DM368,DM6446,DM6467,S3C2410,S3C2440,6410等ARM芯片,使用非常广泛,非常好用。
 
第七节、 DVSDK4_02_00_06软件开发包的安装
 
     安装dvsdk_dm365-evm_4_02_00_06_setuplinux.bin或者dvsdk_dm368-evm_4_02_00_06_setuplinux.bin之前,一定要做:
#apt-get install fakeroot

dvsdk 图-42
 
否则会出现图=43的BUG。

 

dvsdk 图-43
 
安装fakeroot结束后,
#chmod a+x dvsdk_dm365-evm_4_02_00_06_setuplinux.bin
#./dvsdk_dm365-evm_4_02_00_06_setuplinux.bin

 

dvsdk 图-44
出现图 -44的安装界面,点击“Next”,

 

dvsdk 图-45
提示你定位你的 GCC交叉编译工具的路径,我们按图-45选择“/opt/arm-2009q1-203/bin”,

dvsdk 图-45
 
如果你的 GCC交叉编译工具安装成功,安装过程会提示你的交叉编译工具是正确的,

 

dvsdk 图-46
然后开始选择安装DVSDK软件包的路径,我们建议(缩小当前安装过程,再打开另一个新的Terminal)在/home/davinci/目录下,生成:
#mkdir –p dm365/dvsdk_dm365_4_02_00_06
#mkdir -p dm368/dvsdk_dm368_4_02_00_06

 

dvsdk 图-47
 
或者按图-47直接在安装过程中生成文件夹的方式都可以。
把dvsdk_dm365-evm_4_02_00_06_setuplinux.bin装到dvsdk_dm365_4_02_00_06,或者把dvsdk_dm368-evm_4_02_00_06_setuplinux.bin装到dvsdk_dm368_4_02_00_06里,看你开发的是DM365还是DM368,其实这个dvsdk_dm365_4_02_00_06文件夹可以命名再短点,没有规定。

 

dvsdk 图-48
“Next”下去,
 
dvsdk 图-49
这里图-49提示整个DVSDK的安装需要大概2.67G的虚拟机空间,我们继续“Next”,直到安装结束。

dvsdk 图-50
安装结束后,直接ls命令看看DVSDK4.02的面貌,这里的先不描述,我们先把环境继续搭建好,因为NFS,TFTP 两个SERVER还没动手呢。
注意DVSDK4.02里的setup.sh,见图-50,TI已经把怎样搭建NFS和TFTP server做成脚本自动升级和配置方式,可以给大家省去很多麻烦。由于里边有我们不适合使用的串口调试工具,我们决定只配置NFS和TFTP就OK了,其他可以选择安装。所以我们先编辑setup.sh文件:

dvsdk 图-51
把setup-minicom.sh和setup-uboot-evn.sh给屏蔽掉。我们的串口调试工具使用SecureCRT,这个挺好用的。还有我们不是买TI的EVM开发板,是自己设计产品,板子都没开始调试,所以我们先屏蔽setup-uboot-evn.sh,保存退出。在DVSDK的目录下,
#./setup.sh
这样就会自动升级NFS包和TFTP的包,并自动配置,TI在这个版本做得比较好,开始安装:

dvsdk 图-52
安装的过程中,提示你输入NFS的路径,本人的是:/home/davinci/dm365/dvsdk_dm365_4_02_00_06/filesystem/dm365rootfs。输入后,直接回车。因为在此之前,本人在安装完DVSDK后,自己先在/home/davinci/dm365/dvsdk_dm365_4_02_00_06/filesystem/目录下生产一个空的dm365rootfs文件夹,所以会出现U-install 图-53的提示,系统会问你这个/home/davinci/dm365/dvsdk_dm365_4_02_00_06/filesystem/路径下已经存在dm365rootfs的文件夹,

dvsdk 图-53
是否需要:
输入“r”表示重新命名,输入”o”表示覆盖dm365rootfs里边的内容,输入”s”表示跳过文件系统的文件解压,因为安装过程会把/home/davinci/dm365/dvsdk_dm365_4_02_00_06/filesystem下的dvsdk-dm365-evm-rootfs.tar.gz文件系统文件解压到dm365rootfs里。本人直接输入”o”。如果之前没有使用#mkdir dm365rootfs,那就不会有这样的提示,按照图-52输入完路径,直接回车就自动安装下去。

dvsdk 图-54
然后安装过程继续提示你是否生产/tftpboot的目录,如果没有,这里会自动帮你生产/tftpboot目录,这个就是TFTP SERVER的目录,专门存放 UBL, U-BOOT,KERNEL等的烧写BIN文件的地方。这一步结束后,NFS和TFTP SERVER都自动搭建好了。

dvsdk 图-55
最后,到/home/davinci/dm365/dvsdk_dm365_4_02_00_06/psp的目录下看看,这里有UBL(在flash-utils里),u-boot-2010.12-psp-xxxxxxx,linux-2.6.32.17-psp-xxxxxxx和linux-driver-examples的源码,这个U-BOOT和内核的源码文件夹太长,我们使用mv命令改为:u-boot-2010.12和linux-2.6.32.17。然后按图-55在/home/davinci/dm365/dvsdk_dm365_4_02_00_06目录下#gedit Rules.make文件,修改内核linux-2.6.32.17的路径,不要使用默认长长的文件夹路径;同时检查交叉编译工具的路径是否和你前面的安装路径对应。
CSTOOL_DIR=/opt/arm-2009q1-203
CSTOOL_PREFIX=$(CSTOOL_DIR)/bin/arm-none-linux-gnueabi-
保存退出后,编译DVSDK里边的元素之前,在/home/davinci/dm365/dvsdk_dm365_4_02_00_06的目录下,必须做如下命令,就是使交叉编译环境生效:
#source linux-devkit/environment-setup
基本大功告成。
检验交叉编译工具GCC是否好用:
在/home/davinci/dm365/dvsdk_dm365_4_02_00_06目录下:
#make u-boot_clean
#make-u-boot
看看u-boot是否可以编译过去。
如果按照上面的安装,基本没什么问题。
至于如何编译内核和u-boot等,请gedit /home/davinci/dm365/dvsdk_dm365_4_02_00_06目录下的Makefile文件看看。
 
第八节、 总结介绍
 
   花了很长的时间调试本公司做的开发板,然后验证OK后,才敢写这篇文章,我们写技术博客都是很实在的,没必要假大空,也不是Ctrl+C和Ctrl+V搞出来的论文。
顺便晒晒我们做的核心板和开发板,目前硬件测试完毕,软件还没完善,有些驱动需要添加和改动。由于DM365/368采用0.65mm的BGA工艺,使PCB布板难度更大,风险更高,我们做核心板的任务就是尽量帮客户解决这些硬件和系统驱动的问题,让客户在短时间出产品抢市场,抢时间,降低开发风险和投资风险。核心板5片才开始卖,单独1~4片买来玩玩的朋友我们这种单子不敢接,建议先买开发板玩玩熟悉再说。因为卖了就得对客户负责,而我们没有这么庞大的技术支持队伍,所以我们一般和那些有诚意批量采购的客户合作,或者直接飞过来当面签订项目合同的客户合作。
详细的介绍见博客 http://zjbintsystem.blog.51cto.com/964211/326108DM6446-DM6437-DM365核心板(最小系统板)》,还有我们深圳市桐烨科技的公司网站: http://www.tongyetech.com/
 

 

DM365核心板
 
 

DM365开发板
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值