uboot_配置过程
来源:互联网 发布:java运维面试题 编辑:程序博客网 时间:2024/06/04 19:58
一 配置
1.1 make 100ask24x0_config
u-boot-1.1.6目录下makefile中有个目标 100ask24x0_config
100ask24x0_config : unconfig
@$(MKCONFIG)$(@:_config=) arm arm920t 100ask24x0 NULL s3c24x0
命令分析:
unconfig:
# @rm -f $(obj)include/config.h$(obj)include/config.mk \
# $(obj)board/*/config.tmp$(obj)board/*/*/config.tmp
# 删除之前配置好的
#
@$(MKCONFIG)
# MKCONFIG=$(SRCTREE)/mkconfig
# SRCTREE := $(CURDIR)
# CURDIR是Makefile中的一个特殊参数,表示当前目录
#
# OBJTREE := $(if$(BUILD_DIR),$(BUILD_DIR),$(CURDIR))
# $(if <condition>,<then-part>, <else-part>).
# 相当于C语言中的if-then-else-part
# 如果 BUILD_DIR 为非空,则为 BUILD_DIR,为空则为 CURDIR,
#
# @作用:make会把其要执行的命令行在命令执行前输出到屏幕上。当用“@”字符在命
# 令行前时,这个命令将不被make显示出来
#
$(@:_config=)
# $(var:=)是$(patsubst ,,)的简化形式,
# 例 $(patsubst %.c,%.o,x.c.c bar.c)
# 把字串“x.c.c bar.c”中以.c结尾的单词替换成以.o结尾的字符。函数的返回# 结果是“x.c.o bar.o”
#
# @在$()中与$@一样,表示规则中的目标文件
# $(@:_config=)中就是$(100ask24x0_config:_config=)
# 100ask24x0_config中的_config替换为空
命令效果:
./mkconfig 100ask24x0 arm arm920t 100ask24x0NULL s3c24x0
1.2 接着1.1执行mkconfig
./mkconfig 100ask24x0 arm arm920t 100ask24x0 NULL s3c24x0
参数解析
# Parameters: Target Architecture CPU Board [VENDOR] [SOC]
# Target: 宿主机平台
# Architecture: 定义芯片架构(如MIPS、POWERPC、ARM等)
# CPU: 定义芯片指令集版本(如ARM7、ARM9、ARM11等)
# Board: 芯片厂商,它细分为两类
# [VENDOR]: 按厂商划分(如AT9200、S3C44B0等)
# [SOC]: 按SOC类型(如S3C2440、S3C2410等)
分析参数有没有-- -a -n *
while[ $# -gt 0 ];
do
case"$1" in
--)shift ; break ;;
-a)shift ; APPEND=yes;;
-n)shift ; BOARD_NAME="${1%%_config}"; shift;;
*) break ;;
esac
done
while[ $# -gt 0 ];
# 脚本名称叫test.sh入参三个: 12 3
# 运行test.sh 1 2 3后
# $*为"1 2 3"(一起被引号包住)
# $@为"1" "2" "3"(分别被包住)
# $#为参数数量
#
# -eq //等于
# -ne //不等于
# -gt //大于
# -lt //小于
# ge //大于等于
# le //小于等于
case"$1" in
# --) shift ; break ;;
# -a) shift ; APPEND=yes ;;
# -n) shift ;BOARD_NAME="${1%%_config}" ; shift ;;
# *) break ;;
#
# 如果$1第一个参数是 -- 则所有参数左移 把原$1丢弃,
# 原$2补上$1<-$2<-$3<-$4<-$5<-$6 $0是脚本名
# 如果$1第一个参数是 -a 则所有参数左移 APPEND = yes
# 如果$1第一个参数是 -n 则所有参数左移 BOARD_NAME=”内容”
${1%%_config}
# 可以用${}分别替换得到不同的值:
# ${file%%.*}:删掉第一个 . 及其右边的字符串
# ${file%%/*}:删掉第一个 / 及其右边的字符串
# ${file#*/}:删掉第一个 /及其左边的字符串:
# ${file##*/}:删掉最后一个 / 及其左边的字符串:
# ${file#*.}:删掉第一个 . 及其左边的字符串:
# ${file##*.}:删掉最后一个 . 及其左边的字符串
# ${file%/*}:删掉最后一个 / 及其右边的字符串
# ${file%.*}:删掉最后一个 . 及其右边的字符串
#
# ${1等效于 $1
结果
NULL
给BOARD_NAME赋值
["${BOARD_NAME}" ]|| BOARD_NAME="$1"
# [ "${BOARD_NAME}" ]如果BOARD_NAME定义了||后的内容就不会执行,否则执行
# BOARD_NAME="$1",和c语言的||相似
# BOARD_NAME=""没有定义。 执行BOARD_NAME="$1"
结果
BOARD_NAME=100ask24x0
[$# -lt4 ] && exit 1
[$# -gt6 ] && exit 1
echo"Configuringfor ${BOARD_NAME} board..."
${BOARD_NAME}
# 当要显示变量值加随意的字符(我这里用AA)时,就会出错,如下:
# $ echo $varAA
# 这时应该用变量的原形:${var},即是加一个大括号来限定变量名称的范围,
[ $# -lt 4 ]&& exit 1
# []实际上是bash 中 test 命令的简写
# []就是 test,[]和[[]]都是条件表达式,不过[[]]有比[]高的容错性
# test整数1 –eq 整数2 整数相等
# test File1 –nt File2 文件1比文件2新
# test –e File 文件存在
# test –x File 文件存在并且可执行
exit1
# exit0 执行正确
# exit1 一般是出错定义这个1,也可以是其他数字
./include下,建立asm-arm文件的符号链接,并命名为asm
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
ln -s asm-$2 asm
# 建立asm-$2文件的符号链接,并命名为asm
结果
if不成立,执行else,
进入./include
建立asm-arm文件的符号链接,并命名为asm
Makefile刚开始有对是加 –o选项进行判断,以此来对SRCTREE的值进行设置,
./include下,建立arch-s3c24x0文件的符号链接,并命名为asm-arm/arch
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[ -z "$6" -o "$6" = "NULL" ]
# -z 判断是否为空
# if [ -z $string ] 如果string 为空
# if [ $sting ] 如果string 非空,返回0
# -o 逻辑或
# if [表达式1 –o 表达式2 ]
else
# if不成立,执行else
# ln -s ${LNPREFIX}arch-$6 asm-$2/arch
# LNPREFIX没有定义
#
结果
# ln -s arch-s3c24x0 asm-arm/arch
./include下,建立proc-armv文件的符号链接,并命名为asm-arm/proc
if[ "$2"= "arm"] ;then
rm -f asm-$2/proc
ln -s${LNPREFIX}proc-armv asm-$2/proc
fi
# 执行
# ln -s proc-armvasm-arm/proc
已知:include下没有源文件proc-armv,源文件proc-armv在asm-arm/下。
需要的源文件主要看生成目标链接文件的目录,经过试验,即使当前include目录下有源文件proc-armv,生成链接文件时源文件也要在asm-arm/目录下找,生成的链接文件proc也会在asm-arm/下
生成config.mk
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
# >表示新建文件并输入内容
# >>表示将内容追加到文件
["$6" ]&& ["$6" !="NULL" ]&& echo"SOC = $6" >> config.mk
# 参数6存在并且参数6不是null,把内容追加到文件
结果:config.mk内容
# ARCH =arm
# CPU =arm920t
# BOARD =100ask24x0
# ARCHSOC =s3c24x0
生成文件config.h
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
# if不成立,执行else
# 创建 config.h
# 并追加两行内容
#
结果:config.h内容
# /* Automatically generated - do notedit */
# #include <configs/100ask24x0.h>
- uboot_配置过程
- uboot_编译过程_1
- uboot_编译过程_2
- uboot_主Makefile分析
- Uboot_移植_记录_/*嵌入式学习*/
- Uboot_移植_记录_/*嵌入式学习*/
- bootloard----Uboot_移植_记录_/*嵌入式学习*/
- OBE数据库配置过程
- Jboss-ide 配置过程
- 存储过程动态配置
- TaskVision 手动配置过程
- proftpd配置过程
- OBE数据库配置过程
- OBE数据库配置过程
- webService配置过程
- 智能DNS配置过程
- Log4j配置过程
- tomcat https 配置过程
- 单张图片自适应
- Material Design 风格的 Android 侧滑菜单
- [goa]golang微服务框架学习--安装使用
- 王朝 第九周三角面积
- Linux有线网络链接
- uboot_配置过程
- 使用animate.css为你的网页添加动画
- Angular2 路由刷新404解决办法
- Android进阶篇【chapter-10】 RecyclerView的使用与RecyclerView多类型视图的构造
- Matlab 中的cell类型
- [goa]golang微服务框架学习(二)-- 代码自动生成
- 分数数列求和
- CSS基础02
- leetcode7: Reverse Integer