Mekefile中所做的事情

1:经过之前的分析我们知道Makefile主要做的事情有:

(1):首先配置makefile

make x210_sd_config

配置时实际上执行的是:./mkconfig xd_210 arm s5pc11x x210 samsung s5pc110

./mkconfig 为一个shell脚本;

xd_210 arm s5pc11x x210 samsung s5pc110为6个参数传入mkconfig脚本中;

在把"TEXT_BASE = 0xc3e00000" 写入board/samsung/x210/config.mk文件中;

(2):mkcofig脚本做的事情:

生成4个连接文件,分别为:

asm文件连接到asm-arm

reg.h文件连接到s5pc110.h

asm-arm/arch文件连接到arch-s5pc11x

arm-arm/proc文件连接到proc-armv

输出5个变量到config.mk文件中

ARCH   = arm

CPU    = s5pc11x

BOARD  = x210

VENDOR = samsung

SOC    = s5pc110

最后创建config.h文件夹;

(3)配置以后就可以进入主makefile文件中了

主makefile中做的事情:

a:设置了HOSTARCH HOSTOS两个环境变量 比如说用的armcpu,;linux系统则

HOSTARCH = arm

HOSTOS = linux

b:可以设置静默编译:make -s即可

c:设置生成uboot.bin的目录 make clean、 x210_sd_config 以及make 是都要加上 O=/XX/XX

d:设置了一个环境变量 REMOTE_BUILD

e:输出ARCH CPU BOARD VENDOR SOC 5个环境变量

f:设置交叉编译工具链:CROSS_COMPILE = /usr/local/arm/arm-2009q3/bin/arm-none-linux-gnueabi-

g:执行/topdir/config.mk文件:配置交叉工具链

HOSTCC = gcc

HOSTCFLAGS = -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer
HOSTSTRIP = strip

AS = $(CROSS_COMPILE)as
LD = $(CROSS_COMPILE)ld
CC = $(CROSS_COMPILE)gcc
CPP = $(CC) -E
AR = $(CROSS_COMPILE)ar
NM = $(CROSS_COMPILE)nm
LDR = $(CROSS_COMPILE)ldr
STRIP = $(CROSS_COMPILE)strip
OBJCOPY = $(CROSS_COMPILE)objcopy
OBJDUMP = $(CROSS_COMPILE)objdump
RANLIB = $(CROSS_COMPILE)RANLIB

export CONFIG_SHELL HPATH HOSTCC HOSTCFLAGS CROSS_COMPILE \
AS LD CC CPP AR NM STRIP OBJCOPY OBJDUMP \
MAKE
export TEXT_BASE PLATFORM_CPPFLAGS PLATFORM_RELFLAGS CPPFLAGS CFLAGS AFLAGS

等等。。。。。。

BOARDDIR = $(VENDOR)/$(BOARD)

h:设置目标、依赖、规则

OBJS  = cpu/$(CPU)/start.o

LIBS:个目录下的子makefile 库文件

LIBBOARD:board/samsung/x210/ 目录下的makefile

SUBDIRS = tools \
examples \
api_examples

api 工具 实例

$(obj)u-boot: depend $(SUBDIRS) $(OBJS) $(LIBBOARD) $(LIBS) $(LDSCRIPT)

最后生成 autocofig.mk、 autocofig.mk.dep两个文件;

--------------------------在结束的位置说一下uboot中的连接脚本-------------------------------

$(obj)u-boot:        depend $(SUBDIRS) $(OBJS) $(LIBBOARD) $(LIBS) $(LDSCRIPT)
        UNDEF_SYM=`$(OBJDUMP) -x $(LIBBOARD) $(LIBS) |         sed  -n -e ‘s/.*\($(SYM_PREFIX)__u_boot_cmd_.*\)/-u\1/p‘|sort|uniq`;        cd $(LNDIR) && $(LD) $(LDFLAGS) $$UNDEF_SYM $(__OBJS)             --start-group $(__LIBS) --end-group $(PLATFORM_LIBS)             -Map u-boot.map -o u-boot
$(LD) $(LDFLAGS)
$(LDFLAGS)变量在/topdir/config.mk中

LDFLAGS += -Bstatic -T $(LDSCRIPT) $(PLATFORM_LDFLAGS)
ifneq ($(TEXT_BASE),)
LDFLAGS += -Ttext $(TEXT_BASE)
endif

$(LDSCRIPT) 这个变量为连接脚本变量

ifndef LDSCRIPT
#LDSCRIPT := $(TOPDIR)/board/$(BOARDDIR)/u-boot.lds.debug
ifeq ($(CONFIG_NAND_U_BOOT),y)
LDSCRIPT := $(TOPDIR)/board/$(BOARDDIR)/u-boot-nand.lds
else
LDSCRIPT := $(TOPDIR)/board/$(BOARDDIR)/u-boot.lds
endif
endif

LDSCRIPT := $(TOPDIR)/board/$(BOARDDIR)/u-boot.lds 连接脚本在/board/samsung/x210/u-boot.lds

时间: 2024-10-12 08:11:04

Mekefile中所做的事情的相关文章

10 件在 PHP 7 中不要做的事情

1. 不要使用mysql_函数 这一天终于来了,从此你不仅仅“不应该”使用mysql_函数.PHP 7 已经把它们从核心中全部移除了,也就是说你需要迁移到好得多的mysqli_函数,或者更灵活的 PDO 实现. 2. 不要编写垃圾代码 这一条可能易于理解,但是会变得越来越重要,因为 PHP 7 的速度提升可能会隐藏你的一些问题.不要仅仅满足于你的站点速度,因为迁移到 PHP 7 才让它变快. 为了理解速度有多重要,以及如何把事情做得更好,请看一看我们的文章速度优化入门指南. 作为一名开发者,你应

10件在PHP7中不要做的事情

1. 不要使用mysql_函数 这一天终于来了,从此你不仅仅“不应该”使用mysql_函数.PHP 7 已经把它们从核心中全部移除了,也就是说你需要迁移到好得多的mysqli_函数,或者更灵活的 PDO 实现. 2. 不要编写垃圾代码 这一条可能易于理解,但是会变得越来越重要,因为 PHP 7 的速度提升可能会隐藏你的一些问题.不要仅仅满足于你的站点速度,因为迁移到 PHP 7 才让它变快. 为了理解速度有多重要,以及如何把事情做得更好,请看一看我们的文章速度优化入门指南. 作为一名开发者,你应

mysql中不可不做的事情

写在前面的话:总是在灾难发生后,才想起容灾的重要性:总是在吃过亏后,才记得有人提醒过 1.不在数据库做运算:cpu计算务必移至业务层2.控制单表数据量:单表记录控制在1000w3.控制列数量:字段数控制在20以内4.平衡范式与冗余:为提高效率牺牲范式设计,冗余数据5.拒绝3B:拒绝大sql,大事物,大批量 数据表设计 6.用好数值类型 tinyint(1Byte) smallint(2Byte) mediumint(3Byte) int(4Byte) bigint(8Byte) bad case

《领导梯队》:4星。企业中六个层级的领导的必知必会和必须不能做的事情。

书不错,根据许多企业的情况总结出来的,作者们有企业家的顾问经验. 总体内容是每一次晋级都是思路的转换,每一层领导都需要转换思路才能做好,每一层领导都容易犯的错误是事必躬亲. 作者列出六个层级的领导:经理.总监.事业部副总经理.事业部总经理.集团高管.CEO,并且给出每一个层级具体需要做的事情.不应该做的事情. 书中的6个层级基本上应该是在超大型公司中才能看到的.不过作者也说了,重要的是思路而不是生搬硬套. 小缺陷是英文版成书于2000年,到现在近20年了,像<基业长青>一样,书中举出的好公司比

迭代器就是重复地做一些事情,可以简单的理解为循环,在python中实现了__iter__方法的对象是可迭代的,实现了next()方法的对象是迭代器,这样说起来有

迭代器就是重复地做一些事情,可以简单的理解为循环,在python中实现了__iter__方法的对象是可迭代的,实现了next()方法的对象是迭代器,这样说起来有点拗口,实际上要想让一个迭代器工作,至少要实现__iter__方法和next方法.很多时候使用迭代器完成的工作使用列表也可以完成,但是如果有很多值列表就会占用太多的内存,而且使用迭代器也让我们的程序更加通用.优雅.pythonic.下边是一个例子,从里边你会感受到不用列表而用迭代器的原因. #!/usr/bin/env python #c

前苹果副总裁:如果你做的事情毫不费力,就是在浪费时间

Heidi Roizen女士一度是硅谷人人争相学习的典范.她曾创办自己的公司并管理了 14 年之久.后来,她担任苹果公司主管开发者关系的高级副总裁.现在,她是 DFJ Venture 的一位风投家,她还在斯坦福主讲一门名叫“企业家精神”的课程.她几乎认识硅谷的所有重要人物并且灵活地运用着自己的影响力.哈佛商学院甚至还有专门关于她的案例. 以下是 Roizen 提出的八条原则,她正是利用这些原则来指导自己的工作.建立起广泛的人际网络并不断推动创新.这些过来人的经验对于新入行者弥足珍贵,可以作为职业

《极客头条》精选:每天每周每月每年程序员该做的事情

程序员每天该做的事 1.总结自己一天任务的完成情况 最好的方式是写工作日志,把自己今天完成了什么事情,遇见了什么问题都记录下来,日后翻看好处多多 2.考虑自己明天应该做的主要工作 把明天要做的事情列出来,并按照优先级排列,第二天应该把自己效率最高的时间分配给最重要的工作 3.考虑自己一天工作中失误的地方,并想出避免下一次再犯的方法出错不要紧,最重要的是不要重复犯相同的错误,那是愚蠢的 4.考虑自己一天工作完成的质量和效率能否还能提高 一天只提高1%,365天你的效率就能提高多少倍你知道吗?(1+

【Android开发-1】必做的事情,android开发环境搭建

前言:互联网移动端现在发展的速度越来越快了,各种App应用软件和手游的崛起,把移动端弄的丰富多彩:心情一激动,头脑一发热,就开始看视频.看书学习了.记得11年的时候有学习了下Android的开发,但是只是基础的学习了下,没认真深入学习.这次自己决定认真学习下,并用博客记录下,见证自己成长的过程. 一.准备工作 1.下载最新版jdk:http://www.oracle.com/technetwork/java/javase/downloads/index.html 2.下载Eclipse,选择Ec

Centos7最小化安装之后,需要做那些事情?

背景:最近,开发部需要用到linux开发环境,指定要最新版本的Centos, 好吧.我从官网下载了Centos7.2的镜像,采用最小化安装模式,安装之后我们要做那些事情呢? 下面详述. 版本:Centos 7.2.1511 注:本文红色部分是需要修改的内容,特殊标注出来. 一 . 配置IP地址,接通网络.网络一通,万事OK TYPE=EthernetBOOTPROTO=staticDEFROUTE=yesPEERDNS=yesPEERROUTES=yesIPV4_FAILURE_FATAL=no