Chinaunix首页 | 论坛 | 博客
  • 博客访问: 78476
  • 博文数量: 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成功。

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

上一篇:没有了

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

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

tmt11192011-07-04 11:29:25

chinaunix网友: 按照楼主的步骤进行设置,make后出现如下错误 提示nand.c第90行error:'NF_BASE'undeclared here(not in a function).....
我也出現
error:'NF_BASE'undeclared here(not in a function)
你如何解決?可以告訴我嗎?謝謝!!!

chinaunix网友2011-05-02 20:08:03

谁还有源代码和U-boot吗,帮忙发一份,531336395@qq.com

chinaunix网友2011-02-23 22:13:45

您好,能不能将U-boot和内核源码给我一份?stallion5632@163.com

chinaunix网友2011-01-06 21:00:10

其实这段代码有错误!! beq stack_setup之后找不到入口stack_setup,代码乱了,应该在 这里加入stack_setup: #if defined(CONFIG_mini2440_LED) @ LED1 on u-boot stage 1 is ok! mov r1, #GPIO_CTL_BASE add r1, r1, #oGPIO_B ldr r2,=0x155aa str r2, [r1, #oGPIO_CON] mov r2, #0xff str r2, [r1, #oGPIO_UP] mov r2, #0x1c0 str r2, [r1, #oGPIO_DAT] #endif 加入后代码正常,要不灯不会亮的!!

chinaunix网友2010-11-02 21:26:49

按照楼主的步骤进行设置,make后出现如下错误 提示nand.c第90行error:'NF_BASE'undeclared here(not in a function)