最近闲着无聊,没事就把开发板拿出来玩玩。打算自己移植u-boot到开发板上跑跑。当然在此过程中,免不了度娘这种良师益友温馨而体贴的帮忙。在此,谢过那些在网络上无私奉献的大牛,因为你们社会才会进步的更快。
闲话少扯,进入正题。想要移植u-boot。首先要有这个东西。就像我们看片一样,要想看,首先要有种子。哈哈,打开u-boot官网下载区:
ftp://ftp.denx.de/pub/u-boot/这里包含所有的u-boot版本。由于之前开发板上带的是u-boot1.1.6。通过度娘的介绍,u-boot2010.3版本和u-boot1.1.6版本比较接近,移植起来比较方便。因此,决定取经的第一步,先找到唐王,拿到通关文牒。
下载好源码之后,我们干什么?什么,对了。当然是先存到PC的系统(linux)上。开始做准备工作,
首先创建目录mkdir u-boot;(目录名随便起,只要自己认识就行,哪怕就起个laopo都行哈哈)
接着拷贝u-boot2010.3版本的源码到该目录,例如:[root@beyond u-boot]# cp /media/disk/u-boot-2010.03.tar.bz2 ./
解压该源码包:[
root@beyond u-boot]# tar xvjf u-boot-2010.03.tar.bz2
解压出来之后;打开解压后的目录:[root@beyond u-boot]#cd u-boot-2010.3先编译一下保证源码包没有问题:make smdk6400_config; make;确认没有问题之后,开始做下一步,就是减肥,去掉身上的赘肉和脂肪;当然,你喜欢胖子的话,可以不减。
打开解压后的目录:[root@beyond u-boot]#cd u-boot-2010.3
1.进入board目录删除除去Samsung之外的所有目录;
2.进入cpu目录删除除去arm1176之外的所有目录;
3.进入include目录删除除去以asm-*开头的目录(保留asm-arm和asm-generic);
4.进入include/configs/目录中,删除除去smdk6400之外所有的文件;
5.删除lib*开头的所有目录(保留lib_arm和lib_generic);
OK,结束了。这下就剩下鬼魅的身材,性感的肌肤了。哈哈,想哪去了。下面继续正事。先编译一下,看看减肥是否影响正常生活。
在目录u-boot-2010.3下编译:make smdk6400_config ; make;看看是否能编译过去。正常是没有问题的,如果编译不过只能说明,你减肥过火偏瘦,影响正常生活。怎么办,重新开始解压按照步骤再来一遍。
这些都是前戏。当然如果不喜欢做前戏的,那就直接开始正题:
1.进入board/samsung目录,创建smdk6410目录,拷贝smdk6400目录下的所有文件到smdk6410中,并将smdk6400.c改为smdk6410.c;
-
cd board/samsung/
-
mkdir smdk6410
-
cp smdk6400/* smdk6410/
-
cd smdk6410
-
mv smdk6400.c smdk6410.c
2.打开smdk6410目录,将该目录下所有包含smdk6400的文件中的smdk6400转变成smdk6410;转换方式为该文件在vim下的命令行模式使用命令::%s/smdk6400/smdk6410/g;
3.返回到u-boot-2010.3目录下,打开cpu目录,进入arm1176/s3c64xx/下,将该目录下所有文件中的smdk6400转变成smdk6410;转变方式同上;
4.返回到u-boot-2010.3目录下,打开nand_spl目录,进入board/samsung/下,在该目录下创建smdk6410,smdk6400中的所有文件拷贝到smdk6410目录中;并将该目录下所有文件中的smdk6400转变成smdk6410;方式同上;
5.返回到u-boot-2010.3目录下,打开include/configs/目录,将该目录下smdk6400.h拷贝一份改为smdk6410.h;并将该文件中的smdk6400转变成smdk6410;方式同上;
6.返回到u-boot-2010.3目录下,打开include/asm-arm/arch-s3c64xx/目录,将该目录下smdk6400.h拷贝一份改为smdk6410.h;并将该文件中的smdk6400转变成smdk6410;方式同上;且需要修改头文件;
为:
-
#include "./asm/arch/s3c64x0.h"
7.返回到u-boot-2010.3目录下,修改mkconfig文件中:
-
if [ "$2" = "arm" ] ; then
-
rm -f asm-$2/proc
-
ln -s ${LNPREFIX}proc-armv asm-$2/proc
-
fi
下面插入如下代码:
-
if [ '$1' = 'smdk6410' ]; then
-
rm -f regs.h
-
ln -s asm-$2/arch/s3c6410.h regs.h
-
fi
8.修改Makefile文件:复制smdk6400配置放到smkd6400配置下面,并更改为6410;
-
smdk6400_noUSB_config \
-
smdk6400_config : unconfig
-
@mkdir -p $(obj)include $(obj)board/samsung/smdk6400
-
@mkdir -p $(obj)nand_spl/board/samsung/smdk6400
-
@echo "#define CONFIG_NAND_U_BOOT" > $(obj)include/config.h
-
@if [ -z "$(findstring smdk6400_noUSB_config,$@)" ]; then \
-
echo "RAM_TEXT = 0x57e00000" >> $(obj)board/samsung/smdk6400/config.tmp;\
-
$(MKCONFIG) $(@:_config=) arm arm1176 smdk6400 samsung s3c64xx; \
-
else \
-
echo "RAM_TEXT = 0xc7e00000" >> $(obj)board/samsung/smdk6400/config.tmp;\
-
$(MKCONFIG) $(@:_noUSB_config=) arm arm1176 smdk6400 samsung s3c64xx; \
-
fi
-
@echo "CONFIG_NAND_U_BOOT = y" >> $(obj)include/config.mk
下面增加代码如下:
-
smdk6410_noUSB_config \
-
smdk6410_config : unconfig
-
@mkdir -p $(obj)include $(obj)board/samsung/smdk6410
-
@mkdir -p $(obj)nand_spl/board/samsung/smdk6410
-
@echo "#define CONFIG_NAND_U_BOOT" > $(obj)include/config.h
-
@if [ -z "$(findstring smdk6410_noUSB_config,$@)" ]; then \
-
echo "RAM_TEXT = 0x57e00000" >> $(obj)board/samsung/smdk6410/config.tmp;\
-
$(MKCONFIG) $(@:_config=) arm arm1176 smdk6410 samsung s3c64xx; \
-
else \
-
echo "RAM_TEXT = 0xc7e00000" >> $(obj)board/samsung/smdk6410/config.tmp;\
-
$(MKCONFIG) $(@:_noUSB_config=) arm arm1176 smdk6410 samsung s3c64xx; \
-
fi
-
@echo "CONFIG_NAND_U_BOOT = y" >> $(obj)include/config.mk
9.九九归一,还剩一难;就是更改要使用的编译器;还在Makefile中更改:
为:
-
CROSS_COMPILE ?= arm-linux-
10.漫长的取经过程终于修成正果,在目录u-boot-2010.3下编译:make smdk6410_config ; make;正常情况下编译可以通过;
阅读(2321) | 评论(0) | 转发(0) |