Chinaunix首页 | 论坛 | 博客
  • 博客访问: 79536
  • 博文数量: 11
  • 博客积分: 1401
  • 博客等级: 上尉
  • 技术积分: 115
  • 用 户 组: 普通用户
  • 注册时间: 2009-05-12 16:16
文章分类
文章存档

2011年(1)

2009年(10)

我的朋友

分类: LINUX

2009-05-21 02:24:51

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



    本文是针对在友善之臂公司出品的以 S3C2440 为核心的 mini2440 开发板上实现U-Boot-2008.10的移植。其中存储介质为一片 64 MB 的 NAND Flash(K9F1208),一片2MB的 NOR Flash(SST-39VF1601),两片 32 MB 的 SDRAM(HY57V561620FTP),网卡芯片为 DM9000 。


1. U-Boot移植

U-Boot的源码是通过GCCMakefile组织编译的。顶层目录下的Makefile首先设置开发板的定义,然后递归地调用各级子目录下的Makefile,最后把编译过的程序链接成U-Boot映像。
    移植U-Boot工作就是添加开发板相关的文件、配置选项,然后配置编译。开发移植U-Boot前,要熟悉硬件电路板和处理器。确认U-Boot是否已经支持新开发板的处理器和I/O设备,比较出硬件配置最接近的开发板。选择的原则是,首先处理器相同,其次是处理器体系结构相同,然后是以太网等外围接口。

U-Boot移植过程如下:

1.1移植准备

修改Makefile文件,在U-Boot中建立自己的开发板文件(以友善之臂的sbc2410x为基础)


1.1.1  添加开发板的配置选项


 

进入U-Uoot根目录,修改Makefile文件,参考smdk2410的配置选项修改如下:

smdk2410_config    :    unconfig
     @$(MKCONFIG) $(@:_config=) arm arm920t smdk2410 NULL s3c24x0

mini2440_config    :    unconfig
    @$(MKCONFIG) $(@:_config=) arm arm920t mini2440 NULL s3c24x0

 

各项的意思如下:
arm     : CPU的架构(ARCH)
arm920t : CPU的类型(CPU),其对应于cpu/arm920t子目录。
mini2440: 开发板的型号(BOARD),对应于board/ mini2440目录。
NULL: 开发者/或经销商(vender),NULL为没有。
s3c24x0 : 片上系统(SOC)

 

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

CROSS_COMPILE=arm-9tdmi-linux-gnu-

 

特别注意:

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

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

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


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


 

目录结构为board/mini2440。如果开发者/经销商(vender)不为NULL,则目录结构为board/verder_name/mini2440,否则编译会出错。然后,将smdk2410目录下的文件考入此目录中,并将其中的smdk2410.c改名为mini2440.c。同时还得修改board/mini240/Makefile文件:
COBJS := mini2440.o flash.o


1.1.3  在include/configs/中建立配置头文件
    将smdk2410.h 复制一份在相同目录下,并改名为mini2440.h
1.1.4  测试编译能否成功
    回到U-Boot主目录,(若之前有编译过,最好执行一下make clean)  make mini2440_config,再make,编译生成u-boot.bin成功。

阅读(9492) | 评论(24) | 转发(2) |
0

上一篇:没有了

下一篇:移植U-Boot-2008.10到友善之臂mini2440(二)

给主人留下些什么吧!~~

flyslightly2009-06-01 05:23:54

你的错误我再看看,代码已经发给你了。另外要源码的朋友可以下载hugerat大侠的补丁(我参照的他的补丁),http://blogimg.chinaunix.net/blog/upfile2/090112143501.rar 解压后的文件u-boot-rat.patch 拷贝到和u-boot同级的目录下,并执行patch -p0 < u-boot-rat.patch 就是完整的源码了。要编译的话,先 make rat2440_config,再make。

chinaunix网友2009-05-31 20:57:05

能给我发一份你移植的uboot吗?wangmingli_cute@163.com 谢谢!!!

chinaunix网友2009-05-31 20:26:52

cmd_nvedit.c:63:3:error: #error Define one of CONFIG_ENV_IS_IN_{NVRAM|EEPROM|FLASH|DATAFLASH|SPI_FLASH|NOWHERE}

chinaunix网友2009-05-31 20:24:02

你好,我按照你的方法移植uboot-2008.10到mini2440上但编译时出错了能帮忙看一下哪里出问题了吗?