移植UBoot120到博创2410S.docx

上传人:b****7 文档编号:10553576 上传时间:2023-02-21 格式:DOCX 页数:14 大小:26.08KB
下载 相关 举报
移植UBoot120到博创2410S.docx_第1页
第1页 / 共14页
移植UBoot120到博创2410S.docx_第2页
第2页 / 共14页
移植UBoot120到博创2410S.docx_第3页
第3页 / 共14页
移植UBoot120到博创2410S.docx_第4页
第4页 / 共14页
移植UBoot120到博创2410S.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

移植UBoot120到博创2410S.docx

《移植UBoot120到博创2410S.docx》由会员分享,可在线阅读,更多相关《移植UBoot120到博创2410S.docx(14页珍藏版)》请在冰豆网上搜索。

移植UBoot120到博创2410S.docx

移植UBoot120到博创2410S

移植U-Boot.1.2.0到博创2410-S(转自)

移植U-Boot.1.2.0到博创2410-S(S3C2410A)

一、在U-Boot中建立自己的开发板类型,并测试编译。

我为开发板取名叫:

tekkaman2410

0在工作目录下解压U-Boot。

$tarzxvfu-boot.git.tar.gz

1进入U-Boot目录,修改Makefile

$cdu-boot.git/

$viMakefile

#为tekkaman2410建立编译项

smdk2410_config:

unconfig@$(MKCONFIG)$(@:

_config=)armarm920tsmdk2410NULLs3c24x0

tekkaman2410_config:

unconfig@$(MKCONFIG)$(@:

_config=)armarm920ttekkaman2410tekkamans3c24x0

各项的意思如下:

arm:

CPU的架构(ARCH)

arm920t:

CPU的类型(CPU),其对应于cpu/arm920t子目录。

tekkaman2410:

开发板的型号(BOARD),对应于board/tekkaman/tekkaman2410目录。

tekkaman:

开发者/或经销商(vender)。

s3c24x0:

片上系统(SOC)。

同时在“ifndefCROSS_COMPILE”之前加上自己交叉编译器的路径,比如我使用crosstool-0.43制作的基于2.6.22.2内核和gcc-4.1.0-glibc-2.3.2的ARM9TDMI交叉编译器,则:

CROSS_COMPILE=/home/tekkaman/working/crosstool-gcc410-k26222/gcc-4.1.0-glibc-2.3.2/arm-9tdmi-linux-gnu/bin/arm-9tdmi-linux-gnu-

2在/board子目录中建立自己的开发板tekkaman2410目录

由于我在上一步板子的开发者/或经销商(vender)中填了tekkaman,所以开发板tekkaman2410目录一定要建在/board子目录中的tekkaman目录下,否则编译会出错。

$cdboard

$mkdirtekkamantekkaman/tekkaman2410$cp-arfsmdk2410/*tekkaman/tekkaman2410/$cdtekkaman/tekkaman2410$mvsmdk2410.ctekkaman2410.c

还要记得修改自己的开发板tekkaman2410目录下的Makefile文件,不然编译时会出错:

COBJS:

=tekkaman2410.oflash.o

$viMakefile

3在include/configs/中建立配置头文件

$cd../../..$cpinclude/configs/smdk2410.hinclude/configs/tekkaman2410.h

4测试编译能否成功

$maketekkaman2410_config

Configuringfortekkaman2410board...

(如果出现:

$maketekkaman2410_configMakefile:

1927:

***遗漏分隔符。

停止。

请在U-boot的根目录下的Makefile的

@$(MKCONFIG)$(@:

_config=)armarm920ttekkaman2410tekkaman)

前加上“Tab”键)

$make

我到这一步测试交叉编译成功!

二、修改U-Boot中的文件,以匹配博创的2410-S实验箱。

1修改/cpu/arm920t/start.S

(1)修改中断禁止部分

#ifdefined(CONFIG_S3C2410)ldrr1,=0x7ff//根据2410芯片手册,INTSUBMSK有11位可用,

//vivi也是0x7ff,不知为什么U-Boot一直没改过来。

ldrr0,=INTSUBMSKstrr1,[r0]#endif

(2)修改时钟设置(可以不修改,因为后面的board_init函数也会将时钟设为202.8MHz)

/*FCLK:

HCLK:

PCLK=1:

2:

4*/

/*defaultFCLKis120MHz!

*/

ldrr0,=CLKDIVNmovr1,#3strr1,[r0]

mrcp15,0,r1,c1,c0,0/*readctrlregistertekkaman*/orrr1,r1,#0xc0000000/*Asynchronoustekkaman*/mcrp15,0,r1,c1,c0,0/*writectrlregistertekkaman*//*now,CPUclockis202.8Mhztekkaman*/movr1,#CLK_CTL_BASE/*tekkaman*/movr2,#MDIV_200/*mpll_200mhztekkaman*/addr2,r2,#PSDIV_200/*mpll_200mhztekkaman*/strr2,[r1,#0x04]/*MPLLCONtekkaman*/#endif/*CONFIG_S3C2400||CONFIG_S3C2410*/

红色部分是我添加的,因为U-Boot使用的是/*defaultFCLKis120MHz!

*/

我利用博创提供的vivi的代码,将其设为202.8MHz并在前面加上:

#elifdefined(CONFIG_S3C2410)

#definepWTCON0x53000000

#defineINTMSK0x4A000008/*Interupt-Controllerbaseaddresses*/

#defineINTSUBMSK0x4A00001C

#defineCLKDIVN0x4C000014/*clockdivisorregister*/

#defineCLK_CTL_BASE0x4C000000/*tekkaman*/

#defineMDIV_2000xa1#definePSDIV_2000x31/*tekkaman*/

(3)将从Flash启动改成从NANDFlash启动。

将以下U-Boot的重定向语句段:

#ifndefCONFIG_SKIP_RELOCATE_UBOOT

relocate:

/*relocateU-BoottoRAM*/

adrr0,_start/*r0#ifdefCONFIG_S3C2410_NAND_BOOT@tekkaman@@@@@@@@@@@@@@@@SSSSSSSSSSSSS@resetNANDmovr1,#NAND_CTL_BASEldrr2,=0xf830@initialvaluestrr2,[r1,#oNFCONF]ldrr2,[r1,#oNFCONF]bicr2,r2,#0x800@enablechipstrr2,[r1,#oNFCONF]movr2,#0xff@RESETcommandstrbr2,[r1,#oNFCMD]movr3,#0@waitnand1:

addr3,r3,#0x1cmpr3,#0xabltnand1nand2:

ldrr2,[r1,#oNFSTAT]@waitreadytstr2,#0x1beqnand2ldrr2,[r1,#oNFCONF]orrr2,r2,#0x800@disablechipstrr2,[r1,#oNFCONF]@getreadtocallCfunctions(fornand_read())ldrsp,DW_STACK_START@setupstackpointermovfp,#0@nopreviousframe,sofp=0@copyU-BoottoRAMldrr0,=TEXT_BASEmovr1,#0x0movr2,#0x20000blnand_read_lltstr0,#0x0beqok_nand_readbad_nand_read:

loop2:

bloop2@infiniteloopok_nand_read:

@verifymovr0,#0ldrr1,=TEXT_BASEmovr2,#0x400@4bytes*1024=4K-bytesgo_next:

ldrr3,[r0],#4ldrr4,[r1],#4teqr3,r4bnenotmatchsubsr2,r2,#4beqstack_setupbnego_nextnotmatch:

loop3:

bloop3@infiniteloop#endif@CONFIG_S3C2410_NAND_BOOT@tekkaman@@@@@@@@@@@@@@@@@@EEEEEEEEE

在“_start_armboot:

.wordstart_armboot”后加入:

.align2

DW_STACK_START:

.wordSTACK_BASE+STACK_SIZE-4

附:

顺便提一下,在start.S文件的注释部分有个小错误(红色部分:

原来是2):

cpu_init_crit:

......

/*

*disableMMUstuffandcaches

*/

mrcp15,0,r0,c1,c0,0

bicr0,r0,#0x00002300@clearbits13,9:

8(--V---RS)

bicr0,r0,#0x00000087@clearbits7,2:

0(B----CAM)

orrr0,r0,#0x00000002@setbit1(A)Align

......

2在board/tekkaman/tekkaman2410加入NANDFlash读函数,建立nand_read.c文件,加入如下内容(copyfromvivi):

#include

#define__REGb(x)(*(volatileunsignedchar*)(x))

#define__REGi(x)(*(volatileunsignedint*)(x))

#defineNF_BASE0x4e000000

#defineNFCONF__REGi(NF_BASE+0x0)

#defineNFCMD__REGb(NF_BASE+0x4)

#defineNFADDR__REGb(NF_BASE+0x8)

#defineNFDATA__REGb(NF_BASE+0xc)

#defineNFSTAT__REGb(NF_BASE+0x10)

#defineBUSY1

inlinevoidwait_idle(void){

inti;

while(!

(NFSTAT&BUSY))

for(i=0;i

/*lowlevelnandreadfunction*/

int

nand_read_ll(unsignedchar*buf,unsignedlongstart_addr,intsize)

{

inti,j;

if((start_addr&NAND_BLOCK_MASK)||(size&NAND_BLOCK_MASK)){

return-1;/*invalidalignment*/

}

/*chipEnable*/

NFCONF&=~0x800;

for(i=0;i

for(i=start_addr;i

/*WriteAddress*/

NFADDR=i&0xff;

NFADDR=(i>>9)&0xff;

NFADDR=(i>>17)&0xff;

NFADDR=(i>>25)&0xff;

wait_idle();

for(j=0;j

/*chipDisable*/

NFCONF|=0x800;/*chipdisable*/

return0;

}

3修改board/tekkaman/tekkaman2410/Makefile文件

......

OBJS:

=tekkaman2410.onand_read.o......

4修改include/configs/tekkaman2410.h文件,添加如下内容:

......

/*

*NandflashBoot

*/

#defineCONFIG_S3C2410_NAND_BOOT1

#defineSTACK_BASE0x33f00000

#defineSTACK_SIZE0x8000

//#defineUBOOT_RAM_BASE0x33f80000

/*NANDFlashController*/

#defineNAND_CTL_BASE0x4E000000

#definebINT_CTL(Nb)__REG(INT_CTL_BASE+(Nb))

/*Offset*/

#defineoNFCONF0x00

#defineoNFCMD0x04

#defineoNFADDR0x08

#defineoNFDATA0x0c

#defineoNFSTAT0x10

#defineoNFECC0x14

#endif/*__CONFIG_H*/

5修改board/tekkaman/tekkaman2410/lowlevel_init.S文件

依照开发箱的内存区的配置情况,修改board/tekkaman/tekkaman2410/lowlevel_init.S文件,我利用博创提供的vivi源码里的信息做了如下更改:

......

#defineB1_BWSCON(DW16)/*@tekkaman*/

#defineB2_BWSCON(DW16)

#defineB3_BWSCON(DW16)/*@tekkaman*/

#defineB4_BWSCON(DW16)

#defineB5_BWSCON(DW16)

#defineB6_BWSCON(DW32)

#defineB7_BWSCON(DW32)

......

#defineB3_Tacs0x0/*0clk*/#defineB3_Tcos0x0/*0clk@tekkaman*/#defineB3_Tacc0x7/*14clk*/#defineB3_Tcoh0x0/*0clk@tekkaman*/#defineB3_Tah0x0/*0clk*/#defineB3_Tacp0x0/*@tekkaman*/#defineB3_PMC0x0/*normal*/

......

注:

之所以Bank3的改动较大,是因为smdk2410的网卡CS8900是在Bank3,而博创2410-S的AX88796是在Bank2。

.......word((B7_MT.word((REFEN.word0xb2/*@tekkaman*/.word0x30.word0x30

6修改/board/tekkaman/tekkaman2410/tekkaman2410.c

因为博创2410-S和smdk2410的GPIO连接有所不同,我依旧利用博创配的vivi,修改其对GPIO的配置(具体原因我并未深究,请参阅博创2410-S的硬件说明和2410芯片手册):

......

gpio->GPEUP=0x0000FFFF;

gpio->GPFCON=0x000051aa;//0x000055AA;tekkamangpio->GPFUP=0x000000ef;//0x000000FF;tekkamangpio->GPGCON=0xfd95ffba;//0xFF95FFBA;tekkamangpio->GPGUP=0x0000efff;//0x0000FFFF;tekkamangpio->GPHCON=0x0016faaa;//0x002AFAAA;tekkaman

gpio->GPHUP=0x000007FF;

......

7为了实现NANDFlash的读写,再次修改

/include/configs/tekkaman2410.h

(请格外注意:

如果编译时报错,在Linux下用KWrite等有高亮显示的文本编辑器看看文件的注释是不是为注释应有的颜色(KWrite中为灰色),如果不是,则将注释删除。

因为#define后面的注释被认为是程序的一部分。

建议注释和#define分行写)

......

/*

*Hardwaredrivers

*/

//#defineCONFIG_DRIVER_CS89001/*wehaveaCS8900on-board*///#defineCS8900_BASE0x19000300//#defineCS8900_BUS161/*theLinuxdriverdoesaccessesasshorts*/

#defineCONFIG_DRIVER_NE2000#defineCONFIG_DRIVER_NE2000_BASE(0x10000000+0x200)

......

/************************************************************Commanddefinition***********************************************************/#defineCONFIG_COMMANDS\(CONFIG_CMD_DFL|\CFG_CMD_CACHE|\CFG_CMD_NAND|\

CFG_CMD_NET|\/*CFG_CMD_EEPROM|*/\/*CFG_CMD_I2C|*/\/*CFG_CMD_USB|*/\

CFG_CMD_PING|\

CFG_CMD_ENV|\CFG_CMD_REGINFO|\CFG_CMD_DATE|\CFG_CMD_ELF)/*thismustbeincludedAFTERthedefinitionofCONFIG_COMMANDS(ifany)*/

#include

#defineCONFIG_CMDLINE_TAG

//增加U-Boot对内核参数传递的功能,

//具体内容请参阅

对《U-BOOT下使用bootm引导内核方法》的补充说明

......

#defineCFG_LONGHELP

/*undeftosavememory*/

#defineCFG_PROMPT"[Tekkaman2410]#"

/*MonitorCommandPrompt*/

#defineCFG_CBSIZE256

/*ConsoleI/OBufferSize*/

......

#defineCFG_LOAD_ADDR0x30008000

/*defaultloadaddress*/

......

//#definePHYS_FLASH_10x00000000/*FlashBank#1*/

//#defineCFG_FLASH_BASEPHYS_FLASH_1

/*-----------------------------------------------------------------------

*FLASHandenvironmentorganization

*/

#defineCFG_NO_FLASH1

#if0

#defineCONFIG_AMD_LV4001/*uncommentthisifyouhaveaLV400flash*/

//#if0

#defineCONFIG_AMD_LV8001/*uncommentthisifyouhaveaLV800flash*/

#endif

//#defineCFG_MAX_FLASH_BANKS1/*maxnumberofmemorybanks*/

......

/*timeoutvaluesareinticks*/

//#defineCFG_FLASH_ERASE_TOUT(5*CFG_HZ)

/*TimeoutforFlashErase*/

//#defineCFG_FLASH_WRITE_TOUT(5*CFG_HZ)

/*TimeoutforFlashWrite*/

#defineCFG_ENV_IS_IN_NAND1

#defineCFG_ENV_OFFSET0X20000

//#defineENV_IS_EMBEDDED1

#defineCFG_NAND_LEGACY

#defineCFG_ENV_SIZE0x10000

/*TotalSizeofEnvironmentSector*/

#if(CONFIG_COMMANDS&CFG_CMD_NAND)#defineCFG_NAND_BASE0x4E000000/*NandFlash控制器在SFR区起始寄存器地址*/

#defineCFG_MAX_NAND_DEVICE1

/*支持的最在NandFlash数据*/#defineSECTORSIZE512

/*1页的大小*/#defineNAND_SECTOR_SIZESECTORSIZE#defineNAND_BLOCK_MASK511

/*页掩码*/#defineADDR_COLUMN1

/*一个字节的Column地址*/

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1