uboot带DMA网卡移植到扬创F移植详细步骤.docx
《uboot带DMA网卡移植到扬创F移植详细步骤.docx》由会员分享,可在线阅读,更多相关《uboot带DMA网卡移植到扬创F移植详细步骤.docx(22页珍藏版)》请在冰豆网上搜索。
![uboot带DMA网卡移植到扬创F移植详细步骤.docx](https://file1.bdocx.com/fileroot1/2023-2/2/44b6ce30-77d4-475d-88fd-644f162fdd6e/44b6ce30-77d4-475d-88fd-644f162fdd6e1.gif)
uboot带DMA网卡移植到扬创F移植详细步骤
扬创utu2440板子
注明:
本篇文章,绝大部分都是来源与tekkaman的移植U-,原文链接/34474/showart.php?
id=487416,只是因为,结合自己的调试经历,写下此篇,希望新手不会像我这样曲折。
一、在U-Boot中建立自己的开发板类型,并测试编译。
我为开发板取名叫:
utu2440
1进入U-Boot目录,修改Makefile
[root@localhostu-boot-vimMakefile
#为utu2440建立编译项
smdk2410_config:
unconfig
@$(MKCONFIG)$(@:
_config=)armarm920tsmdk2410NULLs3c24x0
utu2440_config:
unconfig
@$(MKCONFIG)$(@:
_config=)armarm920tutu2440NULLs3c24x0
各项的意思如下:
arm:
CPU的架构(ARCH)
arm920t:
CPU的类型(CPU),其对应于cpu/arm920t子目录。
utu2440:
开发板的型号(BOARD),对应于board/utu2440/目录,我将smdk2410覆盖了
NULL:
开发者/或经销商(vender)。
s3c24x0:
片上系统(SOC)。
设置环境变量
[root@localhostu-boot-vim/root/.bash_profile
在PATH一行后添加/usr/local/arm/
2在/board子目录中建立自己的开发板utu2440目录
[root@localhostu-boot-cdboard
[root@localhostboard]#cp-rafsmdk2410/utu2440
[root@localhostboard]#cdutu2440
[root@localhostutu2440]#mvsmdk2410.cutu2440.c
还要记得修改自己的开发板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的
@$(MKCONFIG)$(@:
_config=)armarm920tutu2440NULLs3c24x0)
前加上“Tab”键
2)测试编译
[root@localhostu-boot-
0、修改makefile文件
__LIBS:
=$(subst$(obj),,$(LIBS))$(subst$(obj),,$(LIBBOARD))
改为:
__LIBS:
=$(subst$(obj),,$(LIBBOARD))$(subst$(obj),,$(LIBS))
二、进行移植,修改uboot代码
1、修改/cpu/arm920t/start.S
#include
#include
#ifdefined(CONFIG_AT91RM9200DK)
#include/*这是针对AT91RM9200DK开发板的。
#endif
......
/*
*theactualstartcode
*/
start_code:
/*
*setthecputoSVC32mode
*/
mrsr0,cpsr
bicr0,r0,#0x1f
orrr0,r0,#0xd3
msrcpsr,r0
#ifdefined(CONFIG_AT91RM9200DK)
blcoloured_LED_init
blred_LED_on
#endif
(0)修改寄存器地址定义
#ifdefined(CONFIG_S3C2400)||defined(CONFIG_S3C2410)||defined(CONFIG_S3C2440)
/*turnoffthewatchdog*/
#ifdefined(CONFIG_S3C2400)
#definepWTCON0x
#defineINTMSK0x/*Interupt-Controllerbaseaddresses*/
#defineCLKDIVN0x/*clockdivisorregister*/
#else
#definepWTCON0x
#defineINTMSK0x4A000008/*Interupt-Controllerbaseaddresses*/
#defineINTSUBMSK0x4A00001C
#defineCLKDIVN0x4C000014/*clockdivisorregister*/
#defineCLK_CTL_BASE0x4C000000
#defineMPLLCON4/*MPLLCON的偏移地址*/
#endif
......
(1)修改中断禁止部分
#ifdefined(CONFIG_S3C2410)
ldrr1,=0x7ff/*根据2410芯片手册,INTSUBMSK有11位可用,
vivi也是0x7ff,U-Boot一直没改过来。
*/
ldrr0,=INTSUBMSK
strr1,[r0]
#endif
#ifdefined(CONFIG_S3C2440)
ldrr1,=0x7fff/*根据2440芯片手册,INTSUBMSK有15位可用*/
ldrr0,=INTSUBMSK
strr1,[r0]
#endif
(2)修改时钟设置(2440的主频为405MHz。
)
#ifdefined(CONFIG_S3C2440)
/*FCLK:
HCLK:
PCLK=1:
4:
8*/
ldrr0,=CLKDIVN
movr1,#5
strr1,[r0]
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]
#else
ldr r0,=CLKDIVN
mov r1,#3
str r1,[r0]
mrcp15,0,r1,c1,c0,0/*readctrlregister*/
orrr1,r1,#0xc0000000/*Asynchronous*/
mcrp15,0,r1,c1,c0,0/*writectrlregister*/
/*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/即可不需要作任何改动:
#include
#define__REGb(x)(*(volatileunsignedchar*)(x))
#define__REGi(x)(*(volatileunsignedint*)(x))
#defineNF_BASE0x4e000000
#ifdefined(CONFIG_S3C2440)
#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)&0xff;
NFADDR=(i>>25)&0xff;
NAND_DETECT_RB;
for(j=0;j>9)&0xff;
NFADDR=(i>>17)&0xff;
NFADDR=(i>>25)&0xff;
wait_idle();
for(j=0;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
#ifdefined(CONFIG_S3C2440)
#defineCONFIG_S3C2440_NAND_BOOT1
/*Offset*/
#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
#endif/*__CONFIG_H*/
5修改board/utu2440/lowlevel_init.S文件
依照开发板的内存区的配置情况,修改board/utu2440/lowlevel_init.S文件,我利用友善之臂提供的vivi源码里的信息做了如下更改:
......
#defineB1_BWSCON (DW16)
#defineB2_BWSCON (DW16)
#defineB3_BWSCON (DW16+WAIT+UBLB)
#defineB4_BWSCON (DW16)
#defineB5_BWSCON (DW16)
#defineB6_BWSCON (DW32)
#defineB7_BWSCON (DW32)
......
#defineB2_Tacs 0x0
#defineB2_Tcos 0x0
#defineB2_Tacc 0x7
#defineB2_Tcoh 0x0
#defineB2_Tah 0x0
#defineB2_Tacp 0x0
#defineB2_PMC 0x0
#endif
……
/*REFRESHparameter*/
#defineREFEN 0x1 /*Refreshenable*/
#defineTREFMD 0x0 /*CBR(CASbeforeRAS)/Autorefresh*/
#defineTrc 0x3 /*7clk*/
#defineTchr 0x2 /*3clk*/
#ifdefined(CONFIG_S3C2440)
#defineTrp 0x2 /*4clk*/
#defineREFCNT 1265
#endif
/**************************************/
_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
#ifdefined(CONFIG_S3C2410)
/*Fout=202.8MHz*/
#defineM_MDIV 0xA1
#defineM_PDIV 0x3
#defineM_SDIV 0x1
#endif
#ifdefined(CONFIG_S3C2440)
/*Fout=405MHz*/
#defineM_MDIV0x7f
#defineM_PDIV0x2
#defineM_SDIV0x1
#endif
#defineUSB_CLOCK1
#ifUSB_CLOCK==0
#defineU_M_MDIV 0xA1
#defineU_M_PDIV 0x3
#defineU_M_SDIV 0x1
#elifUSB_CLOCK==1
#ifdefined(CONFIG_S3C2410)
#defineU_M_MDIV 0x48
#defineU_M_PD
IV 0x3
#endif
#ifdefined(CONFIG_S3C2440)
#defineU_M_MDIV0x38
#defineU_M_PDIV0x2
#endif
#defineU_M_SDIV 0x2
#endif
......
intboard_init(void)
{
......
gpio->GPFDAT=0xaf;//板子初始化完后,亮灯
......
}
7为了实现NANDFlash的读写,再次修改/include/configs/utu2440.h
......
/*
*HighLevelConfigurationOptions
*(easytochange)
*/
#defineCONFIG_ARM920T 1 /*ThisisanARM920TCore */
//#define CONFIG_S3C2410 1 /*inaSAMSUNGS3C2410SoC */ //editedbyyaoyi
//#defineCONFIG_SMDK2410 1 /*onaSAMSUNGSMDK2410Board */ //editedbyyaoyi
#defineCONFIG_utu2440 1
#defineCONFIG_S3C2440 1
.......
#include
#defineCONFIG_CMD_ELF
#defineCONFIG_C