您的位置:首页 > 其它

移植uboot-2015-10(一)

2015-09-30 14:00 281 查看
移植uboot-2015.10.rc1(一)

开发板:    friendly arm 2440

工具:      Win7 + VMware + ubuntu

U-boot版本:
u-boot-2015.10.rc1

GCC版本:   
gcc version 4.3.3




随着uboot版本的不断更新,现在的版本和以前的相比有不少的变化,在代码结构上更像Linux的风格,现在文件解压以后目录结构是下面这样的:



我们所熟悉的在u-boot-2014中的boards.cfg和mkconfig没有了,而同时又在u-boot-2015.10的顶层目录下多出了一个configs目录,还有一个Kconfig文件(这不是Linux内核所特有的吗?),可以看到u-boot一直在学习Linux内核的配置和编译方法。

configs目录下有很多文件,每一个文件都对应着不同型号的芯片,从数量上来看,如今uboot所支持的芯片还是相当丰富的:



当选定我们需要的配置文件以后,就可以参考编译Linux内核的方法make xxx_defconfig 来生成我们需要的.config文件,这个命令会使用工具从顶层的Kconfig开始往下读取对应的Kconfig配置选项,生成.config文件。当然,生产.config文件以后,我们也可以使用make menuconfig来根据需要对配置文件进行修改。

下面演示一下smdk2410的编译过程:

1. make smdk2410_defconfig

2. make

这时编译会出错,出错并不可怕,一个一个解决就是了,先来看一下出错提示:



从中可以看出,在编译asm-offsets.s时出错了,因为-march的值不对,现在需要编译的是arm架构上的代码,实际上用的是本机默认的GCC,所以应该是没有指定架构和交叉编译器,我们只需要在顶层目录Makefile中指定一下就好了:



然后我们再make一下,就能顺利编译通过了(如果交叉编译器没有问题的话)!

上面的过程是在uboot已经支持某个架构的情况下编译的,修改的不多,但实际上未必是这样的,如果uboot不支持自己需要的架构,那要怎么修改uboot,让它能够在板子上运行呢?下面就以s3c2440为例进行移植.

1. 清理一下前面的编译

 make distclean

2. 拷贝

(1) cp configs/smdk2410_defconfig configs/arm2440_defconfig

这里拷贝一份smdk2410的配置文件,并将CONFIG_TARGET_SMDK2410=y 修改为 CONFIG_TARGET_ARM2440=y, 这个值会指明编译的是哪个开发板



 (2).  cp -arf board/samsung/smdk2410/   board/friendly/arm2440

我们知道,board目录下放的是已经支持的开发板相关的文件,其中包含SDRAM初始化代码(lowerlevel_init.S),板级初始化文件(smdk2410.c)等,由于这个版本的uboot不支持我们的arm2440,所以需要自己创建一个,然而arm2440和smdk2410很相似,差异只是下面一些,所以只要以smdk2410作为副本来修改就好了,然后调整一下差异的代码。





这一步拷贝了一份smdk2410文件夹,friendly是vendor的名称,arm2440是板子的名称,这两个值指明了开发板相关的文件路径,所以要修改board/friendly/Kconfig,使make arm2440_defconfig 时能够获取正确的路径,修改如下:





line1:configs/arm2440_defconfig中定义的目标

line6:发行商的名称


line3:板子的名称

line9:芯片的名称

line12:配置文件名称

这几个值务必要正确,不然会直接影响到编译时能不能找到正确的目标文件路径,同时也可以查看.config文件是否有这些值。

(3) mv board/friendly/smdk2410.c  borad/friendly/arm2440.c

这里不用修改值,后面再修改

(4) cp include/configs/smdk2410.h include/configs/arm2440.h

 这里值先不用修改,后面再修改

 (5) 修改arch/arm/Kconfig, 添加smdk2440的配置项



  修改arch/arm/Kconfig, 加载board/arm2440/Kconfig




(6) make

以上修改的是arch、board、configs、include/configs 下面的文件,多与平台相关

到这里,就能够编译出以arm2440为样本的image了,但是代码里面的内容都还是属于smdk2410的,接下来需要修改一些参数,让image能够在arm2440板子上正常的运行,请查看下一篇文章。

 

 

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: