mini6410移植--uboot移植(1)

u-boot移植

(1)移植环境

u-boot版本:u-boot-2011-03
Linux平台:XP下虚拟机Ubuntu12.04
交叉编译工具:arm-linux-gcc-4.5.1
arm开发板:mini6410
        CPU:S3C6410
        DDR:256M
        Nand Flash:256M
        网卡:DM9000EP

(2)移植目标

支持Nand启动
支持Nand读写
支持yaffs写入
支持tftp下载

下载UBoot把它解压,然后得到u-boot-2011-03的文件夹,然后进去,并且做下面几件事情:

1:进入arch这个文件夹,把出arm外的前部文件夹删掉 

2:进入board这个文件夹,把除samsung外前部文件夹删掉 

3:进入include/configs,把除smdk6400.h外的所有文件删除。 

4: 把顶层目录下有一个叫onenand_ipl的文件夹删除掉,因为没有用到。 

5:进入nand_spl/board,把除samsung外全部文件删除掉。 

6:再进入arch/arm/cpu文件夹,把除arm1176外其他文件夹删除掉。 

7:再进入arch/arm/include/asm文件夹,把除arch-s3c64xx文件外带arch-XX的文件夹删除 

8:再进入board/samsung文价夹下,把除smdk6400外其他文价夹删除掉。 

至此已经把没用到或者不想见到它的文件夹跟文件删除掉了。爽吧。

(3)因为6410和6400资源差不多,只是主频和外设有点差别,所以可以参考6400进行设置。首先在board/samsung/下建立自己开发板项目,取名mini6410

#cd u-boot-2011.03/board/samsung/ //进入目录 
#mkdir mini6410 //创建mini6410文件夹

(4)参照board/samsung/smdk6400建立自己的mini6410模板,然后再修改

#cp -rf smdk6400/* mini6410/     //将6400下所有的代码复制到mini6410下 
#cd mini6410              //进入th6410目录 
#mv smdk6400.c mini6410.c      //将th6410下的smdk6400.c改名为mini6410.c 
#vim Makefile              //修改mini6410目录下Makefile的编译项,如下: 
COBJS := mini6410.o       //因在mini6410下我们将smdk6400.c改名为mini6410.c

(5)修改u-boot根目录下的Makefile文件。还要指定交叉编译器为arm-linux-,查找到smdk6400_config的地方,在其下面按照smdk6400_config的格式建立mini6410_config的编译选项。

mini6410_noUSB_config \
mini6410_config : unconfig
      @mkdir -p $(obj)include $(obj)board/samsung/mini6410
      @mkdir -p $(obj)nand_spl/board/samsung/mini6410
      @echo "#define CONFIG_NAND_U_BOOT" > $(obj)include/config.h
      @if [ -z "$(findstring mini6410_noUSB_config,$@)" ]; then \
          echo "RAM_TEXT = 0x57e00000" >> $(obj)board/samsung/mini6410/config.tmp;\
          $(MKCONFIG) $(@:_config=) arm arm1176 mini6410 samsung s3c64xx; \
      else \
          echo "RAM_TEXT = 0xc7e00000" >> $(obj)board/samsung/mini6410/config.tmp;\
          $(MKCONFIG) $(@:_noUSB_config=) arm arm1176 mini6410 samsung s3c64xx; \
      fi
      @echo "CONFIG_NAND_U_BOOT = y" >> $(obj)include/config.mk

注:*说明:arm   :CPU的架构(ARCH)

arm1176:CPU的类型

smdk6410 :对应在board目录下建立新的开发板项目的目录

samsung:新开发板项目目录的上级目录,如直接在board下建立新的开发板项目的目录,则这里就为NULL

s3c64xx:CPU型号

*注意:编译选项格式的第二行要用Tab键开始,否则编译会出错

 (6)进入nand_spl/board/samsung/,新建目录mini6410并将smdk6400下的所有文件复制到mini6410中

cd nand_spl/board/samsung/

mkdir mini6410
cp -rf smdk6400/*  mini6410/

 (7)编译新建的mini6410开发板项目

#make mini6410_config ARCH=arm  //如果出现Configuring for th6410 board...则表示设置正确

#make ARCH=arm   //编译后在根目录下会出现u-boot.bin文件,则u-boot移植的第一步就算完成了

编译失败,提示:
arch/arm/cpu/arm1176/start.o: In function `_end_ofs':
/home/max/U-Boot/u-boot/arch/arm/cpu/arm1176/start.S:61: undefined reference to `_end'
这个错误要修改
uboot.lds
nand_spl/u-boot.lds
nand_spl/board/samsung/smdk6400/u-boot.lds
board/samsung/smdk6400/u-boot-nand.lds
加入 _end = .;
在这一行的前面

.bss __rel_dyn_start (OVERLAY) : {

再次编译就可以成功了
 
到此为止,u-boot对自己的mini6410开发板还没有任何用处,以上的移植只是搭建了一个mini6410开发板u-boot的框架,要使其功能实现,还要根据mini6410开发板的具体资源情况来对u-boot源码进行修改。

 

posted on 2015-03-31 20:51  humbird  阅读(263)  评论(0编辑  收藏  举报

导航