ImageVerifierCode 换一换
格式:DOCX , 页数:14 ,大小:26.08KB ,
资源ID:10553576      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/10553576.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(移植UBoot120到博创2410S.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

移植UBoot120到博创2410S.docx

1、移植UBoot120到博创2410S移植UBoot.1.2.0到博创2410S (转自)移植UBoot.1.2.0到博创2410S(S3C2410A)一、在U-Boot中建立自己的开发板类型,并测试编译。我为开发板取名叫: tekkaman24100 在工作目录下解压UBoot。$tar zxvf u-boot.git.tar.gz1 进入U-Boot目录,修改Makefile$cd u-boot.git/$vi Makefile#为tekkaman2410建立编译项smdk2410_config : unconfig $(MKCONFIG) $(:_config=) arm arm920t

2、smdk2410 NULL s3c24x0tekkaman2410_config : unconfig $(MKCONFIG) $(:_config=) arm arm920t tekkaman2410 tekkaman s3c24x0各项的意思如下:arm: CPU的架构(ARCH)arm920t: CPU的类型(CPU),其对应于cpu/arm920t子目录。tekkaman2410: 开发板的型号(BOARD),对应于board/tekkaman/tekkaman2410目录。tekkaman: 开发者/或经销商(vender)。s3c24x0: 片上系统(SOC)。同时在“ifndef

3、 CROSS_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)中填了 tek

4、kaman ,所以开发板tekkaman2410目录一定要建在/board子目录中的tekkaman目录下 ,否则编译会出错。$cd board$mkdir tekkaman tekkaman/tekkaman2410$cp -arf smdk2410/* tekkaman/tekkaman2410/$cd tekkaman/tekkaman2410$mv smdk2410.c tekkaman2410.c还要记得修改自己的开发板tekkaman2410目录下的Makefile文件,不然编译时会出错:COBJS := tekkaman2410.o flash.o$vi Makefile3 在i

5、nclude/configs/中建立配置头文件$cd ././.$cp include/configs/smdk2410.h include/configs/tekkaman2410.h4 测试编译能否成功$make tekkaman2410_configConfiguring for tekkaman2410 board.(如果出现:$ make tekkaman2410_configMakefile:1927: * 遗漏分隔符 。 停止。请在Uboot的根目录下的Makefile的$(MKCONFIG) $(:_config=) arm arm920t tekkaman2410 tekka

6、man)前加上“Tab”键)$make我到这一步测试交叉编译成功!二、修改UBoot中的文件,以匹配博创的2410S实验箱。1 修改/cpu/arm920t/start.S(1)修改中断禁止部分# if defined(CONFIG_S3C2410) ldr r1, =0x7ff /根据2410芯片手册,INTSUBMSK有11位可用,/vivi也是0x7ff,不知为什么UBoot一直没改过来。 ldr r0, =INTSUBMSK str r1, r0# endif(2)修改时钟设置(可以不修改,因为后面的board_init函数也会将时钟设为202.8MHz)/* FCLK:HCLK:PC

7、LK = 1:2:4 */* default FCLK is 120 MHz ! */ldr r0, =CLKDIVN mov r1, #3 str r1, r0mrc p15, 0, r1, c1, c0, 0 /*read ctrl register tekkaman*/ orr r1, r1, #0xc0000000 /*Asynchronous tekkaman*/ mcr p15, 0, r1, c1, c0, 0 /*write ctrl register tekkaman*/ /*now, CPU clock is 202.8 Mhz tekkaman*/ mov r1, #CL

8、K_CTL_BASE /* tekkaman*/ mov r2, #MDIV_200 /* mpll_200mhz tekkaman*/ add r2, r2, #PSDIV_200 /* mpll_200mhz tekkaman*/ str r2, r1, #0x04 /* MPLLCON tekkaman */#endif /* CONFIG_S3C2400 | CONFIG_S3C2410 */红色部分是我添加的,因为 UBoot 使用的是 /* default FCLK is 120 MHz ! */我利用博创提供的vivi的代码,将其设为202.8MHz 并在前面加上:#elif d

9、efined(CONFIG_S3C2410)# define pWTCON 0x53000000# define INTMSK 0x4A000008 /* Interupt-Controller base addresses */# define INTSUBMSK 0x4A00001C# define CLKDIVN 0x4C000014 /* clock divisor register */#define CLK_CTL_BASE 0x4C000000 /* tekkaman */#define MDIV_200 0xa1 #define PSDIV_200 0x31 /* tekkam

10、an */(3)将从Flash启动改成从NAND Flash启动。将以下UBoot的重定向语句段:#ifndef CONFIG_SKIP_RELOCATE_UBOOTrelocate: /* relocate U-Boot to RAM */adr r0, _start /* r0 #ifdef CONFIG_S3C2410_NAND_BOOT tekkamanSSSSSSSSSSSSS reset NAND mov r1, #NAND_CTL_BASE ldr r2, =0xf830 initial value str r2, r1, #oNFCONF ldr r2, r1, #oNFCON

11、F bic r2, r2, #0x800 enable chip str r2, r1, #oNFCONF mov r2, #0xff RESET command strb r2, r1, #oNFCMD mov r3, #0 waitnand1: add r3, r3, #0x1 cmp r3, #0xa blt nand1nand2: ldr r2, r1, #oNFSTAT wait ready tst r2, #0x1 beq nand2 ldr r2, r1, #oNFCONF orr r2, r2, #0x800 disable chip str r2, r1, #oNFCONF

12、get read to call C functions (for nand_read() ldr sp, DW_STACK_START setup stack pointer mov fp, #0 no previous frame, so fp=0 copy U-Boot to RAM ldr r0, =TEXT_BASE mov r1, #0x0 mov r2, #0x20000 bl nand_read_ll tst r0, #0x0 beq ok_nand_readbad_nand_read:loop2: b loop2 infinite loopok_nand_read: veri

13、fy mov r0, #0 ldr r1, =TEXT_BASE mov r2, #0x400 4 bytes * 1024 = 4K-bytesgo_next: ldr r3, r0, #4 ldr r4, r1, #4 teq r3, r4 bne notmatch subs r2, r2, #4 beq stack_setup bne go_nextnotmatch:loop3: b loop3 infinite loop#endif CONFIG_S3C2410_NAND_BOOT tekkamanEEEEEEEEE在 “ _start_armboot: .word start_arm

14、boot ” 后加入:.align 2DW_STACK_START: .word STACK_BASE+STACK_SIZE-4附:顺便提一下,在start.S文件的注释部分有个小错误(红色部分:原来是2):cpu_init_crit:./* disable MMU stuff and caches*/mrc p15, 0, r0, c1, c0, 0bic r0, r0, #0x00002300 clear bits 13, 9:8 (-V- -RS)bic r0, r0, #0x00000087 clear bits 7, 2:0 (B- -CAM)orr r0, r0, #0x00000

15、002 set bit 1 (A) Align.2 在board/tekkaman/tekkaman2410加入NAND Flash读函数,建立nand_read.c文件,加入如下内容(copy from vivi):#include #define _REGb(x) (*(volatile unsigned char *)(x)#define _REGi(x) (*(volatile unsigned int *)(x)#define NF_BASE 0x4e000000#define NFCONF _REGi(NF_BASE + 0x0)#define NFCMD _REGb(NF_BAS

16、E + 0x4)#define NFADDR _REGb(NF_BASE + 0x8)#define NFDATA _REGb(NF_BASE + 0xc)#define NFSTAT _REGb(NF_BASE + 0x10)#define BUSY 1inline void wait_idle(void) int i;while(!(NFSTAT & BUSY)for(i=0; i/* low level nand read function */intnand_read_ll(unsigned char *buf, unsigned long start_addr, int size)i

17、nt i, j;if (start_addr & NAND_BLOCK_MASK) | (size & NAND_BLOCK_MASK) return -1; /* invalid alignment */* chip Enable */NFCONF &= 0x800;for(i=0; ifor(i=start_addr; i /* Write Address */NFADDR = i & 0xff;NFADDR = (i 9) & 0xff;NFADDR = (i 17) & 0xff;NFADDR = (i 25) & 0xff;wait_idle();for(j=0; j /* chip

18、 Disable */NFCONF |= 0x800; /* chip disable */return 0;3 修改board/tekkaman/tekkaman2410/Makefile文件.OBJS := tekkaman2410.o nand_read.o .4 修改include/configs/tekkaman2410.h文件,添加如下内容:./* Nandflash Boot*/#define CONFIG_S3C2410_NAND_BOOT 1#define STACK_BASE 0x33f00000#define STACK_SIZE 0x8000/#define UBOOT

19、_RAM_BASE 0x33f80000/* NAND Flash Controller */#define NAND_CTL_BASE 0x4E000000#define bINT_CTL(Nb) _REG(INT_CTL_BASE + (Nb)/* Offset */#define oNFCONF 0x00#define oNFCMD 0x04#define oNFADDR 0x08#define oNFDATA 0x0c#define oNFSTAT 0x10#define oNFECC 0x14#endif /* _CONFIG_H */5 修改board/tekkaman/tekka

20、man2410/lowlevel_init.S文件依照开发箱的内存区的配置情况, 修改board/tekkaman/tekkaman2410/lowlevel_init.S文件,我利用博创提供的vivi源码里的信息做了如下更改:.#define B1_BWSCON (DW16) /*tekkaman*/#define B2_BWSCON (DW16)#define B3_BWSCON (DW16) /*tekkaman*/#define B4_BWSCON (DW16)#define B5_BWSCON (DW16)#define B6_BWSCON (DW32)#define B7_BWSC

21、ON (DW32).#define B3_Tacs 0x0 /* 0clk */#define B3_Tcos 0x0 /* 0clk tekkaman*/ #define B3_Tacc 0x7 /* 14clk */#define B3_Tcoh 0x0 /* 0clk tekkaman*/ #define B3_Tah 0x0 /* 0clk */#define B3_Tacp 0x0 /*tekkaman*/#define B3_PMC 0x0 /* normal */.注:之所以Bank3的改动较大,是因为smdk2410的网卡CS8900是在Bank3,而博创2410S的AX887

22、96是在Bank2。. .word (B7_MT.word (REFEN .word 0xb2 /*tekkaman*/ .word 0x30 .word 0x306 修改/board/tekkaman/tekkaman2410/tekkaman2410.c因为博创2410S和smdk2410的GPIO连接有所不同,我依旧利用博创配的vivi,修改其对GPIO的配置(具体原因我并未深究,请参阅博创2410S的硬件说明和2410芯片手册):.gpio-GPEUP = 0x0000FFFF;gpio-GPFCON = 0x000051aa; /0x000055AA; tekkaman gpio-G

23、PFUP = 0x000000ef; /0x000000FF; tekkaman gpio-GPGCON = 0xfd95ffba; /0xFF95FFBA; tekkaman gpio-GPGUP = 0x0000efff; /0x0000FFFF; tekkaman gpio-GPHCON = 0x0016faaa; /0x002AFAAA; tekkamangpio-GPHUP = 0x000007FF;.7 为了实现NAND Flash的读写,再次修改/include/configs/tekkaman2410.h(请格外注意:如果编译时报错,在Linux下用KWrite等有高亮显示的文

24、本编辑器看看文件的注释是不是为注释应有的颜色(KWrite中为灰色),如果不是,则将注释删除。因为#define后面的注释被认为是程序的一部分。建议注释和#define分行写)./* Hardware drivers*/#define CONFIG_DRIVER_CS8900 1 /* we have a CS8900 on-board */#define CS8900_BASE 0x19000300/#define CS8900_BUS16 1 /* the Linux driver does accesses as shorts */#define CONFIG_DRIVER_NE2000

25、#define CONFIG_DRIVER_NE2000_BASE (0x10000000+0x200)./* * Command definition */#define CONFIG_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)/*

26、this must be included AFTER the definition of CONFIG_COMMANDS (if any) */#include #define CONFIG_CMDLINE_TAG/增加U-Boot对内核参数传递的功能, /具体内容请参阅对U-BOOT下使用bootm引导内核方法的补充说明.#define CFG_LONGHELP /* undef to save memory */#define CFG_PROMPT Tekkaman2410# /*Monitor Command Prompt */#define CFG_CBSIZE 256 /* Con

27、sole I/O Buffer Size */.#define CFG_LOAD_ADDR 0x30008000 /* default load address */./#define PHYS_FLASH_1 0x00000000 /* Flash Bank #1 */#define CFG_FLASH_BASE PHYS_FLASH_1/*-* FLASH and environment organization*/#define CFG_NO_FLASH 1#if 0#define CONFIG_AMD_LV400 1 /* uncomment this if you have a LV

28、400 flash */#if 0#define CONFIG_AMD_LV800 1 /* uncomment this if you have a LV800 flash */#endif/#define CFG_MAX_FLASH_BANKS 1 /* max number of memory banks */./* timeout values are in ticks */#define CFG_FLASH_ERASE_TOUT (5*CFG_HZ) /* Timeout for Flash Erase */#define CFG_FLASH_WRITE_TOUT (5*CFG_HZ

29、) /* Timeout for Flash Write */#define CFG_ENV_IS_IN_NAND 1#define CFG_ENV_OFFSET 0X20000/#define ENV_IS_EMBEDDED 1#define CFG_NAND_LEGACY#define CFG_ENV_SIZE 0x10000 /* Total Size of Environment Sector */#if (CONFIG_COMMANDS & CFG_CMD_NAND)#define CFG_NAND_BASE 0x4E000000 /* NandFlash控制器在SFR区起始寄存器地址 */#define CFG_MAX_NAND_DEVICE 1/* 支持的最在Nand Flash数据 */#define SECTORSIZE 512 /* 1页的大小 */#define NAND_SECTOR_SIZE SECTORSIZE#define NAND_BLOCK_MASK 511/* 页掩码 */#define ADDR_COLUMN 1 /* 一个字节的Column地址 */

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

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