三星网卡物理地址

网卡物理地址  时间:2021-05-19  阅读:()
s5pv210uboot-2012-10移植(一)之分析AlexLing的linaro-2011.
10formini210好久好久前就买了s5pv210的开发板,一直都是东搞搞西搞搞,一点收获也没有,这次下决心来移植最新的uboot到u-boot-2012.
10上,并通过这个博客记录下来以防时间长给忘了,我的开发板是QT210的.
s5pv210的启动分为BL0,BL1,BL2,BL0是出厂的时候就固化在IROM里的,所以我们的uboot就要实现BL1和BL2,BL1在uboot里叫做u-boot-spl.
bin,BL2就是我们很熟悉的u-boot.
bin了.
在移植之前,我们先看下AlexLing的linaro-2011.
10formini210的UBOOT是怎么实现的.
这里主要还是分析SPL部分,u-boot.
bin是如何生成的现在资料很多,也很复杂,我这个菜鸟也是一知半解的,所以就不分析了.
1.
顶层的Makefile,从中可以知道,我们要想生成u-boot-spl.
bin就必须配置COFNIG_SPL,那么u-boot-spl.
bin依赖什么呢,我们继续1.
ALL-$(CONFIG_SPL)+=$(obj)spl/u-boot-spl.
bin2.
3.
all:$(ALL-y)搜索发现,是进入到uboot顶层目录的spl目录下执行Makefile的1.
$(obj)spl/u-boot-spl.
bin:depend2.
$(MAKE)-Csplall2.
打开spl/Makefile分析,一开始就给我们导出CONFIG_SPL_BUILD1.
CONFIG_SPL_BUILD:=y2.
exportCONFIG_SPL_BUILD然后分析目标,因为我们的平台是三星的,所以,会有两个目标,一个是不带头信息的u-boot-spl.
bin,一个是$(obj)$(BOARD)-spl.
bin.
1.
ALL-y+=$(obj)u-boot-spl.
bin2.
3.
ifdefCONFIG_SAMSUNG4.
ALL-y+=$(obj)$(BOARD)-spl.
bin5.
endif6.
7.
all:$(ALL-y)搜索$(obj)$(BOARD)-spl.
bin,发现,他是通过一个工具生成带头信息的u-boot-spl.
binObject1Object2Object3Object4Object5Object6Object7Object8Object9Object10Object11Object12Object13Object14Object15Object16Object17Object18Object19Object20Object21Object22Object23Object24Object25Object26Object27Object28Object29Object30Object31Object32Object33Object34Object35Object36Object37Object38Object39Object40Object41Object42Object43Object44Object45Object46Object47Object48Object49Object50Object51Object52Object53Object54Object55Object56Object571.
ifdefCONFIG_SAMSUNG2.
$(obj)$(BOARD)-spl.
bin:$(obj)u-boot-spl.
bin3.
$(TOPDIR)/board/$(BOARDDIR)/tools/mk$(BOARD)spl.
exe\4.
$(obj)u-boot-spl.
bin$(obj)$(BOARD)-spl.
bin5.
endif好了,Makefile就分析到这里,知道了BL1是如何生成的了.
下面里分析代码了.
首先分析arch/arm/cpu/armv7/start.
S1.
reset:2.
blsave_boot_params3.
/*4.
*setthecputoSVC32mode5.
*/6.
mrsr0,cpsr7.
bicr0,r0,#0x1f8.
orrr0,r0,#0xd39.
msrcpsr,r010.
11.
/*themaskROMcodeshouldhavePLLandothersstable*/12.
#ifndefCONFIG_SKIP_LOWLEVEL_INIT13.
blcpu_init_crit14.
#endif15.
16.
/*SetstackpointerininternalRAMtocallboard_init_f*/17.
call_board_init_f:18.
ldrsp,=(CONFIG_SYS_INIT_SP_ADDR)19.
bicsp,sp,#7/*8-bytealignmentforABIcompliance*/20.
ldrr0,=0x0000000021.
blboard_init_f其中,cpu_init_crit中主要做初始化了memory和串口,接下来就是调用C函数board_init_f了,在调用C函数之前得设置栈,board_init_f有两个,一个是在arch/arm/lib/board.
c,一个在board/samsung/mini210/mmc_boot.
c那么道理是那个呢,看各个目录下的Makefile1.
arch/arm/lib/下的1.
ifndefCONFIG_SPL_BUILD2.
.
.
.
3.
COBJS-y+=board.
o4.
.
.
.
5.
endif2.
board/samsung/mini210/1.
ifdefCONFIG_SPL_BUILD2.
COBJS+=mmc_boot.
o3.
endif得出,是board/samsung/mini210/mmc_boot.
c了,打开1.
voidboard_init_f(unsignedlongbootflag)2.
{3.
__attribute__((noreturn))void(*uboot)(void);4.
copy_uboot_to_ram();5.
6.
/*JumptoU-Bootimage*/7.
uboot=(void*)CONFIG_SYS_TEXT_BASE;8.
(*uboot)();9.
/*NeverreturnsHere*/10.
}得出,首先拷贝BL2完整的UBOOT到RAM里去,然后从ram里开始执行,然后就没有了.
那么是如何拷贝的呢,这就得需要一个文档了S5PV210_iROM_ApplicationNote_Preliminary_20091126.
pdf中好了,看看copy_uboot_to_ram代码1.
typedefu32(*copy_sd_mmc_to_mem)2.
(u32channel,u32start_block,u16block_size,u32*trg,u32init);1.
ch=*(volatileu32*)(0xD0037488);2.
copy_sd_mmc_to_memcopy_bl2=3.
(copy_sd_mmc_to_mem)(*(u32*)(0xD0037F98));1.
u32ret;2.
if(ch==0xEB000000){3.
ret=copy_bl2(0,MOVI_BL2_POS,MOVI_BL2_BLKCNT,4.
CONFIG_SYS_TEXT_BASE,0);5.
}elseif(ch==0xEB200000){6.
ret=copy_bl2(2,MOVI_BL2_POS,MOVI_BL2_BLKCNT,7.
CONFIG_SYS_TEXT_BASE,0);8.
}其中,MOVI_BL2_POS是1,MOVI_BL2_BLKCNT是49,CONFIG_SYS_TEXT_BASE是uboot在内存里的其实地址.
复制完成之后就会在内存里从u-boot.
bin的start.
S出开始重新执行了.
s5pv210uboot-2012-10移植(二)之能够启动进入控制台这次我们将从官网下载的最新uboot-2012-10移植到s5pv210开发板上,让其进入控制台,效果如下:首先,我暂时没采用内核的SPL,这个将在后面给补上,这里的BL1是我自己参考资料写的,我用的是QT210开发板,内存1G,对于不同的开发板,需要重新配置memory和修改uboot在内存里的地址,也就是CONFIG_SYS_TEXT_BASE.
我的BL1代码在这里下载.
一、添加smdkv210单板1.
cp-aboard/samsung/smdkc100board/samsung/smdkv2102.
cpinclude/configs/smdkc100.
hinclude/configs/smdkv210.
h3.
vimboards.
cfg,在270行添加1.
270smdkv210armarmv7smdkv210samsungs5pc1xx4.
makesmdkv210_config可以生成u-boot.
bin了二、让u-boot.
bin在内存里启动起来1.
分析我的BL1代码可以得知,只拷贝了u-boot.
bin,并没有清楚bss,在lsarch/arm/cpu/armv7/start.
S+126中添加1.
reset:2.
//byZheGaoclearbss3.
ldrr0,=__bss_start4.
ldrr1,=__bss_end__5.
movr2,#0x06.
1:7.
strr2,[r0],#48.
cmpr0,r19.
bne1b10.
//endofclearbss11.
12.
blsave_boot_params2.
在BL0已经关了看门狗,在BL1里已经初始化了memory和串口,修改board/samsung/smdkv210/lowlevel_init.
S+39中给屏蔽1.
.
globllowlevel_init2.
lowlevel_init:3.
movr9,lr4.
#if05.
/*r5hasalwayszero*/6.
movr5,#07.
8.
ldrr8,=S5PC100_GPIO_BASE9.
10.
/*DisableWatchdog*/11.
ldrr0,=S5PC100_WATCHDOG_BASE@0xEA20000012.
orrr0,r0,#0x013.
strr5,[r0]14.
15.
/*settingSRAM*/16.
ldrr0,=S5PC100_SROMC_BASE17.
ldrr1,=0x918.
strr1,[r0]19.
20.
/*S5PC100has3groupsofinterruptsources*/21.
ldrr0,=S5PC100_VIC0_BASE@0xE400000022.
ldrr1,=S5PC100_VIC1_BASE@0xE400000023.
ldrr2,=S5PC100_VIC2_BASE@0xE400000024.
25.
/*Disableallinterrupts(VIC0,VIC1andVIC2)*/26.
mvnr3,#0x027.
strr3,[r0,#0x14]@INTENCLEAR28.
strr3,[r1,#0x14]@INTENCLEAR29.
strr3,[r2,#0x14]@INTENCLEAR30.
31.
/*SetallinterruptsasIRQ*/32.
strr5,[r0,#0xc]@INTSELECT33.
strr5,[r1,#0xc]@INTSELECT34.
strr5,[r2,#0xc]@INTSELECT35.
36.
/*PendingInterruptClear*/37.
strr5,[r0,#0xf00]@INTADDRESS38.
strr5,[r1,#0xf00]@INTADDRESS39.
strr5,[r2,#0xf00]@INTADDRESS40.
41.
/*forUART*/42.
bluart_asm_init43.
44.
/*forTZPC*/45.
bltzpc_asm_init46.
47.
1:48.
#endif49.
movlr,r950.
movpc,lr3.
修改第一步的sp指针,在include/configs/smdkv210.
h+228修改1.
//#defineCONFIG_SYS_INIT_SP_ADDR(CONFIG_SYS_LOAD_ADDR-0x1000000)2.
#defineCONFIG_SYS_INIT_SP_ADDR(0x30000000)4.
修改board/samsung/smdkv210/smdkc100.
c+801.
intcheckboard(void)2.
{3.
printf("Board:\tSMDKv210\n");4.
return0;5.
}5.
修改include/configs/smdkv210.
h+511.
//#defineCONFIG_SYS_SDRAM_BASE0x300000002.
#defineCONFIG_SYS_SDRAM_BASE0x200000006.
修改include/configs/smdkv210.
h+1891.
//#definePHYS_SDRAM_1_SIZE(128mon_len;2.
addr=0x5ff00000;11.
因为bl1已经复制程序到指定的地址就不需要重新定位代码了,但还是需要重新设置栈,所以修改了上面的第8步,修改arch/arm/cpu/armv7/start.
S+1921.
ENTRY(relocate_code)2.
movr4,r0/*saveaddr_sp*/3.
movr5,r1/*saveaddrofgd*/4.
movr6,r2/*saveaddrofdestination*/5.
6.
#if07.
//debug8.
ldrr0,=0xE0200C009.
ldrr1,=0x111110.
strr1,[r0]11.
12.
ldrr0,=0xE0200C0413.
ldrr1,=(7)14.
strr1,[r0]15.
#endif16.
17.
movsp,r418.
movr0,r519.
movr1,r620.
21.
blboard_init_r22.
#if023.
/*Setupthestack*/24.
stack_setup:25.
movsp,r426.
27.
adrr0,_start28.
cmpr0,r629.
moveqr9,#0/*norelocation.
relocationoffset(r9)=0*/30.
beqclear_bss/*skiprelocation*/31.
movr1,r6/*r10x30000000144.
*0xf8->0x37FFFFFF145.
*[15:12]0:Linear146.
*[11:8]2:9bits147.
*[7:4]2:14bits148.
*[3:0]2:4banks149.
*/150.
ldrr1,=0x30f80222151.
/*ifr4is1,swapthebank*/152.
cmpr4,#0x1153.
orreqr1,r1,#0x08000000154.
strr1,[r6,#0x008]@MEMCONFIG0155.
156.
/*157.
*Bank1158.
*0x38->0x38000000159.
*0xf8->0x3fFFFFFF160.
*[15:12]0:Linear161.
*[11:8]2:9bits162.
*[7:4]2:14bits163.
*[3:0]2:4banks164.
*/165.
ldrr1,=0x38f80222166.
/*ifr4is1,swapthebank*/167.
cmpr4,#0x1168.
biceqr1,r1,#0x08000000169.
strr1,[r6,#0x00c]@MEMCONFIG1170.
171.
ldrr1,=0x20000000172.
strr1,[r6,#0x014]@PRECHCONFIG173.
174.
/*175.
*FIXME:Pleaseverifythesevalues176.
*7.
8us*166MHz%LE%LONG1294(0x50E)177.
*7.
8us*133MHz%LE%LONG1038(0x40E),178.
*7.
8us*100MHz%LE%LONG780(0x30C),179.
*7.
8us*20MHz%LE%LONG156(0x9C),180.
*7.
8us*10MHz%LE%LONG78(0x4E)181.
*/182.
ldrr1,=0x0000050e183.
strr1,[r6,#0x030]@TIMINGAREF184.
185.
/*166MHz*/186.
ldrr1,=0x0c233287187.
strr1,[r6,#0x034]@TIMINGROW188.
189.
/*twtr=3twr=2trtp=3cl=3wl=3rl=3*/190.
ldrr1,=0x32330303191.
strr1,[r6,#0x038]@TIMINGDATA192.
193.
/*tfaw=4sxsr=0x14txp=0x14tcke=3tmrd=3*/194.
ldrr1,=0x04141433195.
strr1,[r6,#0x03C]@TIMINGPOWER196.
197.
/*chip0Deselect*/198.
ldrr1,=0x07000000199.
strr1,[r6,#0x010]@DIRECTCMD200.
201.
/*chip0PALL*/202.
ldrr1,=0x01000000203.
strr1,[r6,#0x010]@DIRECTCMD204.
205.
/*chip0REFA*/206.
ldrr1,=0x05000000207.
strr1,[r6,#0x010]@DIRECTCMD208.
/*chip0REFA*/209.
strr1,[r6,#0x010]@DIRECTCMD210.
211.
/*chip0MRS,CL%LE%LONG3,BL%LE%LONG4*/212.
ldrr1,=0x00000032213.
strr1,[r6,#0x010]@DIRECTCMD214.
215.
/*chip1Deselect*/216.
ldrr1,=0x07100000217.
strr1,[r6,#0x010]@DIRECTCMD218.
219.
/*chip1PALL*/220.
ldrr1,=0x01100000221.
strr1,[r6,#0x010]@DIRECTCMD222.
223.
/*chip1REFA*/224.
ldrr1,=0x05100000225.
strr1,[r6,#0x010]@DIRECTCMD226.
/*chip1REFA*/227.
strr1,[r6,#0x010]@DIRECTCMD228.
229.
/*chip1MRS,CL%LE%LONG3,BL%LE%LONG4*/230.
ldrr1,=0x00100032231.
strr1,[r6,#0x010]@DIRECTCMD232.
233.
/*autorefreshon*/234.
ldrr1,=0xff002030235.
strr1,[r6,#0x000]@CONCONTROL236.
237.
/*PwrdnConfig*/238.
ldrr1,=0x00100002239.
strr1,[r6,#0x028]@PWRDNCONFIG240.
241.
/*BL%LE%LONG*/242.
ldrr1,=0xff212100243.
strr1,[r6,#0x004]@MEMCONTROL244.
245.
246.
/*Trytotestmemoryarea*/247.
cmpr4,#0x1248.
beq1f249.
250.
movr4,#0x1251.
ldrr1,=0x37ffff00252.
strr4,[r1]253.
strr4,[r1,#0x4]@dummywrite254.
ldrr0,[r1]255.
cmpr0,r4256.
bneswap_memory257.
#endif258.
259.
/*DMC0DriveStrength(Setting2X)*/260.
261.
ldrr0,=ELFIN_GPIO_BASE262.
263.
ldrr1,=0x0000AAAA264.
strr1,[r0,#MP1_0DRV_SR_OFFSET]265.
266.
ldrr1,=0x0000AAAA267.
strr1,[r0,#MP1_1DRV_SR_OFFSET]268.
269.
ldrr1,=0x0000AAAA270.
strr1,[r0,#MP1_2DRV_SR_OFFSET]271.
272.
ldrr1,=0x0000AAAA273.
strr1,[r0,#MP1_3DRV_SR_OFFSET]274.
275.
ldrr1,=0x0000AAAA276.
strr1,[r0,#MP1_4DRV_SR_OFFSET]277.
278.
ldrr1,=0x0000AAAA279.
strr1,[r0,#MP1_5DRV_SR_OFFSET]280.
281.
ldrr1,=0x0000AAAA282.
strr1,[r0,#MP1_6DRV_SR_OFFSET]283.
284.
ldrr1,=0x0000AAAA285.
strr1,[r0,#MP1_7DRV_SR_OFFSET]286.
287.
ldrr1,=0x00002AAA288.
strr1,[r0,#MP1_8DRV_SR_OFFSET]289.
290.
291.
/*DMC1DriveStrength(Setting2X)*/292.
293.
ldrr0,=ELFIN_GPIO_BASE294.
295.
ldrr1,=0x0000AAAA296.
strr1,[r0,#MP2_0DRV_SR_OFFSET]297.
298.
ldrr1,=0x0000AAAA299.
strr1,[r0,#MP2_1DRV_SR_OFFSET]300.
301.
ldrr1,=0x0000AAAA302.
strr1,[r0,#MP2_2DRV_SR_OFFSET]303.
304.
ldrr1,=0x0000AAAA305.
strr1,[r0,#MP2_3DRV_SR_OFFSET]306.
307.
ldrr1,=0x0000AAAA308.
strr1,[r0,#MP2_4DRV_SR_OFFSET]309.
310.
ldrr1,=0x0000AAAA311.
strr1,[r0,#MP2_5DRV_SR_OFFSET]312.
313.
ldrr1,=0x0000AAAA314.
strr1,[r0,#MP2_6DRV_SR_OFFSET]315.
316.
ldrr1,=0x0000AAAA317.
strr1,[r0,#MP2_7DRV_SR_OFFSET]318.
319.
ldrr1,=0x00002AAA320.
strr1,[r0,#MP2_8DRV_SR_OFFSET]321.
322.
/*DMC0initializationatsingleType*/323.
ldrr0,=APB_DMC_0_BASE324.
325.
ldrr1,=0x00101000@PhyControl0DLLparametersetting,manual0x00101000326.
strr1,[r0,#DMC_PHYCONTROL0]327.
328.
ldrr1,=0x00000086@PhyControl1DLLparametersetting,LPDDR/LPDDR2Case329.
strr1,[r0,#DMC_PHYCONTROL1]330.
331.
ldrr1,=0x00101002@PhyControl0DLLon332.
strr1,[r0,#DMC_PHYCONTROL0]333.
334.
ldrr1,=0x00101003@PhyControl0DLLstart335.
strr1,[r0,#DMC_PHYCONTROL0]336.
337.
find_lock_val:338.
ldrr1,[r0,#DMC_PHYSTATUS]@LoadPhystatusregistervalue339.
andr2,r1,#0x7340.
cmpr2,#0x7@LoopuntilDLLislocked341.
bnefind_lock_val342.
343.
andr1,#0x3fc0344.
movr2,r1,LSL#18345.
orrr2,r2,#0x100000346.
orrr2,r2,#0x1000347.
348.
orrr1,r2,#0x3@ForceValuelocking349.
strr1,[r0,#DMC_PHYCONTROL0]350.
351.
#if0/*Memorymargintest10.
01.
05*/352.
orrr1,r2,#0x1@DLLoff353.
strr1,[r0,#DMC_PHYCONTROL0]354.
#endif355.
/*settingDDR2*/356.
ldrr1,=0x0FFF2010@ConControlautorefreshoff357.
strr1,[r0,#DMC_CONCONTROL]358.
359.
ldrr1,=0x00212400@MemControlBL=4,2chip,DDR2type,dynamicselfrefresh,forceprecharge,dynamicpowerdownoff360.
strr1,[r0,#DMC_MEMCONTROL]361.
362.
ldrr1,=DMC0_MEMCONFIG_0@MemConfig0256MBconfig,8banks,MappingMethod[12:15]0:linear,1:linterleaved,2:Mixed363.
strr1,[r0,#DMC_MEMCONFIG0]364.
365.
ldrr1,=DMC0_MEMCONFIG_1@MemConfig1366.
strr1,[r0,#DMC_MEMCONFIG1]367.
368.
ldrr1,=0xFF000000@PrechConfig369.
strr1,[r0,#DMC_PRECHCONFIG]370.
371.
ldrr1,=DMC0_TIMINGA_REF@TimingAref7.
8us*133MHz=1038(0x40E),100MHz=780(0x30C),20MHz=156(0x9C),10MHz=78(0x4E)372.
strr1,[r0,#DMC_TIMINGAREF]373.
374.
ldrr1,=DMC0_TIMING_ROW@TimingRowfor@200MHz375.
strr1,[r0,#DMC_TIMINGROW]376.
377.
ldrr1,=DMC0_TIMING_DATA@TimingDataCL=3378.
strr1,[r0,#DMC_TIMINGDATA]379.
380.
ldrr1,=DMC0_TIMING_PWR@TimingPower381.
strr1,[r0,#DMC_TIMINGPOWER]382.
383.
ldrr1,=0x07000000@DirectCmdchip0Deselect384.
strr1,[r0,#DMC_DIRECTCMD]385.
386.
ldrr1,=0x01000000@DirectCmdchip0PALL387.
strr1,[r0,#DMC_DIRECTCMD]388.
389.
ldrr1,=0x00020000@DirectCmdchip0EMRS2390.
strr1,[r0,#DMC_DIRECTCMD]391.
392.
ldrr1,=0x00030000@DirectCmdchip0EMRS3393.
strr1,[r0,#DMC_DIRECTCMD]394.
395.
ldrr1,=0x00010400@DirectCmdchip0EMRS1(MEMDLLon,DQS#disable)396.
strr1,[r0,#DMC_DIRECTCMD]397.
398.
ldrr1,=0x00000542@DirectCmdchip0MRS(MEMDLLreset)CL=4,BL=4399.
strr1,[r0,#DMC_DIRECTCMD]400.
401.
ldrr1,=0x01000000@DirectCmdchip0PALL402.
strr1,[r0,#DMC_DIRECTCMD]403.
404.
ldrr1,=0x05000000@DirectCmdchip0REFA405.
strr1,[r0,#DMC_DIRECTCMD]406.
407.
ldrr1,=0x05000000@DirectCmdchip0REFA408.
strr1,[r0,#DMC_DIRECTCMD]409.
410.
ldrr1,=0x00000442@DirectCmdchip0MRS(MEMDLLunreset)411.
strr1,[r0,#DMC_DIRECTCMD]412.
413.
ldrr1,=0x00010780@DirectCmdchip0EMRS1(OCDdefault)414.
strr1,[r0,#DMC_DIRECTCMD]415.
416.
ldrr1,=0x00010400@DirectCmdchip0EMRS1(OCDexit)417.
strr1,[r0,#DMC_DIRECTCMD]418.
419.
ldrr1,=0x07100000@DirectCmdchip1Deselect420.
strr1,[r0,#DMC_DIRECTCMD]421.
422.
ldrr1,=0x01100000@DirectCmdchip1PALL423.
strr1,[r0,#DMC_DIRECTCMD]424.
425.
ldrr1,=0x00120000@DirectCmdchip1EMRS2426.
strr1,[r0,#DMC_DIRECTCMD]427.
428.
ldrr1,=0x00130000@DirectCmdchip1EMRS3429.
strr1,[r0,#DMC_DIRECTCMD]430.
431.
ldrr1,=0x00110400@DirectCmdchip1EMRS1(MEMDLLon,DQS#disable)432.
strr1,[r0,#DMC_DIRECTCMD]433.
434.
ldrr1,=0x00100542@DirectCmdchip1MRS(MEMDLLreset)CL=4,BL=4435.
strr1,[r0,#DMC_DIRECTCMD]436.
437.
ldrr1,=0x01100000@DirectCmdchip1PALL438.
strr1,[r0,#DMC_DIRECTCMD]439.
440.
ldrr1,=0x05100000@DirectCmdchip1REFA441.
strr1,[r0,#DMC_DIRECTCMD]442.
443.
ldrr1,=0x05100000@DirectCmdchip1REFA444.
strr1,[r0,#DMC_DIRECTCMD]445.
446.
ldrr1,=0x00100442@DirectCmdchip1MRS(MEMDLLunreset)447.
strr1,[r0,#DMC_DIRECTCMD]448.
449.
ldrr1,=0x00110780@DirectCmdchip1EMRS1(OCDdefault)450.
strr1,[r0,#DMC_DIRECTCMD]451.
452.
ldrr1,=0x00110400@DirectCmdchip1EMRS1(OCDexit)453.
strr1,[r0,#DMC_DIRECTCMD]454.
455.
ldrr1,=0x0FF02030@ConControlautorefreshon456.
strr1,[r0,#DMC_CONCONTROL]457.
458.
ldrr1,=0xFFFF00FF@PwrdnConfig459.
strr1,[r0,#DMC_PWRDNCONFIG]460.
461.
ldrr1,=0x00202400@MemControlBL=4,2chip,DDR2type,dynamicselfrefresh,forceprecharge,dynamicpowerdownoff462.
strr1,[r0,#DMC_MEMCONTROL]463.
464.
/*DMC1initialization*/465.
ldrr0,=APB_DMC_1_BASE466.
467.
ldrr1,=0x00101000@Phycontrol0DLLparametersetting468.
strr1,[r0,#DMC_PHYCONTROL0]469.
470.
ldrr1,=0x00000086@Phycontrol1DLLparametersetting471.
strr1,[r0,#DMC_PHYCONTROL1]472.
473.
ldrr1,=0x00101002@PhyControl0DLLon474.
strr1,[r0,#DMC_PHYCONTROL0]475.
476.
ldrr1,=0x00101003@PhyControl0DLLstart477.
strr1,[r0,#DMC_PHYCONTROL0]478.
find_lock_val1:479.
ldrr1,[r0,#DMC_PHYSTATUS]@LoadPhystatusregistervalue480.
andr2,r1,#0x7481.
cmpr2,#0x7@LoopuntilDLLislocked482.
bnefind_lock_val1483.
484.
andr1,#0x3fc0485.
movr2,r1,LSL#18486.
orrr2,r2,#0x100000487.
orrr2,r2,#0x1000488.
489.
orrr1,r2,#0x3@ForceValuelocking490.
strr1,[r0,#DMC_PHYCONTROL0]491.
492.
#if0/*Memorymargintest10.
01.
05*/493.
orrr1,r2,#0x1@DLLoff494.
strr1,[r0,#DMC_PHYCONTROL0]495.
#endif496.
497.
/*settinffotDDR2*/498.
ldrr0,=APB_DMC_1_BASE499.
500.
ldrr1,=0x0FFF2010@autorefreshoff501.
strr1,[r0,#DMC_CONCONTROL]502.
503.
ldrr1,=DMC1_MEMCONTROL@MemControlBL=4,2chip,DDR2type,dynamicselfrefresh,forceprecharge,dynamicpowerdownoff504.
strr1,[r0,#DMC_MEMCONTROL]505.
506.
ldrr1,=DMC1_MEMCONFIG_0@MemConfig0512MBconfig,8banks,MappingMethod[12:15]0:linear,1:linterleaved,2:Mixed507.
strr1,[r0,#DMC_MEMCONFIG0]508.
509.
ldrr1,=DMC1_MEMCONFIG_1@MemConfig1510.
strr1,[r0,#DMC_MEMCONFIG1]511.
512.
ldrr1,=0xFF000000513.
strr1,[r0,#DMC_PRECHCONFIG]514.
515.
ldrr1,=DMC1_TIMINGA_REF@TimingAref7.
8us*133MHz=1038(0x40E),100MHz=780(0x30C),20MHz=156(0x9C),10MHz=78(0x4516.
strr1,[r0,#DMC_TIMINGAREF]517.
518.
ldrr1,=DMC1_TIMING_ROW@TimingRowfor@200MHz519.
strr1,[r0,#DMC_TIMINGROW]520.
521.
ldrr1,=DMC1_TIMING_DATA@TimingDataCL=3522.
strr1,[r0,#DMC_TIMINGDATA]523.
524.
ldrr1,=DMC1_TIMING_PWR@TimingPower525.
strr1,[r0,#DMC_TIMINGPOWER]526.
527.
528.
ldrr1,=0x07000000@DirectCmdchip0Deselect529.
strr1,[r0,#DMC_DIRECTCMD]530.
531.
ldrr1,=0x01000000@DirectCmdchip0PALL532.
strr1,[r0,#DMC_DIRECTCMD]533.
534.
ldrr1,=0x00020000@DirectCmdchip0EMRS2535.
strr1,[r0,#DMC_DIRECTCMD]536.
537.
ldrr1,=0x00030000@DirectCmdchip0EMRS3538.
strr1,[r0,#DMC_DIRECTCMD]539.
540.
ldrr1,=0x00010400@DirectCmdchip0EMRS1(MEMDLLon,DQS#disable)541.
strr1,[r0,#DMC_DIRECTCMD]542.
543.
ldrr1,=0x00000542@DirectCmdchip0MRS(MEMDLLreset)CL=4,BL=4544.
strr1,[r0,#DMC_DIRECTCMD]545.
546.
ldrr1,=0x01000000@DirectCmdchip0PALL547.
strr1,[r0,#DMC_DIRECTCMD]548.
549.
ldrr1,=0x05000000@DirectCmdchip0REFA550.
strr1,[r0,#DMC_DIRECTCMD]551.
552.
ldrr1,=0x05000000@DirectCmdchip0REFA553.
strr1,[r0,#DMC_DIRECTCMD]554.
555.
ldrr1,=0x00000442@DirectCmdchip0MRS(MEMDLLunreset)556.
strr1,[r0,#DMC_DIRECTCMD]557.
558.
ldrr1,=0x00010780@DirectCmdchip0EMRS1(OCDdefault)559.
strr1,[r0,#DMC_DIRECTCMD]560.
561.
ldrr1,=0x00010400@DirectCmdchip0EMRS1(OCDexit)562.
strr1,[r0,#DMC_DIRECTCMD]563.
564.
ldrr1,=0x07100000@DirectCmdchip1Deselect565.
strr1,[r0,#DMC_DIRECTCMD]566.
567.
ldrr1,=0x01100000@DirectCmdchip1PALL568.
strr1,[r0,#DMC_DIRECTCMD]569.
570.
ldrr1,=0x00120000@DirectCmdchip1EMRS2571.
strr1,[r0,#DMC_DIRECTCMD]572.
573.
ldrr1,=0x00130000@DirectCmdchip1EMRS3574.
strr1,[r0,#DMC_DIRECTCMD]575.
576.
ldrr1,=0x00110440@DirectCmdchip1EMRS1(MEMDLLon,DQS#disable)577.
strr1,[r0,#DMC_DIRECTCMD]578.
579.
ldrr1,=0x00100542@DirectCmdchip1MRS(MEMDLLreset)CL=4,BL=4580.
strr1,[r0,#DMC_DIRECTCMD]581.
582.
ldrr1,=0x01100000@DirectCmdchip1PALL583.
strr1,[r0,#DMC_DIRECTCMD]584.
585.
ldrr1,=0x05100000@DirectCmdchip1REFA586.
strr1,[r0,#DMC_DIRECTCMD]587.
588.
ldrr1,=0x05100000@DirectCmdchip1REFA589.
strr1,[r0,#DMC_DIRECTCMD]590.
591.
ldrr1,=0x00100442@DirectCmdchip1MRS(MEMDLLunreset)592.
strr1,[r0,#DMC_DIRECTCMD]593.
594.
ldrr1,=0x00110780@DirectCmdchip1EMRS1(OCDdefault)595.
strr1,[r0,#DMC_DIRECTCMD]596.
597.
ldrr1,=0x00110400@DirectCmdchip1EMRS1(OCDexit)598.
strr1,[r0,#DMC_DIRECTCMD]599.
600.
ldrr1,=0x0FF02030@ConControlautorefreshon601.
strr1,[r0,#DMC_CONCONTROL]602.
603.
ldrr1,=0xFFFF00FF@PwrdnConfig604.
strr1,[r0,#DMC_PWRDNCONFIG]605.
606.
ldrr1,=DMC1_MEMCONTROL@MemControlBL=4,2chip,DDR2type,dynamicselfrefresh,forceprecharge,dynamicpowerdownoff607.
strr1,[r0,#DMC_MEMCONTROL]608.
609.
movpc,lr5.
修改board/samsung/smdkv210/Makefile添加对mem_setup.
S的选则编译,uboot里就不需要编译了,因为BL1已经初始化过了,在执行一次也没问题的1.
ifndefCONFIG_SPL_BUILD2.
SOBJS:=lowlevel_init.
o3.
endif4.
5.
ifdefCONFIG_SPL_BUILD6.
SOBJS:=lowlevel_init.
omem_setup.
o7.
endif6.
修改arch/arm/lib/spl.
c的board_init_f函数1.
void__weakboard_init_f(ulongdummy)2.
{3.
__attribute__((noreturn))void(*uboot)(void);4.
#if05.
/*Setthestackpointer.
*/6.
asmvolatile("movsp,%0\n"::"r"(CONFIG_SPL_STACK));7.
8.
/*CleartheBSS.
*/9.
memset(__bss_start,0,__bss_end__-__bss_start);10.
11.
/*Setglobaldatapointer.
*/12.
gd=&gdata;13.
14.
board_init_r(NULL,0);15.
#endif16.
17.
/*18.
//test19.
#defineGPH0CON(*(volatileunsignedint*)0xE0200C00)20.
#defineGPH0DAT(*(volatileunsignedint*)0xE0200C04)21.
22.
GPH0CON=(19.
分析spl/Makefile得知,在tools/下没有mk$(BOARD)spl这个工具,我暂时对这个工具不熟悉,就用自己的吧,我的工具是mkv210_image,用来制作BL1头信息的1.
ifdefCONFIG_SAMSUNG2.
$(obj)$(BOARD)-spl.
bin:$(obj)u-boot-spl.
bin3.
$(OBJTREE)/tools/mk$(BOARD)spl\4.
$(obj)u-boot-spl.
bin$(obj)$(BOARD)-spl.
bin5.
endif10.
修改spl/Makefile,然后拷贝mkv210_image.
c到tools/下1.
ifdefCONFIG_SAMSUNG2.
$(obj)$(BOARD)-spl.
bin:$(obj)u-boot-spl.
bin3.
$(HOSTCC)$(TOPDIR)/tools/mkv210_image.
c-o$(TOPDIR)/tools/mkv210_image4.
$(OBJTREE)/tools/mkv210_image\5.
$(obj)u-boot-spl.
bin$(obj)$(BOARD)-spl.
bin6.
endif11.
make,插入SD卡,使用下面的命令烧写SPL和uboot.
bin到SD卡上1.
ddiflag=dsyncoflag=dsyncif=spl/smdkv210-spl.
binof=/dev/sdbseek=11.
ddiflag=dsyncoflag=dsyncif=u-boot.
binof=/dev/sdbseek=4912.
把SD卡插到开发板上,上电,就可以在控制台上打印出这里UBOOT有个小BUG,在执行spl/Makefile的时候,include/configs/smdkv210.
h中有下面这种带//注释代码的就不行,他会在spl/u-boot-spl.
lds上生成出来,导致链接出错,解决方法就是把这种注释全给删了.
或改成/**/这种方法1.
//#definePHYS_SDRAM_1_SIZE(128=0;i--);15.
}3.
include/configs/smdkv210.
h+1781.
/*#defineCONFIG_SYS_PROMPT"SMDKC100#"*/2.
#defineCONFIG_SYS_PROMPT"SMDKV210#"4.
include/configs/smdkv210.
h+2061.
/*#defineCONFIG_IDENT_STRING"forSMDKC100"*/2.
#defineCONFIG_IDENT_STRING"forSMDKV210"5.
arch/arm/lib/spl.
c+1831.
void__weakboard_init_f(ulongdummy)2.
{3.
__attribute__((noreturn))void(*uboot)(void);4.
#if05.
/*Setthestackpointer.
*/6.
asmvolatile("movsp,%0\n"::"r"(CONFIG_SPL_STACK));7.
8.
/*CleartheBSS.
*/9.
memset(__bss_start,0,__bss_end__-__bss_start);10.
11.
/*Setglobaldatapointer.
*/12.
gd=&gdata;13.
14.
board_init_r(NULL,0);15.
#endif16.
17.
/*18.
//test19.
#defineGPH0CON(*(volatileunsignedint*)0xE0200C00)20.
#defineGPH0DAT(*(volatileunsignedint*)0xE0200C04)21.
22.
GPH0CON=(1k0,CONFIG_ENV_SROM_BANK,GPIO_FUNC(2));18.
19.
/*Ethernetneedsbuswidthof16bits*/20.
smc_bw_conf=SMC_DATA16_WIDTH(CONFIG_ENV_SROM_BANK);21.
smc_bc_conf=SMC_BC_TACS(0x0)|SMC_BC_TCOS(0x4)|SMC_BC_TACC(0xe)22.
|SMC_BC_TCOH(0x1)|SMC_BC_TAH(0x4)23.
|SMC_BC_TACP(0x6)|SMC_BC_PMC(0x0);24.
25.
/*SelectandconfiguretheSROMCbank*/26.
s5p_config_sromc(CONFIG_ENV_SROM_BANK,smc_bw_conf,smc_bc_conf);27.
#endif28.
29.
unsignedinttmp;30.
31.
SROM_BW&=~((0xf网卡物理地址和板子的ip地址6.
设置环境变量,ping7.
每次重启后都需要重新配置,很麻烦的,include/configs/smdkv210.
h+2481.
#defineCONFIG_NETMASK255.
255.
255.
02.
#defineCONFIG_IPADDR192.
168.
0.
893.
#defineCONFIG_SERVERIP192.
168.
0.
884.
#defineCONFIG_ETHADDR00:40:5c:26:0a:5b5.
#defineCONFIG_GATEWAYIP192.
168.
0.
18.
make,烧写到SD卡中,上电,ping可以从控制台里看到,在通过tftp命令从服务器端下载uImage,或者可以printenv看看有没有在环境变量里设定.
s5pv210uboot-2012-10移植(六)之支持NandFlash我的开发板上外接256M的K9F2G08U0AFLASH芯片.
uboot-2012-10本身不带s5pv210的nandflash操作,s5pv210的nandflash和s3c2410的寄存器差不多,所以,我就在s3c2410的nandFlash上进行修改了,因为我不懂nandflash的HW_EEC,所以我实现的是SOFT_EEC了.
1.
修改include/configs/smdkv210.
h+881.
/*#undefCONFIG_CMD_NAND*/2.
#defineCONFIG_CMD_NAND3.
#defineCONFIG_SYS_MAX_NAND_DEVICE14.
#defineCONFIG_SYS_NAND_BASE0xB0E000005.
#defineCONFIG_NAND_S3C24102.
修改drivers/mtd/nand/s3c2410_nand.
c+207,屏蔽了s3c2410的nandflash初始化,添加了s5pv210nandflash总线的初始化和nandflash控制器的初始化,并添加s5pv210_select_chip函数,其他不变.
1.
intboard_nand_init(structnand_chip*nand)2.
{3.
#if04.
u_int32_tcfg;5.
u_int8_ttacls,twrph0,twrph1;6.
structs3c24x0_clock_power*clk_power=s3c24x0_get_base_clock_power();7.
structs3c2410_nand*nand_reg=s3c2410_get_base_nand();8.
9.
debug("board_nand_init()\n");10.
11.
writel(readl(&clk_power->clkcon)|(1clkcon);12.
13.
/*initializehardware*/14.
#ifdefined(CONFIG_S3C24XX_CUSTOM_NAND_TIMING)15.
tacls=CONFIG_S3C24XX_TACLS;16.
twrph0=CONFIG_S3C24XX_TWRPH0;17.
twrph1=CONFIG_S3C24XX_TWRPH1;18.
#else19.
tacls=4;20.
twrph0=8;21.
twrph1=8;22.
#endif23.
24.
cfg=S3C2410_NFCONF_EN;25.
cfg|=S3C2410_NFCONF_TACLS(tacls-1);26.
cfg|=S3C2410_NFCONF_TWRPH0(twrph0-1);27.
cfg|=S3C2410_NFCONF_TWRPH1(twrph1-1);28.
writel(cfg,&nand_reg->nfconf);29.
#endif30.
31.
#defineMP0_1CON(*(volatileunsignedint*)0xE02002E0)32.
#defineMP0_3CON(*(volatileunsignedint*)0xE0200320)33.
#defineNFCONF(*(volatileunsignedint*)0xB0E00000)34.
#defineNFCONT(*(volatileunsignedint*)0xB0E00004)35.
#defineNFCMMD(*(volatileunsignedchar*)0xB0E00008)36.
#defineNFADDR(*(volatileunsignedchar*)0xB0E0000C)37.
#defineNFDATA(*(volatileunsignedchar*)0xB0E00010)38.
#defineNFSTAT(*(volatileunsignedint*)0xB0E00028)39.
40.
#defineNFCONF_VAL((7IO_ADDR_R=(volatileunsignedchar*)0xB0E00010;66.
nand->IO_ADDR_W=(volatileunsignedchar*)0xB0E00010;67.
68.
nand->select_chip=s5pv210_select_chip;69.
70.
/*read_bufandwrite_bufaredefault*/71.
/*read_byteandwrite_bytearedefault*/72.
#ifdefCONFIG_NAND_SPL73.
nand->read_buf=nand_read_buf;74.
#endif75.
76.
/*hwcontrolalwaysmustbeimplemented*/77.
nand->cmd_ctrl=s3c2410_hwcontrol;78.
79.
nand->dev_ready=s3c2410_dev_ready;80.
81.
#ifdefCONFIG_S3C2410_NAND_HWECC82.
nand->ecc.
hwctl=s3c2410_nand_enable_hwecc;83.
nand->ecc.
calculate=s3c2410_nand_calculate_ecc;84.
nand->ecc.
correct=s3c2410_nand_correct_data;85.
nand->ecc.
mode=NAND_ECC_HW;86.
nand->ecc.
size=CONFIG_SYS_NAND_ECCSIZE;87.
nand->ecc.
bytes=CONFIG_SYS_NAND_ECCBYTES;88.
#else89.
nand->ecc.
mode=NAND_ECC_SOFT;90.
#endif91.
92.
#ifdefCONFIG_S3C2410_NAND_BBT93.
nand->options=NAND_USE_FLASH_BBT;94.
#else95.
nand->options=0;96.
#endif97.
98.
debug("endofnand_init\n");99.
100.
return0;101.
}3.
在drivers/mtd/nand/s3c2410_nand.
c添加s5pv210_select_chip函数1.
staticvoids5pv210_select_chip(structmtd_info*mtd,intchipnr)2.
{3.
#defineNFCONT(*(volatileunsignedint*)0xB0E00004)4.
5.
structnand_chip*chip=mtd->priv;6.
7.
switch(chipnr){8.
case-1:9.
//chip->cmd_ctrl(mtd,NAND_CMD_NONE,0|NAND_CTRL_CHANGE);10.
NFCONT|=(1priv;5.
structs3c2410_nand*nand=s3c2410_get_base_nand();6.
7.
debug("hwcontrol():0x%02x0x%02x\n",cmd,ctrl);8.
9.
if(ctrl&NAND_CTRL_CHANGE){10.
ulongIO_ADDR_W=(ulong)nand;11.
12.
if(!
(ctrl&NAND_CLE))13.
IO_ADDR_W|=S3C2410_ADDR_NCLE;14.
if(!
(ctrl&NAND_ALE))15.
IO_ADDR_W|=S3C2410_ADDR_NALE;16.
17.
chip->IO_ADDR_W=(void*)IO_ADDR_W;18.
19.
if(ctrl&NAND_NCE)20.
writel(readl(&nand->nfconf)&~S3C2410_NFCONF_nFCE,21.
&nand->nfconf);22.
else23.
writel(readl(&nand->nfconf)|S3C2410_NFCONF_nFCE,24.
&nand->nfconf);25.
}26.
27.
if(cmd!
=NAND_CMD_NONE)28.
writeb(cmd,chip->IO_ADDR_W);29.
#endif30.
31.
#defineNFCMMD(*(volatileunsignedchar*)0xB0E00008)32.
#defineNFADDR(*(volatileunsignedchar*)0xB0E0000C)33.
34.
if(cmd!
=NAND_CMD_NONE){35.
if(ctrl&NAND_CLE){36.
NFCMMD=cmd;37.
//printf("cmd:%x\n",cmd);38.
//writeb(cmd,NFCMMD);39.
}40.
elseif(ctrl&NAND_ALE){41.
//writeb(cmd,NFADDR);42.
NFADDR=cmd;43.
//printf("addr:%x\n",cmd);44.
}45.
}46.
47.
}5.
make,使用命令下载到sd卡里,上电,观察控制台,可以看到,识别出了256M的nandflash了,以后就可以对nandflash进行操作了.
s5pv210uboot-2012-10移植(七)之支持SD卡我其实对SD卡的操作不是很熟悉,所以移植的肯定有问题,在随机赠送的Kingston4G的SD卡上可以进行读写,但是我换了张2G的SD卡,就不行了,原因暂时先不找了,等熟悉了SD卡的操作再看看,哪位大侠知道怎么移植的一定要告诉我,不胜感激.
1.
include/configs/smdkv210.
h+941.
#defineCONFIG_GENERIC_MMC2.
#defineCONFIG_MMC3.
#defineCONFIG_SDHCI4.
#defineCONFIG_S5P_SDHCI5.
#defineCONFIG_CMD_MMC2.
在board/samsung/smdkv210/smdkc100.
c添加1.
intboard_mmc_init(bd_t*bis)2.
{3.
//printf("haha\n");4.
#defineGPG0CON(*(volatileunsignedint*)0xE02001A0)5.
#defineGPG0DRV(*(volatileunsignedint*)0xE02001AC)6.
#defineGPG3CON(*(volatileunsignedint*)0xE0200200)7.
#defineCLK_DIV4(*(volatileunsignedint*)0xE0100310)8.
#defineCLK_SRC4(*(volatileunsignedint*)0xE0100210)9.
#defineMOUTMMC(50000000)/*50MHz*/10.
11.
unsignedlongclk_src,clk_div,mpll,div;12.
13.
//初始化MMC0MM3管脚,4bit模式14.
GPG0CON=(0x2cmdidx==MMC_CMD_STOP_TRANSMISSION)10.
mask&=~SDHCI_DATA_INHIBIT;11.
#endif12.
13.
/*14.
*PRNSTS15.
*CMDINHDAT[1]:CommandInhibit(DAT)16.
*CMDINHCMD[0]:CommandInhibit(CMD)17.
*/18.
mask=(1resp_type&MMC_RSP_BUSY))20.
mask|=(1<<1);21.
22.
/*23.
*Weshouldn'twaitfordatainihibitforstopcommands,even24.
*thoughtheymightusebusysignaling25.
*/26.
if(data)27.
mask&=~(1<<1);28.
29.
//mask=1;30.
//printf("mask:%08x\nread:%08x\n",mask,sdhci_readl(host,SDHCI_PRESENT_STATE));31.
while(sdhci_readl(host,SDHCI_PRESENT_STATE)&mask){32.
if(timeout==0){33.
printf("Controllerneverreleasedinhibitbit(s).
\n");34.
returnCOMM_ERR;35.
}36.
timeout--;37.
udelay(1000);38.
}4.
修改drivers/mmc/mmc.
c把sd_change_freq中的最后两个returneerr;给屏蔽掉1.
//if(err)2.
//returnerr;5.
make,使用命令烧入SD卡里,启动开发板s5pv210uboot-2012-10移植(八)之支持SD卡保存环境变量本次将实现SD卡保存环境变量,uboot的移植先到这里告一段落了,大体上能用了,但是还很不完善,等到以后需要用到的时候在继续添加,而且中间有移植错误的地方也希望各位大侠给指出来,特别是SD卡那里.
1.
include/configs/smdkv210.
h+233,CONFIG_ENV_OFFSET自己可以算下,保证不重复就行,我这里是为了保险起见1.
2.
*Bootconfiguration3.
*/4.
/*#defineCONFIG_ENV_IS_IN_ONENAND1*/5.
/*#defineCONFIG_ENV_IS_NOWHERE*/6.
#defineCONFIG_ENV_IS_IN_MMC7.
#defineCONFIG_SYS_MMC_ENV_DEV08.
#defineCONFIG_ENV_SIZE0x4000/*16KB*/9.
#defineRESERVE_BLOCK_SIZE(512)10.
#defineBL1_SIZE(8<<10)/*8KreservedforBL1*/11.
#defineCONFIG_ENV_OFFSET(RESERVE_BLOCK_SIZE+BL1_SIZE+((1024+512)*1024))12.
13.
/*#defineCONFIG_ENV_SIZE(128<<10)*//*128KiB,0x20000*/14.
/*#defineCONFIG_ENV_ADDR(256<<10)*//*256KiB,0x40000*/15.
/*#defineCONFIG_ENV_OFFSET(256<<10)*//*256KiB,0x40000*/2.
好了,make一下,烧写到SD卡里,上电出现***Warning-badCRC,usingdefaultenvironment,修改环境变量,保存,重新开机,然后看看有没有保存.

PIGYun月付14.4元起,美国洛杉矶/韩国VPS七月6折

PIGYun是成立于2019年的国人商家,提供香港、韩国和美西CUVIP-9929等机房线路基于KVM架构的VPS主机,本月商家针对韩国首尔、美国洛杉矶CUVIP-AS29、GIA回程带防御等多条线路VPS提供6-8.5折优惠码,优惠后韩国首尔CN2混合BGP特惠型/美国洛杉矶GIA回程带10Gbps攻击防御VPS主机最低每月14.4元起。下面列出几款不同机房VPS主机配置信息,请留意不同优惠码。...

HaBangNet(6.95美元/月)美国vps 5TB流量/德国vps 香港双向CN2 GIA VPS

HaBangNet支持支付宝和微信支付,只是价格偏贵,之前国内用户并不多。这次HaBangNet推出三个特价套餐,其中美国机房和德国机房价格也还可以,但是香港机房虽然是双向CN2 GIA线路,但是还是贵的惊人,需要美国和德国机房的可以参考下。HaBangNet是一家成立于2014年的香港IDC商家,中文译名:哈邦网络公司,主营中国香港、新加坡、澳大利亚、荷兰、美国、德国机房的虚拟主机、vps、专用...

atcloud:480G超高防御VPS低至$4/月,美国/新加坡等6机房,512m内存/1核/500g硬盘/不限流量

atcloud主要提供常规cloud(VPS)和storage(大硬盘存储)系列VPS,其数据中心分布在美国(俄勒冈、弗吉尼亚)、加拿大、英国、法国、德国、新加坡,所有VPS默认提供480Gbps的超高DDoS防御+不限流量,杜绝DDoS攻击骚扰,比较适合海外建站等相关业务。ATCLOUD.NET是一家成立于2020年的海外主机商,主要提供KVM架构的VPS产品、LXC容器化产品、权威DNS智能解...

网卡物理地址为你推荐
支持ipad平台操作使用手册360chromechrome是什么文件夹?是360急速浏览器吗?但是怎么没有卸载掉?win7关闭135端口如何用命令关闭135端口css选择器请给出三种Css选择器并举例说明ios5.1.1完美越狱我的苹果手机版本显示的是5.1.1,怎么才知道是不是ios啊?我现在想越狱ios10.0.3iphone se ios10.0.3能完美越狱吗?搜狗拼音输入法4.3搜狗拼音输入法打字出了问题搜狗拼音输入法4.3搜狗拼音输入法4.3正式版怎样变换繁体字厦门市学生健康体检网络管理信息平台——操作培训
虚拟主机评测 景安vps com域名抢注 simcentric idc评测网 godaddy续费优惠码 鲜果阅读 天猫双十一秒杀 日本空间 789电视 中国电信测网速 免费外链相册 nnt 密钥索引 .htaccess winserver2008下载 paypal兑换 内存 dbank 瓦工技术 更多