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

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

上一篇:没有了

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

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

chinaunix网友2009-07-14 01:23:41

可以发一份源码给我吗?? 我进行第三步的时候,一直都没有2 个led灯亮,只有峰鸣器和一个灯亮,不知道为什么~~ 而且终端一点反应都没有~~ 我的邮箱 : otie850328@yahoo.com.cn,谢谢

hipboi2009-07-10 18:48:11

#define MACH_TYPE_mini2440 782 竟然是782!!!! 内核里不是定义1999么 include/asm-arm/mach-types.h #define MACH_TYPE_MINI2440 1999

chinaunix网友2009-07-10 17:50:23

楼主,我使用你的方法,编译的U-boot运行后,为什么没有u-boot菜单,而且显示SMDK2410 #

chinaunix网友2009-06-24 16:20:33

楼上,nor的地址从0开始,连续的。大小在include/configs/xxxx.h 里设置

tancotq2009-06-04 20:58:06

麻烦你一下,请问mini2440中nor flash 的地址是多少?? 只知道它的片选端和nGCS0相连,下一步该怎么计算??