uboot带DMA网卡移植到扬创F移植详细步骤文档格式.docx
《uboot带DMA网卡移植到扬创F移植详细步骤文档格式.docx》由会员分享,可在线阅读,更多相关《uboot带DMA网卡移植到扬创F移植详细步骤文档格式.docx(22页珍藏版)》请在冰豆网上搜索。
还要记得修改自己的开发板tekkaman2440目录下的Makefile文件,不然编译时会出错:
[root@localhostutu2440]#vimMakefile
COBJS:
=utu2440.oflash.o
3在include/configs/中建立配置头文件
[root@localhostu-boot-cpinclude/configs/smdk2410.hinclude/configs/utu2440.h
4测试编译能否成功
1)配置
[root@localhostu-boot-maketekkaman2440_config
Configuringforutu2440board...
注:
(1)如果出现:
[root@localhostu-boot-makeutu2440_config
Makefile:
2497:
***遗漏分隔符(您的意思是用TAB代替8个空格?
)。
停止。
请在U-boot的根目录下的Makefile的
_config=)armarm920tutu2440NULLs3c24x0)
前加上“Tab”键
2)测试编译
[root@localhostu-boot-
0、修改makefile文件
__LIBS:
=$(subst$(obj),,$(LIBS))$(subst$(obj),,$(LIBBOARD))
改为:
=$(subst$(obj),,$(LIBBOARD))$(subst$(obj),,$(LIBS))
二、进行移植,修改uboot代码
1、修改/cpu/arm920t/start.S
#include
#ifdefined(CONFIG_AT91RM9200DK)
#include/*这是针对AT91RM9200DK开发板的。
#endif
......
/*
*theactualstartcode
*/
start_code:
/*
*setthecputoSVC32mode
*/
mrsr0,cpsr
bicr0,r0,#0x1f
orrr0,r0,#0xd3
msrcpsr,r0
blcoloured_LED_init
blred_LED_on
(0)修改寄存器地址定义
#ifdefined(CONFIG_S3C2400)||defined(CONFIG_S3C2410)||defined(CONFIG_S3C2440)
/*turnoffthewatchdog*/
#ifdefined(CONFIG_S3C2400)
#definepWTCON0x
#defineINTMSK0x/*Interupt-Controllerbaseaddresses*/
#defineCLKDIVN0x/*clockdivisorregister*/
#else
#defineINTMSK0x4A000008/*Interupt-Controllerbaseaddresses*/
#defineINTSUBMSK0x4A00001C
#defineCLKDIVN0x4C000014/*clockdivisorregister*/
#defineCLK_CTL_BASE0x4C000000
#defineMPLLCON4/*MPLLCON的偏移地址*/
(1)修改中断禁止部分
#ifdefined(CONFIG_S3C2410)
ldrr1,=0x7ff/*根据2410芯片手册,INTSUBMSK有11位可用,
vivi也是0x7ff,U-Boot一直没改过来。
ldrr0,=INTSUBMSK
strr1,[r0]
#ifdefined(CONFIG_S3C2440)
ldrr1,=0x7fff/*根据2440芯片手册,INTSUBMSK有15位可用*/
(2)修改时钟设置(2440的主频为405MHz。
)
#ifdefined(CONFIG_S3C2440)
/*FCLK:
HCLK:
PCLK=1:
4:
8*/
ldrr0,=CLKDIVN
movr1,#5
mrcp15,0,r1,c1,c0,0/*readctrlregister*/
orrr1,r1,#0xc0000000/*Asynchronous*/
mcrp15,0,r1,c1,c0,0/*writectrlregister*/
/*now,CPUclockis405.00Mhz这边直接copy了vivi的部分代码*/
mov
r1,#CLK_CTL_BASE
@ldr
r2,mpll_value
@clockdefault
ldr
r2,=0x7f021
@mpll_value_USER
str
r2,[r1,#MPLLCON]
ldr
r0,=CLKDIVN
mov
r1,#3
str
r1,[r0]
mrcp15,0,r1,c1,c0,0/*readctrlregister*/
/*now,CPUclockis202.8Mhz*/
movr1,#CLK_CTL_BASE
movr2,#MDIV_200/*mpll_200mhz*/
addr2,r2,#PSDIV_200/*mpll_200mhz*/
strr2,[r1,#0x04]
#endif
#endif
/*CONFIG_S3C2400||CONFIG_S3C2410||CONFIG_S3C2440*/
/*
*wedosys-criticalinitsonlyatreboot,
*notwhenbootingfromram!
*/
#ifndefCONFIG_SKIP_LOWLEVEL_INIT
bl
cpu_init_crit
#endif
movr1,#GPIO_CTL_BASE
addr1,r1,#oGPIO_F
ldrr2,=0x55aa
strr2,[r1,#oGPIO_CON]
movr2,#0xff
strr2,[r1,#oGPIO_UP]
movr2,#0x0
strr2,[r1,#oGPIO_DAT]
/*时钟以及内存配置配置好后灯全亮*/
(3)将从Flash启动改成从NANDFlash启动。
注释掉以下U-Boot的重定向语句
#ifdef
CONFIG_AT91RM9200
#ifndefCONFIG_SKIP_RELOCATE_UBOOT
relocate:
/*relocateU-BoottoRAM
adr
r0,_start
/*r0#endif
然后copyvivi中从nand启动的代码
#ifdefCONFIG_S3C2440_NAND_BOOT
@resetNAND
movr1,#NAND_CTL_BASE
ldrr2,=((7
在“ldr
pc,_start_armboot”之前加入:
movr1,#GPIO_CTL_BASE
addr1,r1,#oGPIO_F
movr2,#0xc0
strr2,[r1,#oGPIO_DAT]
在“
_start_armboot:
.wordstart_armboot
”后加入:
.align2
DW_STACK_START:
.wordSTACK_BASE+STACK_SIZE-4
2
在board/utu2440加入NANDFlash读函数文件,拷贝vivi中的nand_read.c文件到board/utu2440/即可不需要作任何改动:
#define__REGb(x)(*(volatileunsignedchar*)(x))
#define__REGi(x)(*(volatileunsignedint*)(x))
#defineNF_BASE0x4e000000
#defineNFCONF__REGi(NF_BASE+0x0)
#defineNFCONT__REGi(NF_BASE+0x4)
#defineNFCMD__REGb(NF_BASE+0x8)
#defineNFADDR__REGb(NF_BASE+0xC)
#defineNFDATA__REGb(NF_BASE+0x10)
#defineNFSTAT__REGb(NF_BASE+0x20)
//#defineGPDAT__REGi(GPIO_CTL_BASE+oGPIO_F+oGPIO_DAT)
#defineNAND_CHIP_ENABLE(NFCONT&
=~(1>
9)&
0xff;
NFADDR=(i>
>
17)&
25)&
NAND_DETECT_RB;
for(j=0;
j>
wait_idle();
j3修改board/utu2440/Makefile文件
OBJS:
=utu2440.onand_read.oflash.o
4修改include/configs/utu2440.h文件,添加如下内容:
......
*NandflashBoot
#defineSTACK_BASE0x33f00000
#defineSTACK_SIZE0x8000
//#defineUBOOT_RAM_BASE0x33f80000
/*NANDFlashController*/
#defineNAND_CTL_BASE0x4E000000
#definebINT_CTL(Nb)__REG(INT_CTL_BASE+(Nb))
/*Offset*/
#defineoNFCONF0x00
#defineCONFIG_S3C2440_NAND_BOOT1
#defineoNFCONT0x04
#defineoNFCMD0x08
#defineoNFADDR0x0c
#defineoNFDATA0x10
#defineoNFSTAT0x20
#defineoNFECC0x2c
#definerNFCONF(*(volatileunsignedint*)0x4e000000)
#definerNFCONT(*(volatileunsignedint*)0x4e000004)
#definerNFCMD(*(volatileunsignedchar*)0x4e000008)
#definerNFADDR(*(volatileunsignedchar*)0x4e00000c)
#definerNFDATA(*(volatileunsignedchar*)0x4e000010)
#definerNFSTAT(*(volatileunsignedint*)0x4e000020)
#definerNFECC(*(volatileunsignedint*)0x4e00002c)
/*GPIO*/
#defineGPIO_CTL_BASE0x
#defineoGPIO_F
0x50
#defineoGPIO_CON
0x0/*R/W,Configuresthepinsoftheport*/
#defineoGPIO_DAT
0x4/*R/W,Dataregisterforport*/
#defineoGPIO_UP
0x8/*R/W,Pull-updisableregister*/
#endif/*__CONFIG_H*/
5修改board/utu2440/lowlevel_init.S文件
依照开发板的内存区的配置情况,修改board/utu2440/lowlevel_init.S文件,我利用友善之臂提供的vivi源码里的信息做了如下更改:
#defineB1_BWSCON
(DW16)
#defineB2_BWSCON
#defineB3_BWSCON
(DW16+WAIT+UBLB)
#defineB4_BWSCON
#defineB5_BWSCON
#defineB6_BWSCON
(DW32)
#defineB7_BWSCON
#defineB2_Tacs
0x0
#defineB2_Tcos
#defineB2_Tacc
0x7
#defineB2_Tcoh
#defineB2_Tah
#defineB2_Tacp
#defineB2_PMC
……
/*REFRESHparameter*/
#defineREFEN
0x1
/*Refreshenable*/
#defineTREFMD
0x0
/*CBR(CASbeforeRAS)/Autorefresh*/
#defineTrc
0x3
/*7clk*/
#defineTchr
0x2
/*3clk*/
#defineTrp
/*4clk*/
#defineREFCNT
1265
/**************************************/
_TEXT_BASE:
.wordTEXT_BASE
.globllowlevel_init
lowlevel_init:
/*memorycontrolconfiguration*/
/*maker0relativethecurrentlocationsothatit*/
/*readsSMRDATAoutofFLASHratherthanmemory!
//ldrr0,=SMRDATA
adrlr0,SMRDATA//editedbyyaoyi
ldrr1,_TEXT_BASE
//subr0,r0,r1
ldrr1,=BWSCON/*BusWidthStatusController*/
addr2,r0,#13*4
0:
ldrr3,[r0],#4
strr3,[r1],#4
cmpr2,r0
bne0b
6修改/board/utu2440/utu2440.c
修改其对GPIO和PLL的配置(请参阅开发板的硬件说明和芯片手册):
#defineFCLK_SPEED1
#ifFCLK_SPEED==0
/*Fout=203MHz,Fin=12MHzforAudio*/
#defineM_MDIV
0xC3
#defineM_PDIV
0x4
#defineM_SDIV
0x1
#elifFCLK_SPEED==1
/*Fout=202.8MHz*/
0xA1
0x3
/*Fout=405MHz*/
#defineM_MDIV0x7f
#defineM_PDIV0x2
#defineM_SDIV0x1
#defineUSB_CLOCK1
#ifUSB_CLOCK==0
#defineU_M_MDIV
#defineU_M_PDIV
#defineU_M_SDIV
#elifUSB_CLOCK==1
0x48
#defineU_M_PD
IV
#defineU_M_MDIV0x38
#defineU_M_PDIV0x2
0x2
intboard_init(void)
{
......
gpio->
GPFDAT=0xaf;
//板子初始化完后,亮灯
}
7为了实现NANDFlash的读写,再次修改/include/configs/utu2440.h
*HighLevelConfigurationOptions
*(easytochange)
#defineCONFIG_ARM920T
1
/*ThisisanARM920TCore
//#define
CONFIG_S3C2410
/*inaSAMSUNGS3C2410SoC
*/
//editedbyyaoyi
//#defineCONFIG_SMDK2410
/*onaSAMSUNGSMDK2410Board
#defineCONFIG_utu2440
1
#defineCONFIG_S3C2440
.......
#defineCONFIG_CMD_ELF
#defineCONFIG_C