linux学习(十五)uboot中的Makefile分析

首先是一些关于版本的定义,
然后编译的到 include/version_autogenerated.h 文件, 从autogenerated 字面意思都可以看出这是自动得到的.
打开这个version_autogenerated.h 里面是一个宏定义
#define U_BOOT_VERSION “U-Boot 1.3.4”
就是关于版本号信息的一个字符串宏定义.

然后有关sed命令

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/)

-e 表示在一行执行多个sed命令, s表示用后面的信息代替前面的信息, .是一个通配符
例如.

sed -s/i.86/i386/ 其实就是就是讲最原先的 shell uname -m命令打印出的的值进行与i.86
匹配, (shell uname -m 会打印出当前电脑主机的相关信息. ) 如果匹配上了, 就将后面的i386代替, 前面的
i.86.
HOSTARCH: HOST 主机 ARCH architecture 所以i386就相当于主机架构.

HOSTOS := $(shell uname -s | tr ‘[:upper:]’ ‘[:lower:]’ |
sed -e ‘s/(cygwin).*/cygwin/’)

扩展知识:字符串大小写替换,
小写替换大写
echo “hello world” | tr ‘[a-z]’ ‘[A-Z]’
echo “hello world” | tr ‘[:lower:]’ ‘[:upper:]’
大写替换小写
echo “hello world” | tr ‘[A-Z]’ ‘[a-z]’
echo “HELLO WORLD” | tr ‘[:upper:]’ ‘[:lower:]’
大小写互换
echo “Hello World” | tr ‘[a-zA-Z]’ ‘[A-Za-z]’

在编译uboot时, 可以指定输出路径进行编译, 在
56行到76行, 注释部分有提到相关方法.
然后再看README
1. Add O= to the make command line invocations:

make O=/tmp/build distclean
make O=/tmp/build NAME_config
make O=/tmp/build all

2. Set environment variable BUILD_DIR to point to the desired location:

export BUILD_DIR=/tmp/build
make distclean
make NAME_config
make all

也提到了具体实现的方法, 就是先清除 然后配置, 最后再make 编译,

OBJTREE: 目标根目录, 就是编译寄出来的.o文件存放的路径
SRCTREE: 源文件路径
TOPDIR: 顶层目录

OBJTREE 和 SRCTREE 在默认编译下, 相等, 但是如果在指定路径编译下, 进行编译, 那么OBJTREE与SRCTREE不相等,

include $(obj)include/config.mk 这个文件不是源码自带,
是要在配置过程中(make x210_sd_config ) 才会产生,
生成后,里面内容是
ARCH = arm
CPU = s5pc11x
BOARD = x210
VENDOR = samsung
SOC = s5pc110

这几个环境变量配置是在MKCONFIG脚本中配置的.

CROSS_COMPILE 这个环境变量是交叉编译工具链的前缀, 后面可以给他赋值成工具链的全路径, 这样, 程序在执行编译的时候,直接到指定路径调用工具,即可进行编译链接,

x210_sd_config :	unconfig
	@$(MKCONFIG) $(@:_config=) arm s5pc11x x210 samsung s5pc110
	@echo "TEXT_BASE = 0xc3e00000" > $(obj)board/samsung/x210/config.mk

第二句 的 @echo … 是在config.mk 文件中添加 TEXT_BASE = 0xc3e00000
第一句 给MKCONFIG 脚本传入6个参数 ,分别是
$1 = $(@:_config=)
$2 = arm
$3 = s5pc11x
$4 = x210
$5 = samsung
$6 = s5pc110
重点看 第一个参数 , 首先是 " $@" 表示目标, 就是x210_sd_config 然后是 : 意思就是将 _config用空来代替,
那么 对目标进行加工之后 得到的第一个参数就是x210_sd

exit 1 // 表示返回1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值