首先是一些关于版本的定义,
然后编译的到 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