全部博文(75)
分类: LINUX
2009-09-14 14:04:44
研究嵌入式也有一段时间了,都是参考别人的东西来写的,今天我也记录一下自己的学习过程。
编译环境:Fedora11
交叉编译器:arm-linux-gcc-4.3.2
开发板平台:Friendly Mini2440开发板
Uboot源码下载:
1、准备工作,添加对SMDK2440的支持
1 进入U-Boot目录,修改Makefile
#vi Makefile
#为smdk2440建立编译项
smdk2410_config : unconfig
@$(MKCONFIG) $(@:_config=) arm arm920t smdk2410 NULL s3c24x0
smdk2440_config : unconfig
@$(MKCONFIG) $(@:_config=) arm arm920t smdk2440 NULL s3c24x0
各项的意思如下:
arm: CPU的架构(ARCH)
arm920t: CPU的类型(CPU),其对应于cpu/arm920t子目录。
smdk2440: 开发板的型号(BOARD),对应于board/smdk2440/目录
NULL: 开发者/或经销商(vender)。
s3c24x0: 片上系统(SOC)。
同时在“ifndef CROSS_COMPILE ”之前加上自己交叉编译器的路径,
CROSS_COMPILE=arm-linux-
在u-boot1.3.3及以上版本Makefile有一定的变化,使得对于24x0处理器从nand启动的遇到问题。也就是网上有人说的:无法运行过lowlevel_init。其实这个问题是由于编译器将我们自己添加的用于nandboot的子函数nand_read_ll放到了4K之后造成的(到这不理解的话,请仔细看看24x0处理器nandboot原理)。我是在运行失败后,利用mini2440的4个LED调试发现u-boot根本没有完成自我拷贝,然后看了uboot根目录下的System.map文件就可知道原因。
解决办法其实很简单:
将__LIBS := $(subst $(obj),,$(LIBS)) $(subst $(obj),,$(LIBBOARD))
改为__LIBS := $(subst $(obj),,$(LIBBOARD)) $(subst $(obj),,$(LIBS))
2 在/board子目录中建立自己的开发板SMDK2440目录
# cd board/samsung
# cp -raf smdk2410/ smdk2440
# cd smdk2440
# mv smdk2410.c smdk2440.c
还要记得修改自己的开发板smdk2440目录下的Makefile文件,不然编译时会出错:
#vi Makefile
COBJS := smdk2440.o flash.o
3 在include/configs/中建立配置头文件
# cp include/configs/smdk2410.h include/configs/smdk2440.h
4 测试编译能否成功
# make smdk2440_config
Configuring for smdk2440 board...
如果出现上述几行信息,表明已经设置OK,就可以进行接下来的移植工作了。
注:如果出现:[root@localhost u-boot-2009.01]# make smdk2440_config
Makefile:3001: *** missing separator (did you mean TAB instead of 8 spaces?). Stop.
|