u-boot的mkconfig文件详解
生活随笔
收集整理的這篇文章主要介紹了
u-boot的mkconfig文件详解
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
在編譯的uImage的時(shí)候使用:
make uImage V=1其中的V=1的作用是,編譯uImage的時(shí)候?qū)⒃敿?xì)的編譯過(guò)程列出來(lái),方便對(duì)makefile的分析
先分析u-boot的mkconfig文件
#!/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] # ./mkconfig smdk2410 arm arm920t smdk2410 NULL s3c2410 # (C) 2002-2006 DENX Software Engineering, Wolfgang Denk <wd@denx.de> # 執(zhí)行下面的操作./mkconfig smdk2410 arm arm920t smdk2410 NULL s3c2410 # mkconfig 100ask24x0 arm arm920t 100ask24x0 NULL s3c24x0 # $0=mkconfig $1=100ask24x0 $2=arm $3=arm920t $4=100ask24x0 $5=NULL $6=s3c24x0APPEND=no # 默認(rèn)創(chuàng)建新的配置文件 BOARD_NAME="" # Name to print in make output參數(shù)中沒(méi)有 -- -a -n 所以這里直接跳過(guò) while [ $# -gt 0 ] ; docase "$1" in--) shift ; break ;;-a) shift ; APPEND=yes ;;-n) shift ; BOARD_NAME="${1%%_config}" ; shift ;;*) break ;;esac done 執(zhí)行這里 # 如果BOARD_NAME不為空,直接向下執(zhí)行,這里的BOARD_NAME為空,執(zhí)行BOARD_NAME="$1" # 執(zhí)行之后BOARD_NAME=100ask24x0 [ "${BOARD_NAME}" ] || BOARD_NAME="$1"# 若果參數(shù)小于4就退出,退出狀態(tài)碼是1,若果參數(shù)大于6也退出,$#代表參數(shù)的個(gè)數(shù) [ $# -lt 4 ] && exit 1 [ $# -gt 6 ] && exit 1# make 100ask24x0 之后會(huì)輸出這句提示語(yǔ) echo "Configuring for ${BOARD_NAME} board..."為開(kāi)發(fā)板創(chuàng)建特定的頭文件鏈接 # # Create link to architecture specific headers # # 因?yàn)闆](méi)有定義 O 因此 "$SRCTREE" == "$OBJTREE" # 執(zhí)行else分支 # OBJTREE := $(if $(BUILD_DIR),$(BUILD_DIR),$(CURDIR)) # SRCTREE := $(CURDIR) 這里的判斷可為用戶增加可選性,若是指定"$SRCTREE" "$OBJTREE"為不停的目錄,那么編譯的時(shí)候就可以將編譯產(chǎn)生的文件放到指定的文件夾目錄,就可以保證源碼的目錄,這里進(jìn)行編譯的時(shí)候沒(méi)有指定,直接在源碼路徑上進(jìn)行編譯,因此直接跳過(guò)if 進(jìn)行執(zhí)行else下的語(yǔ)句 if [ "$SRCTREE" != "$OBJTREE" ] ; thenecho "obj obj obj obj obj"mkdir -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 else # $2=arm # 進(jìn)入include 目錄 清除 asm 文件夾并為 asm-arm 生成軟連接文件 asm # 進(jìn)入include 目錄會(huì)看到 asm -> asm-arm的連接文件 # 代碼中有好多的 #include<asm/....h>等文件 因此講 asm-> asm-arm就可以直接使用asm-arm中的頭文件cd ./includerm -f asmln -s asm-$2 asm fi# rm -f asm-arm/archrm -f asm-$2/arch # $0=mkconfig $1=100ask24x0 $2=arm $3=arm920t $4=100ask24x0 $5=NULL $6=s3c24x0 # 若果第六個(gè)參數(shù)為空,或者第六個(gè)參數(shù)為NULL就執(zhí)行 then后面的語(yǔ)句 if [ -z "$6" -o "$6" = "NULL" ] ; thenln -s ${LNPREFIX}arch-$3 asm-$2/arch else # 執(zhí)行該句 # LNPREFIX 沒(méi)有定義就直接忽略相當(dāng)于 NULL echo $PWD # 輸出/work/svn_linux/u-boot/include# 這條語(yǔ)句是在include下建立一個(gè)asm-$2/arch的link,也即asm-arm/arch,指向${LNPREFIX}arch-$6,即arch-s3c24x0ln -s ${LNPREFIX}arch-$6 asm-$2/arch # ln -s arch-s3c24x0 asm-arm/arch#echo ${LNPREFIX} #該句只打印了一行空行,說(shuō)明 LNPREFIX是沒(méi)有定義 fi# $0=mkconfig $1=100ask24x0 $2=arm $3=arm920t $4=100ask24x0 $5=NULL $6=s3c24x0 # 執(zhí)行之后 # lrwxrwxrwx 1 andrew andrew 9 9月 20 22:31 proc -> proc-armv if [ "$2" = "arm" ] ; thenrm -f asm-$2/procln -s ${LNPREFIX}proc-armv asm-$2/proc fi# # Create include file for Make #創(chuàng)建頂層 Makefile文件使用的 confg.mk文件 echo $PWD #在 include下 新建一個(gè) 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)建一個(gè)單板相關(guān)的頭文件# APPEND=no # Default: Create new config file 默認(rèn)創(chuàng)建新文件 if [ "$APPEND" = "yes" ] # Append to existing config file thenecho >> config.h else # 創(chuàng)建新文件 config.h> config.h # Create new config file fi echo "/* Automatically generated - do not edit */" >>config.h echo "#include <configs/$1.h>" >>config.hexit 0最后在include 目錄下,生成的config.mk文件為:
ARCH = arm CPU = arm920t BOARD = 100ask24x0 SOC = s3c24x0總結(jié)
以上是生活随笔為你收集整理的u-boot的mkconfig文件详解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 【2016年第5期】多“源”异“构”培养
- 下一篇: 作者:周一懋(1982-),男,江苏汇誉