Chinaunix首页 | 论坛 | 博客
  • 博客访问: 30700
  • 博文数量: 6
  • 博客积分: 28
  • 博客等级: 民兵
  • 技术积分: 40
  • 用 户 组: 普通用户
  • 注册时间: 2012-04-20 15:05
文章分类
文章存档

2012年(6)

我的朋友

分类:

2012-06-20 16:02:43

移植U-Boot-2010.03到友善之臂mini2440

 

开发环境                                 VMware 7.0 + Redhat En5.4

开发板                                      mini2440

核心                                          S3C2440

NAND Flash(K9F2G08)            256 MB

 NOR Flash(SST-39VF1601)         2MB

SDRAM(HY57V561620FTP)        2 *32M

网卡芯片                                   DM9000a46   

 

注意:

Uboot2010.03相对于uboot2009.11uboot2009.08还是有一些改动的地方,主要有:

1Move  s3c24x0  header files  to  include/ asm-arm /arch-s3c24x0/  from include/

 主要涉及的文件是s3c24x0.h   s3c2400.h  s3c2410.h

(2) 添加了s3c24x0_cpu.h 文件,是后面的添加对2440支持的工作量相对于uboot2009.11uboot2009.08减少很多

3)在s3c24x0.h中对nand flash的控制寄存器的定义格式有一些变化

 

其他的移植过程和前面的uboot2009.08差不多,不过参考Tekkaman Ninja改写了Nand_read.c函数,和uboot2009.08的不一样

本文主要参考一些高手,主要是Tekkaman Ninja flyslightly的移植文章,我在声明中已经提到,移植U-Boot-2009.08到友善之臂mini2440 声明

再次感谢Tekkaman Ninja flyslightly

 

 

 

移植U-Boot.2010.03到友善之臂mini2440(一)

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

   U-Boot中建立自己的开发板文件(以友善之臂的sbc2410x为基础)。开发板取名《mini2440》。

(1) 在工作目录/opt下解压UBoot-2010.03

[root@localhost opt]$ tar -xjvf  u-boot-2010.03.tar.bz2

 

(2) 进入U-Boot-2010.03的根目录,修改Makefile,使用vigedit编辑器

[root@localhost opt] #  cd   u-boot-2010.03

[root@localhost u-boot-2010.03] #  vi   Makefile

 

u-boot-2010.03的根目录下面的Makefile中为mini2440建立编译项,以sbc2410x为模板例子。

3035的后面加上对mini2440板子的支持!

sbc2410x_config: unconfig

    @$(MKCONFIG) $(@:_config=) arm arm920t sbc2410x NULL s3c24x0

mini2440_config : unconfig

@$(MKCONFIG) $(@:_config=) arm arm920t mini2440 NULL s3c24x0  //前面一定要用tab开头

各项的意思如下:

arm: CPU的架构(ARCH)

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

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

NULL: 开发者/或经销商(vender),NULL为没有。

s3c24x0: 片上系统(SOC)

注意下面要与自己的开发系统一致,一般是默认arm-linux-

CROSS_COMPILE=arm-linux-

 

特别注意:

u-boot1.3.3及以上版本Makefile有一定的变化,使得对于24x0处理器从nand启动的遇到问题。也就是网上有人说的:无法运行过lowlevel_init。其实这个问题是由于编译器将我们自己添加的用于nandboot的子函数nand_read_ll放到了4K之后造成的(到这不理解的话,请仔细看看24x0处理器nandboot原理)。运行失败后,利用mini24404LED调试发现u-boot根本没有完成自我拷贝,然后看uboot根目录下的System.map文件可知道原因。解决办法其实很简单,将下面这个语句:在uboot根目录下的Makefile中。291

__LIBS := $(subst $(obj),,$(LIBS)) $(subst $(obj),,$(LIBBOARD))

改为: __LIBS := $(subst $(obj),,$(LIBBOARD)) $(subst $(obj),,$(LIBS))

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

由于在上一步板子的开发者/或经销商(vender)中填了 NULL ,所以开发板mini2440目录一定要建在/board目录下 目录结构为board/mini2440。如果开发者/经销商(vender)不为NULL,则目录结构为board/verder_name/mini2440,否则编译会出错。

[root@localhost u-boot-2010.03]$  cd   board

[root@localhost board]$    mkdir  mini2440

[root@localhost board]$  cp  -arf sbc2410x/*   mini2440/

[root@localhost board]$  cd  mini2440/

[root@localhost mini2440]$  mv  sbc2410x.c   mini2440.c

 

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

[root@localhost mini2440]$  vi  Makefile

修改Makefile的依赖文件

COBJS   := sbc2410x.o  flash.o

COBJS    := mini2440.o  flash.o

(如果只想支持Nandflash的话,可以将依靠文件flash.c flash.o删除。)

 

3 include/configs/中建立开发板的配置头文件

[root@localhost mini2440]$ cd  ../../.. (回到u-boot-2010.03的根目录下)

[root@localhost u-boot-2010.03]$ cp include/configs/sbc2410x.h  include/configs/mini2440.h  (添加mini2440的配置头文件)

 

4 测试编译能否成功

回到U-Boot主目录,(若之前有编译过,最好执行一下make clean)  make mini2440_config,再make,编译生成u-boot.bin成功。

  1、配置

[root@localhost u-boot-2010.03]$ make  mini2440_config

Configuring for mini2440 board...

2、测试编译

[root@localhost u-boot-2010.03]$ make

测试通过后进行下一步

可能出现的问题:

     (1) 如果出现:

      $ make mini2440_config

      Makefile:1927: *** 遗漏分隔符 停止。

请在Uboot的根目录下的Makefile

@$(MKCONFIG) $(@:_config=) arm arm920t mini2440 NULL s3c24x0前加上“Tab”键

 

2)如果编译时出现以下错误(这是编译器的问题,没出错就不要修改):

uses hardware FP, whereas u-boot uses software FP

修正的方法:cpu/arm920t/config.mk21行:PLATFORM_RELFLAGS += -fno-common -ffixed-r8

#-msoft-float ,删除msoft-float项。

阅读(1343) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~