U-boot移植之配置及编译详解 1

1.Uboot 的配置过程主要涉及四个文件:


  uboot/makefile
  uboot/mkconfig
 uboot/config.mk
 uboot/board/samsung/smdkc110/u-boot.lds

2.基本的流程:

 

3.Makefile是整个编译过程的总指挥,在配置阶段指导配置文件的生成,这些配置文件直接和目标板子的信息保持一致,生成与板子相匹配的配置文件,在接下来的编译过程直接被引用,调用,影响后面的编译链接过程;在编译链接阶段指导内核的编译链接,最终生成可以烧录的文件。

******************************************************************************/

/******************************************************************************

 

4.mkconfig是源码文件本来就存在的,在Makefile中给它传入了六个参数,这六个参数包括和我们的板子有关:架构信息、cpu信息、板子型号、卖家信息、系统芯片信息。

扫描二维码关注公众号,回复: 4529951 查看本文章

我们通过make+Makefile源码中的目标板子名字执行相应的目标,从而跳转至mkconfig中去执行uboot配置过程当中最重要的链接脚本。

 

具体的功能:

1.确定了开发板的一些名称信息,

2.创建了相关头文件的链接。

3.创建了一个和板子宏定义有关的配置头文件:uboot/include/config.h

4.根据具体板子的信息,在根目录下创建config.mk文件。

 

Makeconfig创建的符号链接:

1.在include目录下创建asm文件,指向asm-arm   43或48行

2.在include/asm-arm下创建一个arch文件,指向include/asm-arm/arch-s5pc110  56行

3.在include目录下创建一个reg.h文件,指向include/s5pc110.h文件    86行

4.在include/asm-arm下创建一个arch文件,指向include/asm-arm/arch-s5pc11x  (覆盖 了2中的符号链接)   88行

5.在include目录下创建了proc文件,指向 include/asm-$2/procproc-armv   109

符号链接文件是我们整个配置过程的核心,这些符号链接文件(文件夹)的主要作用是给头文件包含等过程提供指向性链接,使得uboot有可移植性。

uboot的移植原理:在uboot之中有很多彼此平行的代码,各自属于各自不同的架构/CPU/开发板,我们在具体到某个开发板的编译时用符号连接的方式提供一个具体名字的文件夹供编译器使用。就可以在配置过程中通过配置使用不同的文件,从而正确的包含正确的文件。

config.mk文件:

Uboot/config.mk文件内打印出了一些和板子有关的信息;

配置与板子信息配置的的头文件;
源码之中包含了很多不同版本板子的头文件,通过mkconfig内代码的简单判断之后在include目录下下创建一个config.h文件,统一将对应板子的头文件在/include/config.h中引用。

而这些众多的头文件在uboot/include/configs/目录下,是我们移植是最重要的文件,它涉及我们对开发板的宏定义配置文件。                               

例如:include/configs/smdkc110onenand.h是针对smdkc110onenand板子的头文件。

这些/uboot/include/configs/*****.h>文件会被用来生成一个autoconf.mk文件,而这个生成的autoconf.mk文件会被主Makefile引用,指导整个编译过程,这里面的宏定义会影响我们对uboot中大部分.c文件的条件编译的选择,从而实现可移植性。

****************************************************************************/

/*****************************************************************************

 

5.config.mk:位于uboot源码的根目录下, 其包含了子目录下许多同名的config.mk。所以千万注意这些同名文件的主次区别 。

Config.mk在主Makefile开头中被引用,是Makefile中很重要的一部分。

Config.mk的配置过程也是需要原材料的,而所需的原材料在uboot/include/configs/xxx.h头文件中。

主要职责:

(1)具体的设置交叉编译工具链接(主Makefile中也有设置交叉编译工具链)

(2)加载include/autoconfig.mk文件(这个文件是在主Makefile中生成的)

(3)指定-Ttext链接地址

(4)makefile的推导规则

 

*****************************************************************************/

 

/*************************************************************

 

6.uboot/board/samsung/smdkc110/u-boot.lds:整个uboot的总连接脚本

在编译廉洁过程主要靠此文件夹来指导操作,

连接器将函数和全部变量识别为符号来进行链接。

 

其中链接器主要有两个作用,一是将若干输入文件(.o文件)根据一定规则合并为一个输出文件(例如ELF格式的可执行文件);一是将符号与地址绑定(当然加载器也要完成这一部分工作)。链接器有一个编译到其二进制代码中的默认链接脚本,大多数情况下使用它链接输入文件并生成目标文件

我们也可以自己书写合并规则,即自己写链接脚本。uboot更需要规则,因为涉及到重定位问题,重定位相关代码必须要放到前16KB之前。(此外,链接脚本还可以自己定义自己的段实现按段排列顺序执行程序,需源码有相关代码支持)

 

***************************************************************/

 

 

猜你喜欢

转载自blog.csdn.net/qq_41464499/article/details/84590847