u-boot的移植过程在网上都有,大致差不多。我是参考u-boot1.3.4的移植来做的。2011版跟1.3.4版在目录结构上做了一点更改,以前的/cpu目录更改到/arch/arm/cpu。所以移植步骤如下:
在board/samsung/目录下拷贝一份smdk2410,命名为fl2440. 将fl2440目录下的smdk2410.c改名为fl2440.c 修改Makefile内容,将smdk2410.o改为fl2440.o 在include/configs/目录下拷贝一份smdk2410.h,命名为fl2440.h 编辑u-boot根目录下的Makefile,指定CROSS_COMPILE ?= 为arm-linux- 在Makefile中建立编译选项格式
fl2440_config : unconfig @$(MAKECONFIG) $(@:_config=) arm arm920t fl2440 samsung s3c24x0 此版本的Makefile中找不到smdk2410_config这个配置,所以我是写在了smdk6410_config后面了。后来查了一下目录结构,发现smdk2410_config放在了boards.cfg这个文件中了,所以在这里面加应该也是可以的。 接下来就是敲make fl2440_config了, 到出现Configuring for fl2440 board…,说明配置好了。 然后敲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的源码。