U-Boot Makefile 分析
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”。H“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”。
cygwin 是一个在 windows 平台上运行的 unix 模拟环境.
(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 变量。
评论0
最新资源