作者:杨老师,华清远见嵌入式学院讲师。

u-boot的源代码默认是不针对任何目标平台的,当我们要移植u-boot到一个特定的目标平台时,需要生成针对目标平台的配置文件。u-boot目前已经支持的芯片可以在include/configs/下面找到。比如我们要编译针对s3c2410芯片的u-boot.bin,那么我们就需要在u-boot源码根路径下执行:

make smdk2410_config

这样我们的u-boot源码就是针对smdk2410平台了。(注:smdk2410是三星专门为 其arm9芯片s3c2410做的reference board,即参考板,国内大部分基于s3c2410的开发板都是参考smdk2410来做的)

那么,make smdk2410_config背后到底了做了什么工作呢?u-boot是如何生成针对smdk2410平台的配置的?下面我们就来分析这一过程。由于make命令会调用Makefile,所以我们要分析这个Makefile里面相关的部分。

smdk2410_config是u-boot源码根路径下的Makefile的一个目标,相关的代码如下:

smdk2410_config : unconfig
        @$(MKCONFIG) $(@:_config=) arm arm920t smdk2410 NULL s3c24x0
        unconfig:
        @rm -f $(obj)include/config.h $(obj)include/config.mk \
        $(obj)board/*/config.tmp $(obj)board/*/*/config.tmp

在执行make smdk2410_config的时候会先执行unconfig目标,负责清理掉以前的配置信息。然后就会执行@$(MKCONFIG) $(@:_config=) arm arm920t smdk2410 NULL s3c24x0,MKCONFIG是Makefile的一个变量,定义如下:

MKCONFIG := $(SRCTREE)/mkconfig

可见,MKCONFIG就是源码顶级目录下的mkconfig文件,这个文件是一个shell脚本程序,所以在执行make smdk2410_config的时候,系统就会执行mkconfig这个脚本,arm arm920t smdk2410 NULL s3c24x0则是传递个这个脚本的五个参数。

mkconfig这个脚本程序实际上就为我们生成了两个文件,一个是include/config.h,另一个是include/config.mk。我们可以在make smdk2410_config之前看一下include下面是没有这两个文件的。config.h里面只有一句话:

/* Automatically generated - do not edit */
        #include <config/smdk2410.h>

其实就是为我们包含了目标平台的配置头文件。另一个文件config.mk里面则有如下内容:

ARCH = arm
        CPU = arm920t
        BOARD = smdk2410
        SOC = s3c24x0

其实这里面定义了四个变量,分别是体系结构(arm)、处理器核(arm920t)、目标板(smdk2410)、片上系统(s3c24x0)。

上面的这个include/config.mk文件会在Makefile里面被包含,对应的代码如下:

ifeq ($(OBJTREE)/include/config.mk,$(wildcard $(OBJTREE)/include/config.mk))

# load ARCH, BOARD, and CPU configuration
        include $(OBJTREE)/include/config.mk
        export ARCH CPU BOARD VENDOR SOC

也就是说,Makefile会判断include下面有没有config.mk这个文件,如果有就包含这个文件,这就相当于在Makefile里面定义了ARCH、CPU、BOARD和SOC这四个变量。这样u-boot就知道自己是针对哪个目标平台的了。

在u-boot顶层目录下面也有一个config.mk文件,这个文件里面主要定义了交叉编译器选项及编译规则:

# load other configuration
        include $(TOPDIR)/config.mk

那么这个config.mk和include下的config.mk就包含了我们编译u-boot时的所有信息。其实关键就是include下的config.mk文件,Makefile包含这个文件以后就知道目标平台的信息了。

u-boot源码配置原理分析相关推荐

  1. SpringCloud微服务注册中心如何承载大型系统的千万级访问?源码及原理分析

    2019独角兽企业重金招聘Python工程师标准>>> 问题起源     Spring Cloud架构体系中,Eureka是一个至关重要的组件,它扮演着微服务注册中心的角色,所有的服 ...

  2. spark源码-shuffle原理分析-1-ShuffleWriter

    ShuffleWriter 1.概述 2.ShuffleHandle注册 2.1.注册时间点 2.2.向shuffleManager注册shuffle 2.2.1.BypassMergeSortShu ...

  3. 实战:Spring Boot源码解读与原理分析

    承载着作者的厚望,掘金爆火小册同名读物<Spring Boot源码解读与原理剖析>正式出书! 本书前身是掘金社区销量TOP的小册--<Spring Boot源码解读与原理剖析> ...

  4. 【赠书福利】掘金爆火小册同名《Spring Boot源码解读与原理剖析》正式出书了!...

    关注我们丨文末赠书 承载着作者的厚望,掘金爆火小册同名读物<Spring Boot源码解读与原理剖析>正式出书! 本书前身是掘金社区销量TOP的小册--<Spring Boot源码解 ...

  5. 树莓派Linux内核源码配置、编译、挂载(boot/kernal/根文件)、开启新内核

    目录 一.树莓派Linux源码配置(适合树莓派) 总体概述 配置的三种方式 1.照搬厂家的配置(使用这种方式) 2.参考厂家的配置(感受一下) 3.完全自主配置(需要一定工作经验) 二.树莓派Linu ...

  6. 开发板与虚拟机组网、uboot源码makefile分析、uboot安全启动与非安全启动方式、uboot源码配置与编译流程、制作TF启动盘

    开发板与虚拟机组网. 局面:开发板.PC(Ubuntu系统).网线直连PC:设置Ubuntu系统:1.设置桥接模式,桥接到PC的有线网卡上:2.手动配置IP V4的地址信息,注意和开发板保持在同一网段 ...

  7. spring boot 源码解析23-actuate使用及EndPoint解析

    前言 spring boot 中有个很诱人的组件–actuator,可以对spring boot应用做监控,只需在pom文件中加入如下配置即可: <dependency><group ...

  8. 【Spring Boot 源码研究 】- 自动化装配机制核心注解剖析

    1. 自动化装配介绍 Spring Boot针对mvc做了大量封装,简化开发者的使用,内部是如何管理资源配置,Bean配置,环境变量配置以及启动配置等? 实质是SpringBoot做了大量的注解封装, ...

  9. Spring Boot的自动化配置原理

    转载自 Spring Boot的自动化配置原理 随着Ruby.Groovy等动态语言的流行,相比较之下Java的开发显得格外笨重.繁多的配置.低下的开发效率.复杂的部署流程以及第三方技术集成难度大等问 ...

最新文章

  1. 使用ThinkPHP实现生成/校验验证码功能
  2. I00031 Look-and-say sequence
  3. eclipse安装SVN插件的两种方法
  4. pyhton3 模拟打开网页
  5. 微信sdk服务器支付文档,微信支付-普通下单开发者文档
  6. 学用 ASP.Net 之 System.Collections.Specialized.CollectionsUtil 类
  7. 在熟练使用2B铅笔前,请不要打开Axure
  8. 朋友圈、浏览器分享实现
  9. hbase 用户名密码_HBase开源 | HBase表管理系统HBaseManager2.0.2
  10. #CSP 201912-1 报数(C语言)(100分)
  11. DES加密(支持ARC与MRC)
  12. ElasticSearch(1)CentOS安装ElasticSearch测试CRUD
  13. Verilog三段式状态机描述
  14. ajax回调函数的各个参数的理解
  15. 如何进行项目管理?企业项目管理常见的组织形式有哪些?
  16. 360极速浏览器如何设置ie8兼容模式
  17. MySQL分区表详解
  18. eclipse的安装及最大子数组求和
  19. git --暂存区存在的意义
  20. Windows 2016 server NVIDIA cuda toolkit11.3 pytorch-gpu 踩坑教程

热门文章

  1. linux 工业 网络协议,简单了解Linux TCP/IP协议栈
  2. automake生成静态库文件_基于CocoaPods的组件化原理及私有库实践
  3. 拼多多api接口php算法,PHP 调用 拼多多 API 模板
  4. linux命令忘了,Linux考试易忘命令
  5. java实现dex转jar,Android 逆向相关
  6. 经典最优滤波器(概述)
  7. 将coco数据集格式转变成voc数据格式
  8. 目前已经学习的一些matlab函数
  9. 一个核物理学霸为何两次收到BlackHat的邀请
  10. python3中使用Redis