原文:http://blogold.chinaunix.net/u3/104447/showart.php?id=2203350
要移植U-Boot到开发板上,首先必须要建立交叉编译开发环境,我使用的交叉编译工具的版本是gcc-3.4.5-glibc-2.3.6。
一.移植环境
(1)Vmware6.5---Ubuntu9.10
(3)交叉编译器的版本是gcc-3.4.5-glibc-2.3.6。
现在的用的这个版本,仍然不支持2440的处理器,我们必须以smdk2410为原型,在此基础上进行U-Boot的移植工作。U-Boot2009.08这个版本的文件的组织结构有不稍微的变化,在移植是要注意,文件的放置更加的合理了。
二.建立自己的开发板目录并测试编译环境
(1)新建一个开发板的相应目录和文件
为了不破坏原来的结构目录和代码,在board目录下建立一个目录frank,将samsung/smdk2410目录复制到frank目录下,并将文件夹改名mini2440。
(2)然后,将frank/mini2440/smdk2410.c改名为mini2440.c。
(3)还要在include/configs目录下建立一个配置文件mini2440.h,可以将include/configs/smdk2410.h直接复制为mini2440.h
(4)还要修改两个Makefile文件,首先在顶层的Makefile中添加如下的两行:
mini2440_config : unconfig @$(MKCONFIG) $(@:_config=) arm arm920t mini2440 frank s3c24x0 |
*说明:arm :CPU的架构(ARCH)
arm920t:CPU的类型
mini2440 :对应在board目录下建立新的开发板项目的目录
frank:新开发板项目目录的上级目录,如直接在board下建立新的开发板项目的目录,则这里就为NULL
s3c24x0:CPU型号
*注意:编译选项格式的第二行要用Tab键开始,否则编译会出错,这是Makefile文件的规则.当Make出错的时候就应该查看是不是,这里写错!
(5)还要修改board/frank/mini2440目录下的Makefile文件,因为前面将smdk2410.c文件改名为mini2440.c:
COBJS := smdk2410.o flash.o
改为
COBJS := mini2440.c flash.o
(6)特别注意:在测试之前还要改一个文件,由于Makefile版本与先前的有一定的变化,使得对于24x0处理器从nand启动的遇到问题。也就是网上有人说的:无法运行过lowlevel_init。其实这个问题是由于编译器将我们自己添加的用于nandboot的子函数nand_read_ll放到了4K 之后造成的(到这不理解的话,请仔细看看24x0处理器nandboot原理)。u-boot根本没有完成自我拷贝,你可以看uboot根目录下的 System.map文件就可知道原因。
解决办法其实很简单:
将278行的__LIBS := $(subst $(obj),,$(LIBS)) $(subst $(obj),,$(LIBBOARD))
改为__LIBS := $(subst $(obj),,$(LIBBOARD)) $(subst $(obj),,$(LIBS))
不过这里还有另外一种方法就是就是修改在cpu/arm920t/u-boot.lds中,这个u-boot启动连接脚本文件决定了u-boot运行的入口地址,以及各个段的存储位置,这也是链接定位的作用。添加下面两行代码的主要目的也是防止编译器把我们自己添加的用于nandboot的子函数放到4K之后,否则是无法启动的。如下:
.text :
{
cpu/arm920t/start.o (.text)
board/frank/mini2440/lowlevel_init.o (.text)
board/frank/mini2440/nand_read.o (.text)
*(.text)
}
(7)进入u-boot-2009.8目录,验证环境
先 #make distclean,
然后# make mini2440_config
Configuring for mini2440 board...,
#make all 到此,就已经建立了自己的目录,还有测试了编译的环境,如果都正确的话,恭喜你,就可以进行下面真正的移植工作了。
三、修改U-Boot中的文件,以便支持Mini2440
1.首先修改/cpu/arm920t/start.S,修改此文件,使U-BOOT可以从NandFlash启动
(1)删除掉CONFIG_AT91RM9200DK 使用的指示灯的代码
|
|
|
|
|
|
|
在ldr pc, _start_armboot
_start_armboot: .word start_armboot之后添加
|
2、 在board/frank/mini2440/目录下加入NAND Flash读取函数(start.S中需要的nand_read_ll函数)文件nand_read.c,新建nand_read.c,这里的开发板使用的是128MB ,大页的读写。下面是nand_read.c文件的内容。(注意和小页的NandFlash的不同)
|
OBJS := mini2440.o nand_read.o flash.o
3、修改board/frank/mini2440/lowlevel_init.S文件
|
4、修改/board/frank/mini2440/mini2440.c
|
5、修改其余的各个文件,并添加编译选项使其编译进UBoot,CONFIG_S3C2440
1)修改include/configs/mini2440
|
defined(CONFIG_S3C2440)
|
#if defined(CONFIG_S3C2410)改为
|
|
|
|
|
defined(CONFIG_S3C2440)
|
|
|
|
|