先看如何使用,然后以此为入口。

写一个脚本,这里以mx6q_sabreauto_config为例。

#!/bin/bash
export ARCH=arm
export CROSS_COMPILE=<path to cross compiler prefix>
make distclean;
make mx6q_sabreauto_config
make

然后编译:$./build_u-boot.sh就可以生成u-boot.bin了。

我们看其顶层Makefile:

mx6q_sabreauto_config    : unconfig@$(MKCONFIG) $(@:_config=) arm arm_cortexa8 mx6q_sabreauto freescale mx6

@$(MKCONFIG) 为当前目录下的mkconfig脚本。
$(@:_config=)会过滤掉_config后缀,最终mx6q_sabreauto

来看mkconfig:

#!/bin/sh -e# Script to create header files and links to configure
# U-Boot for a specific board.
#
# Parameters:  Target  Architecture  CPU  Board [VENDOR] [SOC]
#
# (C) 2002-2006 DENX Software Engineering, Wolfgang Denk <wd@denx.de>
#
APPEND=no   # Default: Create new config file
BOARD_NAME=""   # Name to print in make output/*注意脚本这行注释
# Parameters:  Target  Architecture  CPU  Board [VENDOR] [SOC]
看名字大概知道意思了!*//*
$1: mx6q_sabreauto
$2: arm
$3: arm_cortexa8
$4: mx6q_sabreauto
$5: freescale
$6: mx6
*/while [ $# -gt 0 ] ; docase "$1" in--) shift ; break ;;-a) shift ; APPEND=yes ;;-n) shift ; BOARD_NAME="${1%%_config}" ; shift ;;*)  break ;;esac
done/*BOARD_NAME=mx6q_sabreauto*/
[ "${BOARD_NAME}" ] || BOARD_NAME="$1"[ $# -lt 4 ] && exit 1
[ $# -gt 6 ] && exit 1echo "Configuring for ${BOARD_NAME} board..."#
# Create link to architecture specific headers
#
/*默认两个tree路径一样*/
if [ "$SRCTREE" != "$OBJTREE" ] ; thenmkdir -p ${OBJTREE}/includemkdir -p ${OBJTREE}/include2cd ${OBJTREE}/include2rm -f asmln -s ${SRCTREE}/include/asm-$2 asmLNPREFIX="../../include2/asm/"cd ../includerm -rf asm-$2rm -f asmmkdir asm-$2ln -s asm-$2 asm
elsecd ./include/*删除原来的,根据架构名字重新链接*/rm -f asmln -s asm-$2 asm
fi/*删除架构下对应的arch*/
rm -f asm-$2/arch/*ln -s ${LNPREFIX}arch-mx6 asm-arm/arch */
if [ -z "$6" -o "$6" = "NULL" ] ; thenln -s ${LNPREFIX}arch-$3 asm-$2/arch
elseln -s ${LNPREFIX}arch-$6 asm-$2/arch
fi/*proc对应的是proc-armv目录*/
if [ "$2" = "arm" ] ; thenrm -f asm-$2/procln -s ${LNPREFIX}proc-armv asm-$2/proc
fi#
# Create include file for Make
#
/*保存到config.mk*/
echo "ARCH   = $2" >  config.mk
echo "CPU    = $3" >> config.mk
echo "BOARD  = $4" >> config.mk[ "$5" ] && [ "$5" != "NULL" ] && echo "VENDOR = $5" >> config.mk[ "$6" ] && [ "$6" != "NULL" ] && echo "SOC    = $6" >> config.mk#
# Create board specific header file
#
if [ "$APPEND" = "yes" ]    # Append to existing config file
thenecho >> config.h
else> config.h       # Create new config file
fi
echo "/* Automatically generated - do not edit */" >>config.h
/*#include <configs/$mx6q_sabreauto.h>*/
echo "#include <configs/$1.h>" >>config.h
echo "#include <asm/config.h>" >>config.hexit 0

回到Makefile:

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

包含了刚才生成的config.mk文件。

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

包含顶层config.mk,看它做了什么。

sinclude $(OBJTREE)/include/autoconf.mkifdef    ARCH
sinclude $(TOPDIR)/lib_$(ARCH)/config.mk    # include architecture dependend rules
endif
ifdef   CPU
sinclude $(TOPDIR)/cpu/$(CPU)/config.mk     # include  CPU  specific rules
endif
ifdef   SOC
sinclude $(TOPDIR)/cpu/$(CPU)/$(SOC)/config.mk  # include  SoC  specific rules
endif
ifdef   VENDOR
BOARDDIR = $(VENDOR)/$(BOARD)
else
BOARDDIR = $(BOARD)
endif
ifdef   BOARD
sinclude $(TOPDIR)/board/$(BOARDDIR)/config.mk  # include board specific rules
endif

包含cpu, board等目录下的config.mk。
$(TOPDIR)/board/$(BOARDDIR)/config.mk
里有包含了u-boot.lds

LDSCRIPT := $(SRCTREE)/board/$(VENDOR)/$(BOARD)/u-boot.lds
ENTRY(_start)
SECTIONS
{. = 0x00000000;. = ALIGN(4);.text     :{/* WARNING - the following is hand-optimized to fit within *//* the sector layout of our flash chips!  XXX FIXME XXX   */board/freescale/mx6q_sabreauto/flash_header.o (.text.flasheader)cpu/arm_cortexa8/start.oboard/freescale/mx6q_sabreauto/libmx6q_sabreauto.a    (.text)lib_arm/libarm.a     (.text)net/libnet.a         (.text)drivers/mtd/libmtd.a     (.text)drivers/mmc/libmmc.a     (.text). = DEFINED(env_offset) ? env_offset : .;common/env_embedded.o(.text)*(.text)}
......
}

说明第一个运行的文件start.S, 回到Makefile:
OBJS  = cpu/$(CPU)/start.o

确实被编译进去了,download到板子之后就可以开启u-boot之旅了!

refer to :

http://www.360doc.com/content/12/0816/10/7775902_230452499.shtml

[IMX6Q]u-boot_v2009.08编译过程相关推荐

  1. 【嵌入式开发】gcc 学习笔记(一) - 编译C程序 及 编译过程

    一. C程序编译过程 编译过程简介 : C语言的源文件 编译成 可执行文件需要四个步骤, 预处理 (Preprocessing) 扩展宏, 编译 (compilation) 得到汇编语言, 汇编 (a ...

  2. GCC编译过程与动态链接库和静态链接库

    1. 库的介绍 库是写好的现有的,成熟的,可以复用的代码.现实中每个程序都要依赖很多基础的底层库,不可能每个人的代码都从零开始,因此库的存在意义非同寻常. 本质上来说库是一种可执行代码的二进制形式,可 ...

  3. FFmpeg在Windows系统下的编译过程

    由于FFMpeg是基于Linux开发的开源项目,源代码和Windows下最常见的Visual Studio提供的C/C++编译器不兼容,因此它不能使用MSVC++编译.要想使用FFMpeg,最先要解决 ...

  4. linux内核2.6.35编译过程

    一.实验目的 学习重新编译Linux内核,理解.掌握Linux内核和发行版本的区别. 二.实验内容 在Linux操作系统环境下重新编译内核.实验主要内容: A. 查找并且下载一份内核源代码,本实验使用 ...

  5. Android编译过程详解(三)

    Android编译过程详解(一):http://www.cnblogs.com/mr-raptor/archive/2012/06/07/2540359.html Android编译过程详解(二):h ...

  6. 实验检测编译过程中的链接作用

    /* 名称:实验检测编译过程中的链接作用 说明:以前一直不太了解编译过程中链接是到底干嘛的(其具体的作用是什么),只浅浅的了解到这个阶段就是将各个目标文件连接在一起,至于为什么要连接,怎么连接,不是很 ...

  7. linux内核编译过程的最终总结版

    一.实验目的 学习重新编译Linux内核,理解.掌握Linux内核和发行版本的区别. 二.实验内容 在Linux操作系统环境下重新编译内核.实验主要内容: A. 查找并且下载一份内核源代码,本实验使用 ...

  8. Ubuntu 10.04 内核2.6.34编译过程记录

    1.安装编译环境 $sudo  apt-get install build-essential kernel-package   libncurses5-dev 2.下载内核源代码 访问 http:/ ...

  9. 编译过程的一些小知识——内部连接与外部连接

    编译过程的一些小知识--内部连接与外部连接 这篇文章是我从我一个高中同学那里抄来的,感觉不错,转载一下! 首先,我们来了解下定义: 内部连接:如果一个名称对编译单元(.cpp)来说是局部的,在链接的时 ...

最新文章

  1. 视频 + PPT | 财富管理转型,券商如何精细化运营?
  2. iOS中去除 Warning警告
  3. 从源码深处体验Spring核心技术--面试中IOC那些鲜为人知的细节
  4. docker之docker-machine用法
  5. SAP SADL和SAP Hybris DTO, 以及SAP C4C的transformation object
  6. HTML5 Canvas中绘制文本
  7. python中在一个脚本调用另一个脚本类中函数变量值
  8. revit插件有哪些常用的?介绍几个常用的revit插件操作简单
  9. k3梅林刷官改变砖_K3 op强刷回官改变砖,TTL救砖也不行,请大神分析下是不是要换内存了...
  10. win7升级Powershell到5.1(for flutter)
  11. mzy git学习,禁用Fast forward的普通合并(六)
  12. 揭秘跨境电商亚马逊店铺最新骗局!!小白做亚马逊店铺如何防止上当受骗?
  13. LOW逼三人组(二)----选择排序算法
  14. IMP-00058: IMP-00000: 未成功终止导入
  15. [逻辑]-- 25匹马赛跑问题
  16. 什么是搜索引擎留痕?
  17. 第一次漏洞分析(暴雷漏洞CVE-2012-1889)
  18. 什么是Sentinel
  19. 物联网专业课程包括linux么,物联网专业是干什么的?
  20. 大卫·鲍伊(David Bowie)在AR中:Planeta如何通过Unity打造杀手级应用

热门文章

  1. java.util.ConcurrentModificationException when interation the list then remove
  2. android 使用xposed安装器
  3. 分析称惠普赶走前任CEO赫德堪比苹果赶走乔布斯
  4. nginx关闭请求处理ngx_http_finalize_request源码分析
  5. linux 建立http连接失败,【linux】http请求建立连接的时候为啥是tcp三次握手,而不是二次或者四次?...
  6. 2018-9-30-C#-从零开始写-SharpDx-应用-画三角
  7. 那些曾让我一脸懵逼的python代码
  8. 盘龙林雷怎么变成鸿蒙,第二百一十三章 鸿蒙掌控者,林雷!
  9. 《Photoshop修饰与合成专业技法》—第1章伪造的抠像:第一部分
  10. 【iOS】Plist-XML-JSON数据解析