移植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. 清理一下前面的编译
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
这里值先不用修改,后面再修改
修改arch/arm/Kconfig, 加载board/arm2440/Kconfig
(6) make
以上修改的是arch、board、configs、include/configs 下面的文件,多与平台相关
到这里,就能够编译出以arm2440为样本的image了,但是代码里面的内容都还是属于smdk2410的,接下来需要修改一些参数,让image能够在arm2440板子上正常的运行,请查看下一篇文章。