请问我的tu vivi nell aria手机卡,我用开发者模式设置好,然后把开发开发者模式关闭了 设置就回到原来一样了?

X5L的开发者模式!是隐藏的你可以打开拨号键盘!输入*#*#7777#*#*& && &更多玩机必备加企鹅& & 共同讨论
来自 vivo乐园
X5L的开发者模式!是隐藏的你可以打开拨号键盘!输入*#*#7777#*#*& && &更多玩机必备加企鹅& & 共 ...
这个有什么用
来自 vivo乐园
这个有什么用
自己看看就知道了
来自 vivo乐园
X5L的开发者模式!是隐藏的你可以打开拨号键盘!输入*#*#7777#*#*& && &更多玩机必备加企鹅& & 共 ...
这个比你的牛逼吧
125.jpg (188.72 KB, 下载次数: 21)
17:51 上传
来自 vivo乐园
这个比你的牛逼吧
撒比!你试试看你的好使不!除了第一个
来自 vivo乐园
X5L的开发者模式!是隐藏的你可以打开拨号键盘!输入*#*#7777#*#*& && &更多玩机必备加企鹅& & 共 ...
赞一个!嘿嘿!
来自 vivo乐园
【X7评测】1600万柔光自拍,为自拍而生
【X7美图】有了“你”就有了光,自拍神器vivo X7|图赏
【X7美图】静待邂逅,vivo X7图赏
【X7Plus美图】更美的大屏手机 vivo X7Plus「图赏」
【X7评测】夏日·乐悠悠|X7摄影美图系列
COPYRIGHT (C)
vivo COMMUNICATION TECHNOLOGY CO.LTD.ALL RIGHTS RESERVED.
成为vivo粉丝:
Powered byBootloader(Vivi)源代码分析 - 成都市炜之峰科技有限公司 - 中国电子顶级开发网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台
- Powered by X-Space
成都市炜之峰科技有限公司是一家专业嵌入式系统开发、单片机开发、电子电路设计、开发和销售的高科技企业。产品主要应用在安防、工业控制、医疗电子、机械电子、消费性电子、电力电子以及家电控制方面,我们有丰富的开发经验,为客户提供低廉的成本、高性能的产品设计方案。公司拥有一批的高素质研发,凭着多年的经验、优秀的品质、具有竞争力的价格、准时快捷的交货期,赢的广大客户的肯定。欢迎来电咨询,联系方式:QQ:, 电话:, 网址:
Bootloader(Vivi)源代码分析
& 22:31:40
目录1.1 Vivi简介1.2 vivi的配置与编译1.2.1 建立交叉开发环境1.2.2 配置和编译vivi1.3 vivi代码分析1.4 vivi的运行1.4.1 vivi的第一阶段1.4.2 vivi的第二阶段.1.5 启动代码执行流程图1.6 vivi的配置文件1.1 Vivi简介Vivi 是韩国mizi 公司开发的bootloader, 适用于ARM9处理器。 Vivi有两种工作模式:启动加载模式和下载模式。启动加载模式可以在一段时间后(这个时间可更改)自行启动linux内核,这时vivi的默认模式。在下载模式下,vivi为用户提供一个命令行接口,通过接口可以使用vivi提供的一些命令,见下表:命令 功能Load 把二进制文件载入Flash或RAMPart 操作MTD分区信息。显示、增加、删除、复位、保存MTD分区Param 设置参数Boot 启动系统Flash 管理Flash,如删除Flash的数据1.2 vivi的配置与编译1.2.1 建立交叉开发环境1、在宿主机上安装标准Linux 操作系统:Redhat 9.0 ( 主机系统为win2000,用虚拟机vmware安装的Redhat 9.0,内核版本为2.4.18) 。2、宿主机上安装交叉编译器。我这边的2410开发板提供的光盘上已附交叉编译器工具:arm-linux-gcc-2.95.3(源码为cross-2.95.3.tar.bz2)。先以root 用户的身份登陆到linux 下。进入/usr/local 目录,创建名为arm的目录:cd /usr/localmkdir arm将光盘提供的cross-2.95.3.tar.bz2解压到/usr/local/arm目录:tar jxvf cross-2.95.3.tar.bz2 CC /usr/local/arm然后修改修改PATH 变量:为了可以方便使用arm-linux-gcc编译器系统, 把arm-linux工具链目录加入到环境变量PATH中:修改/etc/profile文件,添加pathmunge /usr/local/arm/2.95.3/bin即可。# Path manipulationif [ `id -u` = 0 ]; thenpathmunge /sbinpathmunge /usr/sbinpathmunge /usr/local/sbinpathmunge /usr/local/arm/2.95.3/binfipathmunge /usr/X11R6/bin after设置环境变量后,最好是重启或注销一下,这样设置的环境变量才能生效。1.2.2 配置和编译vivi如果vivi的源代码已根据开发板作了相应改动,则需要对源代码进行配置和编译,以生成烧入flash的vivi 二进制映象文件。由于vivi要用到kernel的一些头文件,所以需要kernel的源代码,所以先要把linux的kernel准备好。将vivi和kernel都解到相应目录下(例如我将光盘提供的vivi源代码解压到/home/chenjun目录下,光盘提供的Linux kernel源码kernel-h2410eb.041024.tar.gz也解压到/home/chenjun目录下,解压后的文件名为kerne-h2410eb)。然后需修改/vivi/Makefile里的一些变量设置:? LINUX_INCLUDE_DIR = /kernel/include/(LINUX_INCLUDE_DIR 为kernel/include的对应目录,我的是/home/chen/kerne-h2410eb /include/)因此修改为:LINUX_INCLUDE_DIR = /home/chenjun/ kerne-h2410eb/include/? CROSS_COMPILE = /usr/local/arm/2.95.3/bin/arm-linux-(CROSS_COMPILE 为arm-linux安装的相应目录,我的是/usr/local/arm/2.95.3/bin/arm-linux-)因此修改为:CROSS_COMPILE = /usr/local/arm/2.95.3/bin/arm-linux-? ARM_GCC_LIBS = /usr/local/arm/2.95.3/lib/gcc-lib/arm-linux/2.95.3(需根据你arm-linux的安装目录修改,我的是/usr/local/arm/2.95.3/lib/gcc-lib/arm-linux/2.95.3)进入/vivi目录执行make distclean。(目的是确保编译的有效性,在编译之前将vivi里所有的“*.o”和“*.o.flag”文件删掉)进入/vivi目录里,输入“make menuconfig”,开始选择配置。可以Load一个写好的配置文件也可以自己修改试试。注意Exit时一定要选“Yes”保存配置。再输入“make”正式开始编译,一会儿就完了。如果不报错,在/vivi里面就有你自己的“vivi”了。这个就是后面要烧写到flash中的bootloader。1.3 vivi代码分析vivi的代码包括arch,init,lib,drivers和include等几个目录,共200多条文件。Vivi主要包括下面几个目录:arch:此目录包括了所有vivi支持的目标板的子目录,例如s3c2410目录。drivers:其中包括了引导内核需要的设备的驱动程序(MTD和串口)。MTD目录下分map、nand和nor三个目录。init:这个目录只有main.c和version.c两个文件。和普通的C程序一样,vivi将从main函数开始执行。lib:一些平台公共的接口代码,比如time.c里的udelay()和mdelay()。include:头文件的公共目录,其中的s3c2410.h定义了这块处理器的一些寄存器。Platform/smdk2410.h定义了与开发板相关的资源配置参数,我们往往只需要修改这个文件就可以配置目标板的参数,如波特率、引导参数、物理内存映射等。1.4 vivi的运行vivi的运行也可以分为两个阶段:1.4.1 vivi的第一阶段完成含依赖于CPU的体系结构硬件初始化的代码,包括禁止中断、初始化串口、复制自身到RAM等。相关代码集中在head.S(\vivi\arch\s3c2410目录下):Head.S:#include "config.h"#include "linkage.h"#include "machine.h"@ Start of executable codeENTRY(_start)ENTRY(ResetEntryPoint)@@ Exception vector table (physical address = 0x) ;异常向量表物理地址@@0x00: Reset ;复位b Reset@ 0x04: Undefined instruction exception ;未定义的指令异常UndefEntryPoint:b HandleUndef@0x08: Software interrupt exception ;软件中断异常SWIEntryPoint: b HandleSWI@ 0x0c: Prefetch Abort (Instruction Fetch Memory Abort) ;内存操作异常PrefetchAbortEnteryPoint: b HandlePrefetchAbort@ 0x10: Data Access Memory Abort ;数据异常DataAbortEntryPoint: b HandleDataAbort@0x14: Not used ;未使用NotUsedEntryPoint: b HandleNotUsed@ 0x18: IRQ(Interrupt Request) exception ;慢速中断处理IRQEntryPoint: b HandleIRQ@ 0x1c: FIQ(Fast Interrupt Request) exception ;快速中断处理FIQEntryPoint: b HandleFIQ@@ VIVI magics@@ 0x20: magic number so we can verify that we only put.long 0@ 0x24:.long 0@ 0x28: where this vivi was linked, so we can put it in memory in the right place.long _start@ 0x2C: this contains the platform, cpu and machine id.long ARCHITECTURE_MAGIC@ 0x30: vivi capabilities.long 0#ifdef CONFIG_PM ;vivi考虑不需要使用电源管理@ 0x34:b SleepRamProc#endif#ifdef CONFIG_TEST@ 0x38:b hmi#endif@@ Start VIVI head@Reset:@ disable watch dog timer ;禁止看门狗计时器mov r1, #0x ;WTCON寄存器地址是0x,清0mov r2, #0x0str r2, [r1]#ifdef CONFIG_S3C2410_MPORT3 ;不符合条件,跳到下面的关中断/**** 在/vivi/include/autoconf.h中#undef CONFIG_S3C2410_MPORT3******/mov r1, #0x ;GPACON寄存器地址是0xmov r2, #0x str r2, [r1, #0x70] ;配置GPHCON寄存器mov r2, #0x str r2, [r1, #0x78] ;配置GPHUP寄存器mov r2, #0x str r2, [r1, #0x74] ;配置GPHDAT寄存器#endif@ disable all interrupts ;禁止全部中断mov r1, #INT_CTL_BASEmov r2, #0xffffffff str r2, [r1, #oINTMSK] ;掩码关闭所有中断ldr r2, =0x7ffstr r2, [r1, #oINTSUBMSK]@ initialise system clocks ;初始化系统时钟mvn r2, #0xff000000str r2, [r1, #oLOCKTIME]@ldr r2, mpll_50mhz@str r2, [r1, #oMPLLCON]#ifndef CONFIG_S3C2410_MPORT1 ;满足条件,向下执行/**** 在/vivi/include/autoconf.h中#undef CONFIG_S3C2410_MPORT1******/@ 1:2:4mov r1, #CLK_CTL_BASEmov r2, #0x3str r2, [r1, #oCLKDIVN]mrc p15, 0, r1, c1, c0, 0 @ read ctrl registerorr r1, r1, #0xc0000000 @ Asynchronousmcr p15, 0, r1, c1, c0, 0 @ write ctrl register@ now, CPU clock is 200 Mhz ;CPU的频率是200MHzmov r1, #CLK_CTL_BASEldr r2, mpll_200mhzstr r2, [r1, #oMPLLCON]#else@ 1:2:2mov r1, #CLK_CTL_BASEldr r2, clock_clkdivnstr r2, [r1, #oCLKDIVN]orr r1, r1, #0xc0000000 @ Asynchronousmcr p15, 0, r1, c1, c0, 0 @ write ctrl register@ now, CPU clock is 100 Mhz ;CPU的频率是100MHzmov r1, #CLK_CTL_BASEldr r2, mpll_100mhzstr r2, [r1, #oMPLLCON]#endifbl memsetup ;跳转到memsetup函数/*****************************Memsetup函数的实现:ENTRY(memsetup)@ initialise the static memory@ set memory control registers ;设置内存控制寄存器的初值mov r1, #MEM_CTL_BASEadrl r2, mem_cfg_val/*******************@@ Data Area@@ Memory configuration values.align 4mem_cfg_val: ;定义好的13*4=52个字节初值.long vBWSCON ;在/vivi/include/platform/smdk2410.h中赋值/****** SDRAM从32位变成16位,需要修改vBWSCON的值 ******/.long vBANKCON0.long vBANKCON1.long vBANKCON2.long vBANKCON3/********** 网卡控制器vBANKCON3的值可能需要修改 **************/.long vBANKCON4.long vBANKCON5.long vBANKCON6/****** SDRAM从32位变成16位,可能需要修改vBANKCON6的值 ******/.long vBANKCON7.long vREFRESH.long vBANKSIZE/****** SDRAM从64MB变成32MB,需要修改vBANKSIZE的值 ******/.long vMRSRB6.long vMRSRB7********************/add r3, r1, #521: ldr r4, [r2], #4str r4, [r1], #4cmp r1, r3bne 1b ;循环操作,直到13个寄存器赋值完成mov pc, lr*******************************/#ifdef CONFIG_PM ;vivi考虑不需要使用电源管理@ Check if this is a wake-up from sleepldr r1, PMST_ADDRldr r0, [r1]tst r0, #(PMST_SMR)bne WakeupStart ;查看状态,判断是否需要跳转到WakeupStart#endif#ifdef CONFIG_S3C2410_SMDK ;SMDK开发板使用@ All LED on ;点亮开发板上的LEDmov r1, #GPIO_CTL_BASEadd r1, r1, #oGPIO_F ;LED使用GPIOF组的管脚ldr r2,=0x55aa ;使能EINT0,EINT1,EINT2,EINT3,;另四个管脚配置成输出,屏蔽EINT4,5,6,7str r2, [r1, #oGPIO_CON]mov r2, #0xffstr r2, [r1, #oGPIO_UP] ;disable the pull-up functionmov r2, #0x00str r2, [r1, #oGPIO_DAT]#endif#if 0@ SVCmrs r0, cpsrbic r0, r0, #0xdforr r1, r0, #0xd3msr cpsr_all, r1#endif@ set GPIO for UART ;设置串口mov r1, #GPIO_CTL_BASEadd r1, r1, #oGPIO_H ;设置GPIO_H组管脚为串口ldr r2, gpio_con_uartstr r2, [r1, #oGPIO_CON]ldr r2, gpio_up_uartstr r2, [r1, #oGPIO_UP]/*************************@ inital values for GPIOgpio_con_uart:.long vGPHCON ;vGPHCON在/vivi/include/platform/smdk2410.h中赋值;#define vGPHCON 0x0016faaa;GPIO_H配置为nCTS0,nRTS0, RXD0,TXD0, RXD1,;TXD1,nCTS1,nRTS1,/**** 三个串口都使能,可能需要修改#define vGPHCON 0x0016aaaa ****/gpio_up_uart:.long Vgphup ;同上#define vGPHUP 0x000007ff;The pull-up function is disabled.************************/bl InitUART ;跳转到InitUART串口初始化函数/****************************************************@ Initialize UART@@ r0 = number of UART portInitUART:ldr r1, SerBase/*******************.align 4 ;缺省情况下在vivi中只初始化了UART0SerBase:#if defined(CONFIG_SERIAL_UART0).long UART0_CTL_BASE ;基地址在/vivi/include/s3c2410.h中定义#elif defined(CONFIG_SERIAL_UART1).long UART1_CTL_BASE#elif defined(CONFIG_SERIAL_UART2).long UART2_CTL_BASE#else#error not defined base address of serial#endif********************/mov r2, #0x0str r2, [r1, #oUFCON]str r2, [r1, #oUMCON]mov r2, #0x3str r2, [r1, #oULCON]ldr r2, =0x245str r2, [r1, #oUCON]#define UART_BRD (( / (UART_BAUD_RATE * 16)) - 1)mov r2, #UART_BRDstr r2, [r1, #oUBRDIV]mov r3, #100mov r2, #0x01: sub r3, r3, #0x1tst r2, r3bne 1b#if 0mov r2, #'U'str r2, [r1, #oUTXHL]1: ldr r3, [r1, #oUTRSTAT]and r3, r3, #UTRSTAT_TX_EMPTYtst r3, #UTRSTAT_TX_EMPTYbne 1bmov r2, #'0'str r2, [r1, #oUTXHL]1: ldr r3, [r1, #oUTRSTAT]and r3, r3, #UTRSTAT_TX_EMPTYtst r3, #UTRSTAT_TX_EMPTYbne 1b#endifmov pc, lr****************************************************/#ifdef CONFIG_DEBUG_LL ;打印调试信息,缺省未定义@ Print current Program Counterldr r1, SerBasemov r0, #'\r'bl PrintCharmov r0, #'\n'bl PrintCharmov r0, bl PrintCharmov r0, pcbl PrintHexWord#endif#ifdef CONFIG_BOOTUP_MEMTEST@ simple memory test to find some DRAM flaults.bl memtest#endif#ifdef CONFIG_S3C2410_NAND_BOOT ;从NAND Flash启动bl copy_myself ;跳转到copy_myself函数/**********************************************@@ copy_myself: copy vivi to ram@copy_myself:mov r10, lr@ reset NANDmov r1, #NAND_CTL_BASEldr r2, =0xf830 @ initial valuestr r2, [r1, #oNFCONF]ldr r2, [r1, #oNFCONF]bic r2, r2, #0x800 @ enable chipstr r2, [r1, #oNFCONF]mov r2, #0xff @ RESET commandstrb r2, [r1, #oNFCMD]mov r3, #0 @ wait1: add r3, r3, #0x1cmp r3, #0xablt 1b2: ldr r2, [r1, #oNFSTAT] @ wait readytst r2, #0x1beq 2bldr r2, [r1, #oNFCONF]orr r2, r2, #0x800 @ disable chipstr r2, [r1, #oNFCONF]@ get read to call C functions (for nand_read())ldr sp, DW_STACK_START @ setup stack pointermov fp, #0 @ no previous frame, so fp=0@ copy vivi to RAMldr r0, =VIVI_RAM_BASE/*********在/vivi/linux/platform/smdk2410.h中定义#define VIVI_RAM_BASE (DRAM_BASE + DRAM_SIZE - VIVI_RAM_SIZE)***************************************/mov r1, #0x0mov r2, #0x20000 ;0x20000-〉128k字节bl nand_read_ll ;nand_read_ll在/vivi/arch/s3c2410/nand_read.c中定义;r0,r1,r2分别为函数的三个参数;从NANDFlash的0地址拷贝128k到SDRAM指定处tst r0, #0x0beq ok_nand_read#ifdef CONFIG_DEBUG_LLbad_nand_read:ldr r0, STR_FAILldr r1, SerBasebl PrintWord1: b 1b @ infinite loop#endifok_nand_read:#ifdef CONFIG_DEBUG_LLldr r0, STR_OKldr r1, SerBasebl PrintWord#endif@ verifymov r0, #0ldr r1, =0x33f00000mov r2, #0x400 @ 4 bytes * 1024 = 4K-bytesgo_next:ldr r3, [r0], #4ldr r4, [r1], #4teq r3, r4bne notmatchsubs r2, r2, #4beq done_nand_readbne go_nextnotmatch:#ifdef CONFIG_DEBUG_LLsub r0, r0, #4ldr r1, SerBasebl PrintHexWordldr r0, STR_FAILldr r1, SerBasebl PrintWord#endif1: b 1bdone_nand_read:#ifdef CONFIG_DEBUG_LLldr r0, STR_OKldr r1, SerBasebl PrintWord#endifmov pc, r10 ;vivi拷贝到SDRAM完成,函数返回*********************************/@ jump to ramldr r1, =on_the_ramadd pc, r1, #0nopnop1: b 1b @ infinite loopon_the_ram:#endif#ifdef CONFIG_DEBUG_LLldr r1, SerBaseldr r0, STR_STACKbl PrintWordldr r0, DW_STACK_STARTbl PrintHexWord#endif@ get read to call C functionsldr sp, DW_STACK_START @ setup stack pointermov fp, #0 @ no previous frame, so fp=0mov a2, #0 @ set argv to NULLbl main @ call mainmov pc, #FLASH_BASE @ otherwise, reboot@@ End VIVI head@1.4.2 vivi的第二阶段vivi的第二阶段是从main()函数开始,同一般的C语言程序一样,该函数在/init/main.c文件中,总共可以分为8个步骤。(1) 函数开始,通过putstr(vivi_banner)打印出vivi的版本。Vivi_banner在/init/version.c文件中定义(2) 对开发板进行初始化(board_init函数),board_init是与开发板紧密相关的,这个函数在/arch/s3c2410/smdk.c文件中。开发板初始化主要完成两个功能,时钟初始化(init_time())和通用IO口设置(set_gpios())。void set_gpios(void){GPACON = vGPACON;GPBCON = vGPBCON;GPBUP = vGPBUP;GPCCON = vGPCCON;GPCUP = vGPCUP;GPDCON = vGPDCON;GPDUP = vGPDUP;GPECON = vGPECON;GPEUP = vGPEUP;GPFCON = vGPFCON;GPFUP = vGPFUP;GPGCON = vGPGCON;GPGUP = vGPGUP;GPHCON = vGPHCON;GPHUP = vGPHUP;EXTINT0 = vEXTINT0;EXTINT1 = vEXTINT1;EXTINT2 = vEXTINT2;}其中,GPIO口在smdk2410.h(\vivi\include\platform\目录下)文件中定义。(3) 内存映射初始化和内存管理单元的初始化工作:mem_map_init();mmu_init();、这两个函数都在/arch/s3c2410/mmu.c文件中。void mem_map_init(void){#ifdef CONFIG_S3C2410_NAND_BOOTmem_map_nand_boot();#elsemem_map_nor();#endifcache_clean_invalidate();tlb_invalidate();}如果配置vivi时使用了NAND作为启动设备,则执行mem_map_nand_boot(),否则执行mem_map_nor()。这里要注意的是,如果使用NOR启动,则必须先把vivi代码复制到RAM中。这个过程是由copy_vivi_to_ram()函数来完成的。代码如下:static void copy_vivi_to_ram(void){ putstr_hex("Evacuating 1MB of Flash to DRAM at 0x", VIVI_RAM_BASE);memcpy((void *)VIVI_RAM_BASE, (void *)VIVI_ROM_BASE, VIVI_RAM_SIZE);}VIVI_RAM_BASE、VIVI_ROM_BASE、VIVI_RAM_SIZE这些值都可以在smdk2410.h中查到,并且这些值必须根据自己开发板的RAM实际大小修改。这也是在移植vivi的过程中需要注意的一个地方。mmu_init()函数中执行了arm920_setup函数。这段代码是用汇编语言实现的,针对arm920t核的处理器。(4) 初始化堆栈,heap_init()。(定义在\vivi\lib\heap.c文件中)int heap_init(void){return mmalloc_init((unsigned char *)(HEAP_BASE), HEAP_SIZE);}(5) 初始化mtd设备,mtd_dev_init()。int mtd_init(void){#ifdef CONFIG_MTD_CFIret = cfi_init();#endif#ifdef CONFIG_MTD_SMCret = smc_init();#endif#ifdef CONFIG_S3C2410_AMD_BOOTret = amd_init();#endifif (ret) {mymtd = NULL;}return 0;}这几个函数可以在/drivers/mtd/maps/s3c2410_flash.c里找到。(6) 初始化私有数据,init_priv_data()。(定义在\vivi\lib\priv_data\rw.c文件中)(7) 初始化内置命令,init_builtin_cmds()。通过add_command函数,加载vivi内置的几个命令。(8) 启动boot_or_vivi()。启动成功后,将通过vivi_shell()启动一个shell(如果配置了CONFIG_SERIAL_TERM),此时vivi的任务完成。1.5 启动代码执行流程图(1)head.s代码执行流程 (2)main.c代码执行流程1.6 vivi的配置文件Vivi的初始配置文件位置:/vivi/arch/def-configs/smkd2410, 通过make menuconfig 修改后的配置保存在这个文件中,我们也可以载入一个自己的配置文件来进行编译。
文章来源:网络炎炎夏日,热不可言。iOS平台却还是连续的冰冷期,希望大作爆发周快点到来。
很多时候我们都会听到“苹果已经落后了”的说法,这些到了现在都已经不再是什么骇人听...
每个人的生命中,有太多可以成为故事的东西,这不仅包括那些疯狂的经历,也包括我们每...
我们也不要期望 Google Assistant 在 iOS 平台上能拥有多高的集成度。
也就是说,有超过四分之一美国智能手机用户都在使用Siri等智能语音助手~
近期关于 Siri 扬声器的新闻不少,这让不少人对这款产品产生了期待。
米兰、时装、文化、苹果,其实这些元素都挺搭的~
第一代 iPad 于 2010 年秋天首次亮相,并在那之后成为苹果公司的一个主要的产品线。
现在随着交通越发的发达便利,全球化的步伐加快,出国旅游成为了大家享受生活,认识世...
RedFish 推出的《迷宫追逐》是一款3D像素风格的休闲竞技游戏。可以说这是RedFish 工作...
随着手游电竞的兴起,此类游戏可以说是非常热门的一种游戏类型了。近日,韩国著名游戏...
Lemon Jam Technology 近日给我们带来了新作《求和迷阵》,就如同名字所说,在游戏中...
在本周的 App Store 更新当中,我们迎来了一款像素复古风格的横版卷轴射击类游戏《盔...
横版射击游戏在游戏市场中已经出现了许多年了,而经过如此漫长的一段时间的发展之后,...
Oh BiBi socialtainment 本周给我们带来了新作《恐龙工厂(Dino Factory)》,在游戏...
一根数据线就将两者的功能完美结合到了一起,以后出门可就轻松多啦。
蝙蝠仿佛永远戴着一层神秘的面纱,让外界对其既害怕又感到些许好奇。
一个好的配件绝对能提高iPhone的使用体验~
你的Smart Keyboard还好吗?
你的iPad Pro的Smart Keyboard还好吗?
Swimpad 是一款专为 iPad mini 设计的防水套,让用户在游泳池也可以随时使用 iPad min...
你也想要HomeKit家居吗?
相信大部分的Apple Watch用户,都拥有不止一条的Apple Watch表带。
iPhone6装的sim卡和5一样吗?需要去剪卡吗?
注册时间 最后登录
在线时间619 小时 UID
主题帖子人气
白苹果, 积分 547, 距离下一级还需 953 积分
之前用5,想知道6的卡是不是一样的,谢谢
注册时间 最后登录
在线时间5760 小时 UID
主题帖子人气
还是nano sim
注册时间 最后登录
在线时间550 小时 UID
主题帖子人气
应该一样吧
注册时间 最后登录
在线时间169 小时 UID
主题帖子人气
都是NANO SIM啦,随便用。
一叶浮萍归大海,人生何处不相逢。
威锋旗下产品
Hi~我是威威!
沪公网安备 29号 | 沪ICP备号-1
新三板上市公司威锋科技(836555)
增值电信业务经营许可证:
Powered by Discuz!

我要回帖

更多关于 vivi女王霸踩腾讯视频 的文章

 

随机推荐