U-boot 201103rc1在s3c2440上的移植


移植环境

  • 主机:Oracl VM VirtualBox + RedHat9.0
  • 开发板:FL2440
  • 编译器:arm-linux-gcc-4.3.2
  • u-boot:201103rc1

步骤

u-boot的移植过程在网上都有,大致差不多。我是参考u-boot1.3.4的移植来做的。2011版跟1.3.4版在目录结构上做了一点更改,以前的/cpu目录更改到/arch/arm/cpu。所以移植步骤如下:

  1. 在board/samsung/目录下拷贝一份smdk2410,命名为fl2440.
  2. 将fl2440目录下的smdk2410.c改名为fl2440.c
  3. 修改Makefile内容,将smdk2410.o改为fl2440.o
  4. 在include/configs/目录下拷贝一份smdk2410.h,命名为fl2440.h
  5. 编辑u-boot根目录下的Makefile,指定CROSS_COMPILE ?= 为arm-linux-
  6. 在Makefile中建立编译选项格式  
    1. fl2440_config : unconfig   
    2. @$(MAKECONFIG) $(@:_config=) arm arm920t fl2440 samsung s3c24x0  
    此版本的Makefile中找不到smdk2410_config这个配置,所以我是写在了smdk6410_config后面了。后来查了一下目录结构,发现smdk2410_config放在了boards.cfg这个文件中了,所以在这里面加应该也是可以的。
  7. 接下来就是敲make fl2440_config了,www.bkjia.com 到出现Configuring for fl2440 board…,说明配置好了。
  8. 然后敲make,生成u-boot.bin。

遇到的问题及解决办法

  • 由于我的内核使用3.4.1版的crosstool编译的,开始的时候我也是用此版本编译u-boot,所以在make的时候出现了这个错误,"...user hardware FP whereas u-boot user software FP..."。这是关于硬浮点和软浮点的问题,因为u-boot使用的是software FP,而编译器使用的是hardware FP,所以会出现问题。网上有部分帖子是说把arch/arm/cpu/arm920t/config.mk里面的-msoft-float改为-mhard-float,但是好像arm920t是没有浮点运算协处理器的,所以我找到了4.3.2版使用software FP的crosstool才将此问题解决。
  • 还是要注意环境变量的问题,以前使用3.4,1的编译器,改为4.3.2后要修改环境变量。这个要盯着make的提示信息看,如有必要重定向到文件中更查看。
  • 提示get_sp()这个函数没有定义,根据提示找到源文件,发现是有些宏没有定义导致这个函数没有被编译,我直接强制让其总是被编译,最后终于通过。hoho~,不知道会不会有啥副作用。

至此,u-boot移植的框架已经搭好,接下来要根据具体的硬件环境来修改u-boot的源码。

相关内容