uboot编译工程详解

U-Boot编译命令
对于mini2440开发板,编译U-Boot需要执行如下的命令:
$ make mini2440_config
$ make all
使用上面的命令编译U-Boot,编译生成的所有文件都保存在源代码目录中。为了保持源代码目录的干净,可以使用如下命令将编译生成的文件输出到一个外部目录,而不是在源代码目录中,下面的2种方法都将编译生成的文件输出到 /tmp/build目录:
$ export BUILD_DIR=/tmp/build
$ make mini2440_config
$ make all

$ make O=/tmp/build mini2440_config (注意是字母O,而不是数字0)
$ make all

为了简化分析过程,方便读者理解,这里主要针对第一种编译方式(目标输出到源代码所在目录)进行分析。
2.1.2 U-Boot配置、编译、连接过程
U-Boot开头有一些跟主机软硬件环境相关的代码,在每次执行make命令时这些代码都被执行一次。

1. U-Boot 配置过程
(1)定义主机系统架构
HOSTARCH := $(shell uname -m | \
sed -e s/i.86/i386/ \
-e s/sun4u/sparc64/ \
-e s/arm.*/arm/ \
-e s/sa110/arm/ \
-e s/powerpc/ppc/ \
-e s/ppc64/ppc/ \
-e s/macppc/ppc/)
“sed –e”表示后面跟的是一串命令脚本,而表达式“s/abc/def/”表示要从标准输入中,查找到内容为“abc”的,然后替换成“def”。其中“abc”表达式用可以使用“.”作为通配符。
命令“uname –m”将输出主机CPU的体系架构类型。作者的电脑使用Intel Core2系列的CPU,因此“uname –m”输出“i686”。 “i686”可以匹配命令“sed -e s/i.86/i386/”中的“i.86”,因此在作者的机器上执行Makefile,HOSTARCH将被设置成“i386” 。
(2)定义主机操作系统类型
HOSTOS := $(shell uname -s | tr [:upper:] [:lower:] | \
sed -e s/\(cygwin\).*/cygwin/)
“uname –s”输出主机内核名字,作者使用Linux发行版Ubuntu9.10,因此“uname –s”结果是“Linux”。“tr [:upper:] [:lower:]”作用是将标准输入中的所有大写字母转换为响应的小写字母。因此执行结果是将HOSTOS 设置为“linux”。
(3)定义执行shell脚本的shell
# Set shell to bash if possible, otherwise fall back to sh
SHELL := $(shell if [ -x "$$BASH" ]; then echo $$BASH; \
else if [ -x /bin/bash ]; then echo /bin/bash; \
else echo sh; fi; fi)
"$$BASH"的作用实质上是生成了字符串“$BASH”(前一个$号的作用是指明第二个$是普通的字符)。若执行当前Makefile的shell中定义了“$BASH”环境变量,且文件“$BASH”是可执行文件,则SHELL的值为“$BASH”。否则,若“/bin/bash”是可执行文件,则SHELL值为“/bin/bash”。若以上两条都不成立,则将“sh”赋值给SHELL变量。
由于作者的机器安装了bash shell,且shell默认环境变量中定义了“$BASH”,因此SHELL 被设置为$BASH 。
(4)设定编译输出目录
ifdef O
ifeq ("$(origin O)", "command line")
BUILD_DIR := $(O)
endif
endif
函数$( origin, variable) 输出的结果是一个字符串,输出结果由变量variable定义的方式决定,若variable在命令行中定义过,则origin函数返回值为"command line"。假若在命令行中执行了“export BUILD_DIR=/tmp/build”的命令,则“$(origin O)”值为“command line”,而BUILD_DIR被设置为“/tmp/build”。
ifneq ($(BUILD_DIR),)
saved-output := $(BUILD_DIR)

# Attempt to create a output directory.
$(shell [ -d ${BUILD_DIR} ] || mkdir -p ${BUILD_DIR})
若${BUILD_DIR}表示的目录没有定义,则创建该目录。
# Verify if it was successful.
BUILD_DIR := $(shell cd $(BUILD_DIR) && /bin/pwd)
$(if $(BUILD_DIR),,$(error output directory "$(saved-output)" does not exist))
endif # ifneq ($(BUILD_DIR),)
若$(BUILD_DIR)为空,则将其赋值为当前目录路径(源代码目录)。并检查$(BUILD_DIR)目录是否存在。
OBJTREE := $(if $(BUILD_DIR),$(BUILD_DIR),$(CURDIR))
SRCTREE := $(CURDIR)
TOPDIR := $(SRCTREE)
LNDIR := $(OBJTREE)
… …
MKCONFIG := $(SRCTREE)/mkconfig
… …
ifneq ($(OBJTREE),$(SRCTREE))
obj := $(OBJTREE)/
src := $(SRCTREE)/
else
obj :=
src :=
endif
CURDIR变量指示Make当前的工作目录,由于当前Make在U-Boot顶层目录执行Makefile,因此CURDIR此时就是U-Boot顶层目录。
执行完上面的代码后, SRCTREE,src变量就是U-Boot代码顶层目录,而OBJTREE,obj变量就是输出目录,若没有定义BUILD_DIR环境变量,则SRCTREE,src变量与OBJTREE,obj变量都是U-Boot源代码目录。而MKCONFIG则表示U-Boot根目录下的mkconfig脚本。
2. make mini2440_config命令执行过程
下面分析命令“make mini2440_config”执行过程,为了简化分析过程这里主要分析将编译目标输出到源代码目录的情况。
喜欢阅读
  • 绝色无双,毒医宠妃

    绝色无双,毒医宠妃

    她,痴傻了十三年,贵为相府嫡女却连个姓氏都没有,自从母亲离世她便被丢在偏远的西院,那个所谓的父亲不闻不问,所谓的姐妹肆意打骂,一朝重生,她取名赢婳,斗庶妹,治庶母,整家规,她倒要让她们看看这秦家到底是谁做主!现代的金牌法医穿越到古代,究竟会搅起怎样一场风波?

  • 亿万富豪掌门人

    亿万富豪掌门人

    好了,我不装了,摊牌了。受尽白眼的江帆,得知自己是亿万富豪掌门人,自开始走上了人生巅峰!出任CEO?迎娶白富美?NO!败家就完事了,法拉利新款?买!阿玛尼新款?买!价值百万百翡达名表?买!江帆:钱不是万能的,这句话是真的废话。

  • 相府贵女宅斗日常

    相府贵女宅斗日常

    上一世,她错爱渣男,被利用,被欺骗,最后被抛弃,视如弃履,最后连死也不能瞑目。临终之前,她满怀恨意,见到了自己的师父,用一生的记忆换取第二次的重生。再一次回到十三岁,遇到了前世心心暮暮的世子,同样翩翩如玉的师父,那些误会,错过,都有机会重新来过。她……又该如何抉择呢?“倘若再来一次……我一定不会再放手了。”

  • 旧爱难挡

    旧爱难挡

    五岁的小宝从未和自己的爸爸一起吃过团圆饭,更不用提在一起过生日,可是这一天,自己的爸爸来到了家里,并且亲自下厨为自己做饭,为自己庆生,这一切年龄很小的小宝并不知道发生了什么,他只觉得有爸爸的感觉真好,但是对于他的妈妈孙悦,却意味着一段新的生活将要来了

  • 捡个皇帝做爹爹

    捡个皇帝做爹爹

    穿越到《反派BOSS是我爹》书里头一个快死的小乞丐也就算了,还得了个金手指系统,本以为可以伸手一指江山,结果却——万物皆可献祭,她献祭得连条裤子都不剩,却只换来可怜的丁点东东,无奈,她只得自己努力当大佬。抱住反派BOSS爹爹:“爹啊,我要钱,我要好多好多的钱。”搂着死而复活的娘亲:“娘啊,原来咱们才是一宫的,女儿罩着你。”捆住逆天的男主勾勾缠:“你是我的,整个天下,整个九州都是我的。”【你好不要脸!】系统凉凉道。“滚!”

  • 魔道至强

    魔道至强

    你……混蛋!那是我向往的目标!你……无耻!那是我的座右铭!你……流氓!我正在做一个合格的流氓!

  • 撒旦老公赖上门

    撒旦老公赖上门

    楼主老妈只是老爸的情人,而且很早就去世。老爸虽然将她接回家,可是后妈和同父异母的姐姐却看她不顺眼,从小将她随意打骂!楼主一直在想办法逃离这个家,却突然得知他们要让她嫁给一个陌生男人换钱……

  • 胜邪天下,绝世质子妃

    胜邪天下,绝世质子妃

    她是现代隐门的修炼天才,她是天地混元之灵的灵魂,她是看淡世间万物的笑面狐狸,她是杀人不眨眼偶尔还有些恶趣味的胜邪,她是宫止的一生所爱。胜邪穿越了,成了个只有十岁的乡野萝莉,然而她怎么也没想到她在无意间救下的两个小豆丁竟然会黏上她,行,既然捡到了就养着吧,结果养着养着养不见了是怎么回事?没关系,既然不见了那就找吧。只是十年后的再次相遇,他们的身份已经发生了天翻地覆的变化,胜邪淡然一笑,一手玄月针受人敬仰,一间玉阁令人畏惧,一群美人使人羡慕,无论到了何地她都是不会让自己吃亏的老狐狸。而他,这一生的夙愿便是守着这个点亮他光芒的女子,这个愿意与他一生一世长厮守的女子。

  • 猜你喜欢
  • uboot详解
  • uboot移植详解
  • uboot命令详解
  • uboot源码详解
  • uboot makefile详解
  • uboot编译
  • uboot编译过程
  • uboot编译配置文件
  • uboot编译环境
  • uboot编译配置
  • 热门推荐
  • dance with me 松田岳
  • element ie11
  • 心电监护pi是什么意思
  • 南开各省招生人数
  • 禁绝边境线主唱
  • ltunes代码是什么
  • xp64位系统在那下载
  • ios有pc模拟器吗
  • 芽森滴abp115磁力
  • 中国的 翻译china
  • whip foam什么牌子
  • unturned电磁炮id
  • nba2k17键盘切换球队
  • 松下dvx200mc电源
  • 动漫人物姿势素材
  • 炙莳韰99作品集百度云
  • 新容规压力容器分类
  • docker版本变化
  • 岛津uv3600使用说明书
  • 韩国服装网站naning9
  • All Right Reserved 爱说篇