历史上的今天
返回首页

历史上的今天

今天是:2024年12月16日(星期一)

正在发生

2020年12月16日 | TQ210——S5PV210 uboot顶层config.mk分析

2020-12-16 来源:eefocus


#

# (C) Copyright 2000-2006

# Wolfgang Denk, DENX Software Engineering, wd@denx.de.

#

# See file CREDITS for list of people who contributed to this

# project.

#

# This program is free software; you can redistribute it and/or

# modify it under the terms of the GNU General Public License as

# published by the Free Software Foundation; either version 2 of

# the License, or (at your option) any later version.

#

# This program is distributed in the hope that it will be useful,

# but WITHOUT ANY WARRANTY; without even the implied warranty of

# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the

# GNU General Public License for more details.

#

# You should have received a copy of the GNU General Public License

# along with this program; if not, write to the Free Software

# Foundation, Inc., 59 Temple Place, Suite 330, Boston,

# MA 02111-1307 USA

#

#########################################################################

# $@  表示目标文件

# $^  表示所有的依赖文件

# $<  表示第一个依赖文件

# $?  表示比目标还要新的依赖文件列表

#########################################################################

# config.mk功能是配置单板信息和编译环境,被Makefile调用

 

 

#########################################################################

# 此脚本在uboot顶层目录。如果目标存放目录不等于源码目录(这里不会执行)

ifneq ($(OBJTREE),$(SRCTREE))

ifeq ($(CURDIR),$(SRCTREE))

dir :=

else

dir := $(subst $(SRCTREE)/,,$(CURDIR))

endif

 

 

obj := $(if $(dir),$(OBJTREE)/$(dir)/,$(OBJTREE)/)

src := $(if $(dir),$(SRCTREE)/$(dir)/,$(SRCTREE)/)

 

 

$(shell mkdir -p $(obj))

# 所以上面的几行都不会执行,会执行下面这个,obj和src为空

else

obj :=

src :=

endif

 

 

# clean the slate ...

# 清楚标志

PLATFORM_RELFLAGS =

PLATFORM_CPPFLAGS =

PLATFORM_LDFLAGS =

 

 

#

# When cross-compiling on NetBSD, we have to define __PPC__ or else we

# will pick up a va_list declaration that is incompatible with the

# actual argument lists emitted by the compiler.

#

# [Tested on NetBSD/i386 1.5 + cross-powerpc-netbsd-1.3]

# ARCH=arm,这段不会执行

ifeq ($(ARCH),ppc)

ifeq ($(CROSS_COMPILE),powerpc-netbsd-)

PLATFORM_CPPFLAGS+= -D__PPC__

endif

ifeq ($(CROSS_COMPILE),powerpc-openbsd-)

PLATFORM_CPPFLAGS+= -D__PPC__

endif

endif

ifeq ($(ARCH),arm)

ifeq ($(CROSS_COMPILE),powerpc-netbsd-)

PLATFORM_CPPFLAGS+= -D__ARM__

endif

ifeq ($(CROSS_COMPILE),powerpc-openbsd-)

PLATFORM_CPPFLAGS+= -D__ARM__

endif

endif

 

 

#########################################################################

 

 

CONFIG_SHELL := $(shell if [ -x "$$BASH" ]; then echo $$BASH;

   else if [ -x /bin/bash ]; then echo /bin/bash;

   else echo sh; fi ; fi)

# 除了darwin-pcc外其他都采用gcc编译器

ifeq ($(HOSTOS)-$(HOSTARCH),darwin-ppc)

HOSTCC = cc

else

HOSTCC = gcc

endif

#########################################################################  

# HOSTCPPFLAGS的值为空,HOSTCFLAGS = -Wall -Wstrict-prototypes -O2   

# -fomit-frame-pointer  

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

HOSTSTRIP = strip

 

 

#########################################################################

#

# Option checker (courtesy linux kernel) to ensure

# only supported compiler options are used

#

#########################################################################  

# cc-option用于检查编译器CC是否支持某选项。将2个选项作为参数传递给cc-option函数,

# 该函数调用CC编译器检查参数1是否支持,若支持则函数返回参数1,

# 否则返回参数2 (因此CC编译器必须支# 持参数1或参数2,若两个都不支持则会编译出错)

# 可以像下面这样调用cc-option函数,并将支持的选项添加到FLAGS中:  

# FLAGS +=$(call cc-option,option1,option2)  

cc-option = $(shell if $(CC) $(CFLAGS) $(1) -S -o /dev/null -xc /dev/null

> /dev/null 2>&1; then echo "$(1)"; else echo "$(2)"; fi ;)

 

 

#

# Include the make variables (CC, etc...)

# 下面一些是定义交叉工具链的集合

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

 

 

#########################################################################

# 加载产生的单板配置文件autoconf.mk和config.mk,均在include目录下  

# config.mk中内容是ARCH CPU BOARD VENDOR SOC5个变量信息  

# autoconf.mk为单板配置宏的集合,打开/关闭 用 y/n表示  

# Load generated board configuration

sinclude $(OBJTREE)/include/autoconf.mk

 

 

ifdef ARCH

sinclude $(TOPDIR)/$(ARCH)_config.mk # include architecture dependend rules

endif

ifdef CPU

sinclude $(TOPDIR)/cpu/$(CPU)/config.mk # include  CPUspecific 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

 

 

#########################################################################

 

 

ifneq (,$(findstring s,$(MAKEFLAGS)))

ARFLAGS = cr

else

ARFLAGS = crv

endif

RELFLAGS= $(PLATFORM_RELFLAGS)

DBGFLAGS= -g # -DDEBUG

OPTFLAGS= -Os #-fomit-frame-pointer

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

OBJCFLAGS += --gap-fill=0xff

 

 

gccincdir := $(shell $(CC) -print-file-name=include)

 

 

CPPFLAGS := $(DBGFLAGS) $(OPTFLAGS) $(RELFLAGS)

-D__KERNEL__

ifneq ($(TEXT_BASE),)

CPPFLAGS += -DTEXT_BASE=$(TEXT_BASE)

endif

 

 

ifneq ($(OBJTREE),$(SRCTREE))

CPPFLAGS += -I$(OBJTREE)/include2 -I$(OBJTREE)/include

endif

 

 

CPPFLAGS += -I$(TOPDIR)/include

CPPFLAGS += -fno-builtin -ffreestanding -nostdinc

-isystem $(gccincdir) -pipe $(PLATFORM_CPPFLAGS)

 

 

# 没有定义BUILD_TAG,执行else分支,赋值CFLAGS 

ifdef BUILD_TAG

CFLAGS := $(CPPFLAGS) -Wall -Wstrict-prototypes

-DBUILD_TAG='"$(BUILD_TAG)"'

else

CFLAGS := $(CPPFLAGS) -Wall -Wstrict-prototypes

endif

 

 

CFLAGS += $(call cc-option,-fno-stack-protector)

 

 

# avoid trigraph warnings while parsing pci.h (produced by NIOS gcc-2.9)

# this option have to be placed behind -Wall -- that's why it is here

# 不执行

ifeq ($(ARCH),nios)

ifeq ($(findstring 2.9,$(shell $(CC) --version)),2.9)

CFLAGS := $(CPPFLAGS) -Wall -Wno-trigraphs

endif

endif

 

 

# $(CPPFLAGS) sets -g, which causes gcc to pass a suitable -g

# option to the assembler.

# CPPFLAGS设置了-g参数

AFLAGS_DEBUG :=

 

 

# turn jbsr into jsr for m68k

ifeq ($(ARCH),m68k)

ifeq ($(findstring 3.4,$(shell $(CC) --version)),3.4)

AFLAGS_DEBUG := -Wa,-gstabs,-S

endif

endif

 

 

AFLAGS := $(AFLAGS_DEBUG) -D__ASSEMBLY__ $(CPPFLAGS)

 

 

# 设置uboot的链接选项

LDFLAGS += -Bstatic -T $(LDSCRIPT) $(PLATFORM_LDFLAGS)

ifneq ($(TEXT_BASE),)

LDFLAGS += -Ttext $(TEXT_BASE)

endif

 

 

# Location of a usable BFD library, where we define "usable" as

# "built for ${HOST}, supports ${TARGET}".  Sensible values are

# - When cross-compiling: the root of the cross-environment

# - Linux/ppc (native): /usr

# - NetBSD/ppc (native): you lose ... (must extract these from the

#   binutils build directory, plus the native and U-Boot include

#   files don't like each other)

#

# So far, this is used only by tools/gdb/Makefile.

# 不是arm架构,不执行

ifeq ($(HOSTOS)-$(HOSTARCH),darwin-ppc)

BFD_ROOT_DIR = /usr/local/tools

else

ifeq ($(HOSTARCH),$(ARCH))

# native

BFD_ROOT_DIR = /usr

else

#BFD_ROOT_DIR = /LinuxPPC/CDK# Linux/i386

#BFD_ROOT_DIR = /usr/pkg/cross# NetBSD/i386

BFD_ROOT_DIR = /opt/powerpc

endif

endif

 

 

ifeq ($(PCI_CLOCK),PCI_66M)

CFLAGS := $(CFLAGS) -DPCI_66M

endif

 

 

#########################################################################

# 输出这些信息为环境变量

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

 

 

#########################################################################

# 指定隐含的编译规则,例如:根据以上的定义,以“.s”结尾的目标文件将根据第一条规则由同名但后  

# 缀为“.S”的源文件来生成,若不存在“.S”结尾的同名文件则根据最后一条规则由同名的“.c”文件生  

# 成。  

ifndef REMOTE_BUILD

 

 

%.s: %.S

$(CPP) $(AFLAGS) -o $@ $<

%.o: %.S

$(CC) $(AFLAGS) -c -o $@ $<

%.o: %.c

$(CC) $(CFLAGS) -c -o $@ $<

 

 

else

 

 

$(obj)%.s: %.S

$(CPP) $(AFLAGS) -o $@ $<

$(obj)%.o: %.S

$(CC) $(AFLAGS) -c -o $@ $<

$(obj)%.o: %.c

$(CC) $(CFLAGS) -c -o $@ $<

endif

 

 

#########################################################################


推荐阅读

史海拾趣

Fischer Connectors公司的发展小趣事

Fischer Connectors公司在电子行业中的五个发展故事

故事一:创立与初期发展

Fischer Connectors的故事始于1954年,由真空技术专家Walter Werner Fischer在瑞士沃州的莫尔日创立。他凭借对技术的热爱和执着,开发出了世界上第一个高品质密封连接器,专为工业应用而设计。这一创新产品迅速赢得了市场的认可,为公司的发展奠定了坚实的基础。在随后的几年里,Fischer Connectors不断优化产品,并于1962年注册了推拉锁定系统的国际专利,进一步巩固了其在连接器行业的领先地位。

故事二:全球扩张与国际合作

随着业务的不断增长,Fischer Connectors开始积极寻求全球扩张的机会。1988年,公司在英国成立了第一家子公司,标志着其国际商业活动的正式开始。此后,Fischer Connectors相继在欧洲的德国、意大利、法国以及美国等地开设了子公司,形成了全球性的生产和服务网络。这些子公司不仅为当地市场提供了高质量的连接器产品,还促进了Fischer Connectors在全球范围内的技术创新和市场拓展。

故事三:技术创新与产品线扩展

Fischer Connectors始终将技术创新作为企业发展的核心驱动力。进入21世纪后,公司推出了一系列具有创新性的连接器产品,如Fischer Core系列塑料连接器、AluLite™超轻铝连接器以及Fischer UltiMate™系列超坚固连接器等。这些产品不仅满足了不同行业对连接器性能的多样化需求,还推动了整个电子行业的技术进步。同时,Fischer Connectors还不断扩展其产品线,涵盖了多极低电压连接器、同轴高电压连接器等多个领域,进一步巩固了其在连接器市场的领先地位。

故事四:应对行业挑战与定制化解决方案

随着电子行业的快速发展,连接器和线缆系统的应用环境越来越复杂多样。Fischer Connectors凭借其在技术、质量和服务方面的优势,积极应对行业挑战,为客户提供定制化的解决方案。公司拥有一支专业的研发团队和客户服务团队,能够深入了解客户的实际需求,量身定制出最适合客户应用方案的连接器与线缆系统。这种以客户为中心的服务理念赢得了广大客户的信赖和支持。

故事五:数字化转型与可持续发展

近年来,Fischer Connectors积极响应数字化转型的浪潮,利用先进的技术手段提升生产效率和产品质量。公司投入大量资源建设智能化生产线和数字化管理系统,实现了从原材料采购、生产加工到成品出库的全流程信息化管理。同时,Fischer Connectors还注重可持续发展,致力于开发环保型连接器和线缆系统,减少对环境的影响。这些努力不仅提升了公司的竞争力,还为公司赢得了更多的社会认可和赞誉。

Etco Inc公司的发展小趣事

进入21世纪后,Etco Inc公司意识到全球化趋势的不可逆转。为了拓展国际市场,公司决定实施全球化战略。首先,公司在美国本土之外建立了多个生产基地和研发中心,以便更好地满足全球客户的需求。其次,Etco加强了与国际客户的合作与交流,积极参与国际展览和研讨会,提高了品牌知名度和影响力。这些举措使Etco在全球电子连接器市场中的份额不断攀升。

Continental Industries公司的发展小趣事

在电子行业的发展过程中,Continental Industries注重与其他企业的合作与共赢。公司与多家知名企业建立了长期稳定的合作关系,共同开展技术研发和产品创新。通过资源共享和优势互补,双方实现了互利共赢,共同推动了电子行业的进步。

DATATRONICS公司的发展小趣事

DATATRONICS公司自成立以来,一直致力于电子技术的研发与创新。某年,公司研发团队成功突破了一项关键技术瓶颈,开发出了一款高效能的数据处理芯片。这款芯片以其卓越的性能和稳定性,迅速获得了市场的认可。DATATRONICS借此机会,进一步扩大了产品线,提高了市场竞争力。

Helium公司的发展小趣事

2017年,随着区块链技术的兴起,Helium团队看到了新的机遇。他们意识到区块链的透明性和自确认性可以为物联网网络的建设带来革命性变化。于是,Helium决定将网络建设“去中心化”,并借助区块链技术重新定义激励机制。这一决策标志着Helium从单纯的物联网项目转变为融合区块链技术的创新企业。通过去中心化的方式,Helium降低了网络建设和维护的成本,加速了网络覆盖的速度,为物联网设备提供了更加便捷和经济的连接方案。

GTK UK Ltd公司的发展小趣事
太阳光强度变化、云层遮挡、大气湍流等环境因素都可能对光电传感器产生影响,导致检测误差。

问答坊 | AI 解惑

很棒的示波器等效采样解说

本帖最后由 paulhyde 于 2014-9-15 03:49 编辑 很棒的示波器等效采样解说~  …

查看全部问答>

蓝牙协议现在一般应用在什么产品上? (好像用蓝牙协议的不多)

蓝牙协议现在一般应用在什么产品上?  (好像用蓝牙协议的不多) …

查看全部问答>

如何让系统不自动弹出 软键盘

如文件浏览 地址栏获得输入焦点时会自动弹出软键盘,如何去掉? 因为在需要的时候我会用程序去调用软键盘,所以不能禁用软键盘。…

查看全部问答>

6410 2d加速的BitBLt运行不正常。弄过的兄弟给点建议

在linux 2.6.33上弄的,只想实现最简单的从一块区域拷贝到另外一块区域显示的功能。 将(linux 2.6.28的)中g2d部分的代码移植到了video s3c-fb中,通过io_ctrl实现的。但移植的代码更本不能使用。 然后自己按照手册,配置的寄存器。 从FIFO sta ...…

查看全部问答>

zlg向我推荐LM32,我还是决定采用STM32

                                 此帖内容已经删除,删除原因请看12楼——香水城。 …

查看全部问答>

不先擦除就对flash中的一段写入一串用户存储数据,行吗?

我试了下,不执行擦除操作,反复在一段空间里写入不同的数,后面的数能覆盖前面的数,这不就行了吗?为什么要先擦除再写,何况擦除的时间那么长,影响程序实时性。 有知道的大虾指教下。我写入的地址段是F400H。…

查看全部问答>

大赛给你印象最深的事情是什么?

本帖最后由 paulhyde 于 2014-9-15 03:57 编辑 大赛给你印象最深的事情是什么? 是老师的帮助?是同学之间的相互合作? 是自己的不懈努力,还是四天三夜就睡了十几个小时?  ······  …

查看全部问答>

LM3S811读取ADXL345

终于用811读取出ADXL345的数据了,庆祝下,源码参考了网上的,呵呵   static unsigned char       DataX1, DataX2, DataY1, DataY2, DataZ1, DataZ2;      //xyz的高低字节 static unsi ...…

查看全部问答>

基于MSP430的外接外部闪存AT46DB16D编程,用的上的可以下载看看!!

找了好久的这个芯片编程,希望有用的上的可以下载看看。。。。。。…

查看全部问答>

raw-os api 手册

附件是raw-os的api 手册,使用raw-os必备。 …

查看全部问答>