没有合适的资源?快使用搜索试试~ 我知道了~
# 在common.h的开头便包含了include <config.h>也就是include <configs/100ask24x0.h>2.uboot编译流程
资源详情
资源评论
资源推荐
uboot 配置和编译流程分析 2016-09-13
精简过的 u-boot 代码下载:https://github.com/xfqjklw/uboot_lite_jz2440.git
uboot 编译过程分析主要从顶层的 makefile 开始下手,uboot 编译主要分为两个步
骤:配置和编译。
1.uboot 配置流程
1.1 配置方法
配置命令:make 100ask24x0_config O=obj
100ask24x0_config 代表配置名称。
O=obj 表示编译的中间文件和结果都放在 obj 目录下,obj 目录会自动创建。
顶层 MAKEFILE 中和配置命令相关代码和注释如下
ifdef O
ifeq ("$(origin O)", "command line")
BUILD_DIR := $(O)
endif
endif
#如果 make 的时候有 O=obj 选项,则$(origin O)结果为 command line,这个时候
BUILD_DIR 的值为 obj
OBJTREE := $(if $(BUILD_DIR),$(BUILD_DIR),$(CURDIR))
SRCTREE := $(CURDIR)
MKCONFIG := $(SRCTREE)/mkconfig
unconfig:
@rm -f $(obj)include/config.h $(obj)include/config.mk \
$(obj)board/*/config.tmp $(obj)board/*/*/config.tmp
#配置之前先删除上次配置产生的文件。
100ask24x0_config : unconfig
@$(MKCONFIG) $(@:_config=) arm arm920t 100ask24x0 NULL s3c24x0
#$(MKCONFIG)为根目录下的 mkconfig 脚本
#$(@:_config=)表示将 100ask24x0_config 中的_config 去掉
#等效为./mkconfig 100ask24x0 arm arm920t 100ask24x0 NULL s3c24x0
1.2 mkconfig 脚本分析
uboot 配置的核心脚本为顶层目录下的 mkconfig 脚本,mkconfig 脚本的作用如下:
创建平台/开发板相关头文件的链接
创建 config.mk 和 config.h 配置文件
MKCONFIG 相关代码和注释如下
APPEND=no # Default: Create new config file
BOARD_NAME="" # Name to print in make output
while [ $# -gt 0 ] ; do
case "$1" in
--) shift ; break ;;
-a) shift ; APPEND=yes ;;
-n) shift ; BOARD_NAME="${1%%_config}" ; shift ;;
*) break ;;
esac
done
# $#代表 mkconfig 执行时参数个数
# $1 代表 mkconfig 第一个参数
# shift:删除掉第一个参数,将第二参数变成第一个
# -gt 表示大于
# 这段代码意思 检查参数中,有无-a -n --这样的参数,没有的话直接 break
# 其中
# -a 表示 Append to existing config file,默认是 Create new config file
# -n 代表取得类似 xxxxx_config 参数的 xxxxx 内容
[ "${BOARD_NAME}" ] || BOARD_NAME="$1"
#["${BOARD_NAME}"]表示一个条件,BOARD_NAME != NULL, ||表示如果 条件为假 则
运行后面的程序。
#BOARD_NAME 变量从声明开始一直是空,到这里给他赋值$1,即 BOARD_NAME =
100ask24x0.
[ $# -lt 4 ] && exit 1
[ $# -gt 6 ] && exit 1
echo "Configuring for ${BOARD_NAME} board..."
#
# Create link to architecture specific headers
#
if [ "$SRCTREE" != "$OBJTREE" ] ; then
mkdir -p ${OBJTREE}/include
mkdir -p ${OBJTREE}/include2
cd ${OBJTREE}/include2
rm -f asm
ln -s ${SRCTREE}/include/asm-$2 asm
LNPREFIX="../../include2/asm/"
cd ../include
rm -rf asm-$2
rm -f asm
mkdir asm-$2
ln -s asm-$2 asm
else
cd ./include
rm -f asm
ln -s asm-$2 asm
fi
# 当使用了 O=obj 选项时,SRCTREE!= OBJTREE。
# 在 obj 目录下先创建 include 和 include2 文件夹。
# 在 obj/include2 下建立 include/asm-arm 目录的链接 asm,
# 在 obj/include 下建立 asm-arm 目录,并将 asm 目录链接到 asm-arm 上
# 如果未使用 O=obj 选项,则在 include 目录下建立 asm-arm 的链接 asm.
rm -f asm-$2/arch
if [ -z "$6" -o "$6" = "NULL" ] ; then
ln -s ${LNPREFIX}arch-$3 asm-$2/arch
else
ln -s ${LNPREFIX}arch-$6 asm-$2/arch
fi
if [ "$2" = "arm" ] ; then
rm -f asm-$2/proc
ln -s ${LNPREFIX}proc-armv asm-$2/proc
fi
# $6 为 s3c24x0,所以创建 obj/include2/asm/arch-s3c24x0 的链接 asm-arm/arch
# $2 为 arm,所以创建 obj/include2/asm/pro-armv 的链接 asm-arm/proc
#
# Create include file for Make
#
echo "ARCH = $2" > config.mk
echo "CPU = $3" >> config.mk
echo "BOARD = $4" >> config.mk
[ "$5" ] && [ "$5" != "NULL" ] && echo "VENDOR = $5" >> config.mk
[ "$6" ] && [ "$6" != "NULL" ] && echo "SOC = $6" >> config.mk
#创建 config.mk 文件,内容如下
# ARCH = arm
# CPU = arm920t
# BOARD = 100ask24x0
# SOC = s3c24x0
#
# Create board specific header file
#
if [ "$APPEND" = "yes" ] # Append to existing config file
then
echo >> config.h
else
> config.h # Create new config file
fi
echo "/* Automatically generated - do not edit */" >>config.h
echo "#include <configs/$1.h>" >>config.h
exit 0
# 创建 config.h 文件,内容为
# #include <configs/100ask24x0.h>
# 其中 configs/100ask24x0.h 为配置文件,定义了各种功能的开关,以此文件作为裁
剪。
# 在 common.h 的开头便包含了 include <config.h>也就是 include
<configs/100ask24x0.h>
2.uboot 编译流程
2.1 相关变量初始化
相关代码和分析如下
VERSION = 1
PATCHLEVEL = 1
剩余21页未读,继续阅读
普通网友
- 粉丝: 16
- 资源: 319
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0