U-boot移植之编译控制

本文详细介绍了U-boot的编译控制过程,包括公共代码、编译配置和编译过程。在编译配置阶段,`makeconfig`用于生成配置文件,影响编译过程。在编译过程中,`all`目标确保所有相关文件正确编译,生成最终的u-boot镜像。文章还探讨了`config.mk`等全局配置文件的作用,以及`CONFIG_NAND_U_BOOT`等宏如何影响代码编译。
摘要由CSDN通过智能技术生成

 

U-boot移植之编译控制


简述:在u-bootreadme文档中提到,u-boot的编译分为两步,即编译前的配置makeconfig和编译过程make。那么在这两步中都进行了怎样的一些操作呢!

       一、公共代码

打开(u-boot)根目录下的Makefile,在第一个目标all之前的都是公共代码。这些代码都是设置变量、导出变量及包含文件的语句,只要在根目录执行make命令,不管有没有参数它们都会被执行。

  1. 变量BUILD_DIR

这个变量决定了编译过程产生的中间文件及输出文件存放的位置。如果不设置这个变量,那么这些中间文件及最终的生成文件将被放到源代码目录下的各目录中。

  1. 变量MKCONFIG

这个变量的值为根目录下的mkconfig,这是一个shell脚本文件。它通常在编译配置阶段被调用,其功能是根据输入变量或根目录下的board.cfg文件来产生板配置文件/include/config.h。这个config.h中包含着开发板的平台、芯片、开发板名、提供商等一些宏定义,它还包含了一些头文件。它对编译过程有着重要的影响,因为很多代码并不是为某单一平台写的。另外,这个config.h文件包含有smdk6400.h文件,这个文件是开发板的配置文件,里面放着几乎所有对于该开发板的u-boot的控制宏及一些重要板相关的变量的值。比如,内存起始地址,内存大小等。

  1. 包含文件include/config.mk

这个config.mk是在编译配置过程产生的,所以在编译配置阶段是没有这个文件的。这里面存放的是开发板相关Makefile变量,它将决定哪些板相关的文件会被编译。


二、编译配置

以官方源码自带的smdk6400为例(makesmdk6400_config)。执行完上面的公共代码,直接跳到目标smdk6400_config目标处并执行其也的命令。

  1. @echo"#define CONFIG_NAND_U_BOOT" > $(obj)include/config.h

很多代码中都有用到这个宏,有没有定义这个宏会直接影响一部分代码是否需要被编译。由此也可知这个配置产生的u-boot是用于nandflash起动的。

  1. @echo"CONFIG_NAND_U_BOOT = y" >> $(obj)include/config.mk

这个是Makefile的变量,和前面的宏定义不同,这个变量是作用于Makefile中,利用它可以控制一部分库或源代码是否需要被编译。

  1. echo"RAM_TEXT = 0x57e00000" >>$(obj)board/samsung/smdk6400/config.tmp;

这里也是一个Makefile变量,这个变量的值在后面将会变成一个宏和另一个Makefile变量的值,这个值并非随意取的,它和u-bootDRAM中的布局有关。具体如何关联,后面再说。

  1. @$(MKCONFIG)smdk6400 arm arm1176 smdk6400 samsung s3c64xx

调用前面提到的mkconfigshell脚本处理开发板的信息,写入/include/config.h/include/config.mk这两个文件。另外,它还会做一些工作,建议设置变量

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值