由于本人比较菜,胆也比较小,所以先移植比较老的版本u-boot从smdk2410移植到2440板上。
移植前准备:
从内核文档“readme”可以看到这么一句话,Configuration depends on the combination of board and CPU type; all such information is kept in a configuration file "include/configs/.h".
先配置(eg: make smdk2410_config),再编译(make)。
note: 如果一个编译的时候出现段错误之类的问题,可能是编译器版本过低所致,换一个高一点的试试。
分析源码:
首先要了解u-boot的结构,分析Makefile,找出第一个文件和链接地址。或者直接make,在编译信息里找寻第一个文件和链接地址等信息。
入口是 start.S,从start.S进行分析,分析过程略(一个详细分析的链接地址 http://blog.csdn.net/slj_win/article/details/6952241)
分析完后,make distclean。
建立单板:
find -name *smdk2410* 添加相应的2440文件;grep smdk2410 * -rn 添加2440的配置.
或者直接在修改相应的2410文件为2440。
然后make smdk2440_config, make,出错: 出现arm-linux-gcc command not found 之类的,Google了下,是因为交叉编译器没有设置好,
echo $PATH可以找到交叉编译器的目录是 /usr/local/arm/4.3.2/bin
Makefile中查找关键字 CROSS,可以看到:
# load ARCH, BOARD, and CPU configuration
include $(obj)include/config.mk
export ARCH CPU BOARD VENDOR SOC
# set default to nothing for native builds
ifeq ($(HOSTARCH),$(ARCH))
CROSS_COMPILE ?=
endif
改为:CROSS_COMPILE=/usr/local/arm/4.3.2/bin/arm-linux-
make distclean
make
编译成功!
将smdk2440.h中所有关于2410(CONFIG_S3C2410、CONFIG_SMDK2410)配置改为2440的(CONFIG_S3C2440、CONFIG_SMDK2440)
make 出错,出现xxx未声明之类的错误,原因自然是内核没有2440配置的代码,按错误修改代码(主要是平台结构体)。
make
成功!
阅读(851) | 评论(0) | 转发(0) |