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

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

上一篇:没有了

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

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

flyslightly2009-06-03 21:48:25

楼上说的移植成功是指编译通过了吗? 如果中间不出错的话用supervivi的a选项下到Nand Flash中,然后改为Nand Flash启动,再按重启键应该就可以看得信息了。

chinaunix网友2009-06-03 21:37:52

你好我按找你的步骤移植成功了,但用supervivi下到板子上怎么没反应啊!!!怎么回事啊?

flyslightly2009-06-03 03:59:45

想找DM9000的操作地址请看原理图(DM9000的片选脚AEN接到了2440的nGCS4,因此基地址是0x2000 0000。再看DM9000的SA脚,SA8和SA9接了高电平,所以 基地址+ 11 0000 0000 B=0x20000300)

flyslightly2009-06-03 03:09:05

经再次移植后检查,发现几个小错漏,分别在1.2.4、1.2.6和1.2.7,均已修正并用蓝底标出;另外发现1.2.2中的nand_read.c文件不完全,我已经把此文件整个替换。但并未发现楼上说的错误 cmd_nvedit.c:63:3:error

tancotq2009-06-02 16:54:05

#define CONFIG_DM9000_BASE 0x20000300 #define DM9000_IO 0x20000300 #define DM9000_DATA 0x20000304 你好请问以上的地址是怎么找到的?我怎么没有找到这些地址??