注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

zhouhaigang.love的博客

喜欢冬日黄昏那冻住的山

 
 
 

日志

 
 

2011年02月15日  

2011-02-15 11:00:59|  分类: linux |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
优龙s3c2410 u-boot移植过程
2009-09-20 17:52

一、u-boot-1.1.4yl2410(优龙开发板)上的移植过程

1. 例行准备

3.2.1 修改Makefile

[uboot@localhost uboot]#vi Makefile

#crane2410建立编译项

yl2410_config : unconfig

@./mkconfig $(@:_config=) arm arm920t yl2410 NULL s3c24x0

各项的意思如下:

arm: CPU的架构(ARCH)

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

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

NULL: 开发者/或经销商(vender)

s3c24x0: 片上系统(SOC)

3.2.2 board子目录中建立yl2410

#cp rf board/smdk2410 board/yl2410

#cd board/yl2410

#mv smdk2410.c yl2410.c

3.2.3 include/configs/中建立配置头文件

#cd ../..

#cp include/configs/smdk2410.h include/configs/yl2410.h

3.2.4 指定交叉编译工具的路径

#vi ~/.bashrc

export PATH=/usr/local/arm/2.95.3/bin:$PATH

3.2.5 测试编译能否成功

#make yl2410_config     /*产生include/config.mk*/

#make

1. make的过程中,出现:cc1: invalid option `abi=apcs-gnu'
解决方法:

出错的文件是/cpu/arm920t/下的config.mk:
PLATFORM_CPPFLAGS +=$(call cc-option,-mapcs-32,-mabi=apcs-gnu)
改成:
PLATFORM_CPPFLAGS +=$(call cc-option,-mapcs-32,$(call cc-option,-mabi=apcs-gnu))

2.
修改了第一个错误后,继续make,出现了如下的报错:
make[1]: *** No rule to make target `hello_world.srec', needed by `all'. Stop.
make[1]: Leaving directory `/home/mort/src/targa/u-boot/u-boot-TOT/examples'
make: *** [examples] Error 2
解决方法:
修改目录 examples下的Makefile来解决。
将原文件的第58行开始的内容:
SREC = hello_world.srec
BIN     = hello_world.bin hello_world
改为:
SREC = hello_world.o
BIN     = hello_world.o hello_world

继续make

3.
出现
yl2410.a needed by smdk2410.o
解决方法:

修改board/yl2410/Makefile
28行的

OBJS    := smdk2410.o flash.o
改为

OBJS    := yl2410.o flash.o
继续make获得u-boot

4. 初步调试,主要是在sdram上调试要打开CONFIG_SKIP_LOWLEVEL_INIT

即可看到打印信息

5. 读写NorFlashSST39VF1601

include/configs/yl2410.h添加

#ifdef CONFIG_SST_39VF1601

#define PHYS_FLASH_SIZE        0x00200000 /* 2MB */

#define CFG_MAX_FLASH_SECT      (35) /* max number of sectors on one chip */

#define CFG_ENV_ADDR           (CFG_FLASH_BASE + 0x1F0000) /* addr of environment */

#endif

修改board/yl2410/flash.c 参考board/dave/common/flash.c

#elif defined(CONFIG_SST_39VF1601)

                     (SST_MANUFACT & FLASH_VENDMASK) |

                     (SST_ID_xF1601 & FLASH_TYPEMASK);

int flash_erase (flash_info_t * info, int s_first, int s_last)

#if defined(CONFIG_SST_39VF1601) /* Ali + */

                     *addr = CMD_ERASE_BLOCK;

#else

                     *addr = CMD_ERASE_CONFIRM;

#endif

volatile static int write_hword (flash_info_t * info, ulong dest, ushort data)

#if defined(CONFIG_SST_39VF1601) /* Ali + */

       MEM_FLASH_ADDR1 = CMD_PROGRAM;

#else

       MEM_FLASH_ADDR1 = CMD_UNLOCK_BYPASS;

       *addr = CMD_PROGRAM;

#endif

即可正确操作flash,其中monitor_flash_len(_bss_start - _armboot_start)和环境参数保存区是受保护的,标示为(RO)

6. norflash启动

打开选项CONFIG_S3C2410_NOR_BOOT

编译生成u-boot.bin

Loadb 0x32000000 115200 (set baud rate to 115200,download u-boot to 0x32000000 by Kermit protocol)

Cp.b 0x32000000 0 0x20000 (u-boot write to norflash)

重启,OK

7. 如要看到调试信息

include/configs/yl2410.h添加

#define DEBUG

8. ping命令时,输出“*** ERROR: `ethaddr' not set”,板上网卡CS8900本身没有固化MAC地址,自己在include/configs/yl2410.h设定一个,或者运行时设定环境参数,接下来使用pingtftp都正常

9. 支持nandflash读写

include/configs/yl2410.h添加CFG_CMD_NAND

编译,在cmd_nand.c产生很多错误,原因是yl2410根本就没有nandflash的驱动支持,如:

NAND_DISABLE_CE()

NAND_ENABLE_CE()

NAND_WAIT_READY()

WRITE_NAND_COMMAND()

WRITE_NAND_COMMANDW()

WRITE_NAND_ADDRESS()

WRITE_NAND()

这些函数的实现都很简单,参考at91rm9200dk.h,对nand的驱动支持全部添加在include/configs/yl2410.h

加载运行,nand write 0x32000000 0x20000 0x200 (nand flash512字节),报错,nand_write_page : Failed write verify 应该是sector(page)没擦除,nand erase 0x20000 0x200,出错,提示边界没对齐,查得资料获知,erase单位是一个block(16k)program单位是一个sector(512B),按要求先擦除后写入,正确

10. 支持nandflash启动

cpu/arm920t/start.S添加对nandflash重定位的支持,在board/yl2410/nand_boot.c添加对nandflash的初始化和读取操作,在nandflash启动时被start.s调用,注意nand_boot.c的所有代码以及被调用的代码不能超出4k,因为按nandflash启动模式,开始只有4k的运行空间。

编译获得u-boot.bin

Tftp 0x32000000 u-boot.bin (load u-boot.bin to 0x32000000)

Nand erase 0 0x20000 (erase nandflash first 128k)

Nand write 0x32000000 0 0x20000 (write u-boot.bin to nandflash)

设置跳线到nandflash启动模式,重启即可

  评论这张
 
阅读(79)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017