TQ210——S5PV210 uboot顶层mkconfig分析
生活随笔
收集整理的這篇文章主要介紹了
TQ210——S5PV210 uboot顶层mkconfig分析
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
#################################################################################################
# SHELL常用內(nèi)部參數(shù):
# $# —— 傳遞給程序的總的參數(shù)數(shù)目
# $? —— 上一個(gè)代碼或者shell程序在shell中退出的情況,如果正常退出則返回0,反之為非0值。
# $* —— 傳遞給程序的所有參數(shù)組成的字符串。
# $n —— 表示第幾個(gè)參數(shù),$1 表示第一個(gè)參數(shù),$2 表示第二個(gè)參數(shù) ...
# $0 —— 當(dāng)前程序的名稱
# $@ —— 以"參數(shù)1" "參數(shù)2" ... 形式保存所有參數(shù)
# $$ —— 本程序的(進(jìn)程ID號(hào))PID
# $! —— 上一個(gè)命令的PID
# 下面對(duì)$?多做些說明,當(dāng)補(bǔ)充shell知識(shí)吧
# 切記:$?永遠(yuǎn)表示shell命令最后一次執(zhí)行后的退出狀態(tài),當(dāng)函數(shù)執(zhí)行完畢后,如果又執(zhí)行了其它命
# 令,則$?不再表示函數(shù)執(zhí)行后的狀態(tài),而表示其它命令的退出狀態(tài).
#-a 表示(and)兩個(gè)條件同時(shí)成立
# -eq 表示兩數(shù)值相等
# -gt 表示n1大于n2,即前面大于后面
# -lt 表示n1小于n2,即前面小于后面
# "\(" "\)"是對(duì)圓括號(hào)的轉(zhuǎn)義,轉(zhuǎn)成普通圓括號(hào)"()"來包裹條件表達(dá)式
# if[...]中的表達(dá)式意思為:如果傳遞給mkconfig的參數(shù)個(gè)數(shù)($#)等于2個(gè)并且第1個(gè)變量為
# "-A"($1),則執(zhí)行出錯(cuò)提示.那么$0,$1,$2,...是什么呢?我們看Makefile中是怎么執(zhí)行make TQ210_config這個(gè)偽目標(biāo)的.
###########################################################################
# 指定解釋器,使用-e相當(dāng)于 #! /bin/bash
#!/bin/sh -e# Script to create header files and links to configure
# U-Boot for a specific board.
#
# Parameters: Target Architecture CPU Board [VENDOR] [SOC]
#
# (C) 2002-2006 DENX Software Engineering, Wolfgang Denk <wd@denx.de>
#
############################################################################
# 默認(rèn)創(chuàng)建一個(gè)新的配置文件
# 執(zhí)行make TQ210_config的時(shí)候打印輸出單板名TQ210
APPEND=no # Default: Create new config file
BOARD_NAME="" # Name to print in make output# SHELL的一些內(nèi)部參數(shù)最開始有描述,以后不再多說!
############################################################################
# 執(zhí)行make TQ210_config的時(shí)候,這個(gè)過程會(huì)調(diào)用uboot根目錄下的mkconfig文件,
# 會(huì)有6個(gè)參數(shù)傳入,如下
# $0 $1 $2 $3 $4 $5 $6 $#
# mkconfig TQ210 arm s5pv210 TQ210 samsung s5pv210 6
# BOARD_NAME ARCH CPU BOARD VENDOR SOC
# $# -gt 0表示$#不為0時(shí)執(zhí)行,顯然這里不會(huì)執(zhí)行。
# shift的作用是使$1=$2,$2=$3,$3=$4….,而原來的$1將丟失。因此while循環(huán)的作用是,
# 依次處理傳遞給mkconfig腳本的選項(xiàng)(--,-a,-n,-t,*)。由于我們并沒有傳遞給mkconfig任何的選
# 項(xiàng),因此while循環(huán)中的代碼不起作用。
while [ $# -gt 0 ] ; docase "$1" in--) shift ; break ;;-a) shift ; APPEND=yes ;;-n) shift ; BOARD_NAME="${1%%_config}" ; shift ;;*) break ;;esac
done###########################################################################
# 如果BOARD_NAME為空則什么都不做;否則賦值為$1,即TQ210
# 此句賦值BOARD_NAME = TQ210
[ "${BOARD_NAME}" ] || BOARD_NAME="$1"
###########################################################################
# 檢查如果傳進(jìn)來的變量個(gè)數(shù),如果小于4個(gè)則退出,若大于6個(gè)也要退出
[ $# -lt 4 ] && exit 1
[ $# -gt 6 ] && exit 1###########################################################################
# shell中打印出“Configuring for TQ210 board...”
echo "Configuring for ${BOARD_NAME} board..."#
# Create link to architecture specific headers
#
###########################################################################
# 如果源碼頂層目錄(SRCTREE)和存放編譯生成文件的目錄(OBJTREE)不同就在
# 存放編譯生成文件的目錄(OBJTREE)建立兩個(gè)文件include和include2
# 進(jìn)入include2目錄,刪除asm文件夾
# 建立一個(gè)軟連接asm,鏈接指向 ${SRCTREE}/include/asm-arm
# 然后到當(dāng)前目錄的上層目錄進(jìn)入include文件夾
# 刪除asm-arm和asm文件夾
# 在當(dāng)前目錄創(chuàng)建asm-arm文件夾,建立軟連接asm指向asm-arm
if [ "$SRCTREE" != "$OBJTREE" ] ; thenmkdir -p ${OBJTREE}/includemkdir -p ${OBJTREE}/include2cd ${OBJTREE}/include2rm -f asmln -s ${SRCTREE}/include/asm-$2 asmLNPREFIX="../../include2/asm/"cd ../includerm -rf asm-$2rm -f asmmkdir asm-$2ln -s asm-$2 asm
###########################################################################
# 如果源碼頂層目錄(SRCTREE)和存放編譯生成文件的目錄(OBJTREE)相同,
# 進(jìn)入include目錄,刪除asm目錄,建立一個(gè)軟連接asm指向當(dāng)前目錄的asm-arm
#
elsecd ./includerm -f asmln -s asm-$2 asm
fi###########################################################################
# 刪除asm-arm/arch,建立軟連接實(shí)際上是對(duì)鏈接的目標(biāo)進(jìn)行操作,
rm -f asm-$2/arch###########################################################################
#
if [ -z "$6" -o "$6" = "NULL" ] ; thenln -s ${LNPREFIX}arch-$3 asm-$2/arch
elseln -s ${LNPREFIX}arch-$6 asm-$2/arch
fi# create link for s3c24xx SoC
if [ "$3" = "s3c24xx" ] ; thenrm -f regs.hln -s $6.h regs.hrm -f asm-$2/archln -s arch-$3 asm-$2/arch
fi# create link for s3c64xx SoC
if [ "$3" = "s3c64xx" ] ; thenrm -f regs.hln -s $6.h regs.hrm -f asm-$2/archln -s arch-$3 asm-$2/arch
fi# create link for s5pc1xx SoC
if [ "$3" = "s5pc1xx" ] ; thenrm -f regs.hln -s $6.h regs.hrm -f asm-$2/archln -s arch-$3 asm-$2/arch
fi# create link for s5pc11x SoC
if [ "$3" = "s5pc11x" ] ; thenrm -f regs.hln -s $6.h regs.hrm -f asm-$2/archln -s arch-$3 asm-$2/arch
fi# create link for s5pv210 SoC
########################################################
# TQ210使用的是s5pv210,所以會(huì)執(zhí)行這段代碼
# 刪除regs.h文件,
# 創(chuàng)建鏈接文件regs.h指向s5pv210.h
# 刪除asm-arm/arch,
# 創(chuàng)建軟連接asm-arm/arch指向arch-s5pv210
if [ "$3" = "s5pv210" ] ; thenrm -f regs.hln -s $6.h regs.hrm -f asm-$2/archln -s arch-$3 asm-$2/arch
fi# create link for s5p64xx SoC
if [ "$3" = "s5p64xx" ] ; thenrm -f regs.hln -s $6.h regs.hrm -f asm-$2/archln -s arch-$3 asm-$2/arch
fi# create link for s5p644x SoC
if [ "$3" = "s5p644x" ] ; thenrm -f regs.hln -s $6.h regs.hrm -f asm-$2/archln -s arch-$3 asm-$2/arch
fi###########################################################################
# 如果架構(gòu)是arm架構(gòu),則刪除當(dāng)前目錄(此時(shí)當(dāng)前目錄是U-boot源碼頂層目錄/include)下的
# asm-arm/proc目錄建立軟鏈接ln -s proc-armv asm-arm/proc
if [ "$2" = "arm" ] ; thenrm -f asm-$2/procln -s ${LNPREFIX}proc-armv asm-$2/proc
fi# create link for s3c64xx-mp SoC
if [ "$3" = "s3c64xx-mp" ] ; thenrm -f regs.hln -s $6.h regs.hrm -f asm-$2/archln -s arch-$3 asm-$2/arch
fi#
# Create include file for Make
#
###########################################################################
# 生成make的頭文件config.mk
# ARCH=arm,CPU=s5pv210,BOARD=TQ210,加入到config.h中
# > config.mk是強(qiáng)行覆蓋創(chuàng)建config.mk然后把數(shù)據(jù)導(dǎo)入config.mk中
# VENDOR=samsung,SOC=s5pv210加入到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#
# Create board specific header file
#
###################################################################
# 創(chuàng)建指定的配置頭文件,默認(rèn)APPEND=no(本文件開頭有賦值)
# 執(zhí)行else,創(chuàng)建新的config.h文件
if [ "$APPEND" = "yes" ] # Append to existing config file
thenecho >> config.h
else> config.h # Create new config file
fi
###################################################################
# 在config中會(huì)顯示/* Automatically generated - do not edit */
# #include <configs/TQ210.h>加入到config.h中
echo "/* Automatically generated - do not edit */" >>config.h
echo "#include <configs/$1.h>" >>config.h# 返回成功狀態(tài)
exit 0
總結(jié)
以上是生活随笔為你收集整理的TQ210——S5PV210 uboot顶层mkconfig分析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 具有IOctl的简单字符驱动
- 下一篇: 如果访问云服务器上的文件,如果访问云服务