日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

uboot makefile分析之 make xx_config

發(fā)布時間:2024/1/18 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 uboot makefile分析之 make xx_config 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

make?mini2440_config 分析:?

Uboot第一步--make xxx_config。多么性感啊,我們就從這里開始吧···

[python] view plain copy print ?
  • mini2440_config?:?unconfig??
  • ?@$(MKCONFIG)?$(@:_config=)?arm?arm920t?mini2440?tekkamanninja?s3c24x0??
  • 朦朧才是美,此時我就要連你撥的一干二凈,找到了unconfig的定義--

    [python] view plain copy print ?
  • unconfig:??
  • ?@rm?-f?$(obj)include/config.h?$(obj)include/config.mk?\??
  • ??$(obj)board/*/config.tmp?$(obj)board/*/*/config.tmp?\??
  • ??$(obj)include/autoconf.mk?$(obj)include/autoconf.mk.dep??

  • ?

    好了,清楚一點了。清楚了,但我又迷茫了,為什么我一運行 make mini2440_config就會跑到mini2440_config : unconfig 這個地方運行啊?這個問題就像 為什么一看到漂亮的女人我們就會想象她脫光衣服在床上的樣子而從來不想她的腳到底有多臭 一樣難解釋。如果非要解釋那么好吧:mini2440_config是一個偽目標(biāo),因為mini2440_config的:后面只跟著一個unconfig,而unconfig也是一個偽目標(biāo)。為什么unconfig是一個偽目標(biāo)呢?因為unconfig的:后面什么都沒有。如果他是個變量的話 后面一定會加點什么東西,他就像make clean的clean一樣,是個偽的。? 如果還想問為什么?去看《跟我一起寫makefile》吧?如果還有為什么,那我問你:為什么你爸是你爸?為什么你媽是你媽?為什么我不能cao你媽而你爸卻可cao你媽?為什么你是你?你從何處來,又向何處去,你究竟是誰?? 好了,這個問題就討論到這里吧,世界還很美好,不能總在一個地方停留,還有很多美女需要我們?nèi)フ?#xff0c;干點更有意義的事吧~~~

    運行后必然會執(zhí)行unconfig下的命令,就是刪除那幾個文件。為什么要刪除那幾個文件?因為后面的操作會再生成這幾個文件。

    接著分析

    [python] view plain copy print ?
  • @$(MKCONFIG)?$(@:_config=)?arm?arm920t?mini2440?tekkamanninja?s3c24x0??
  • ?

    需找$(MKCONFIG),功夫不負(fù)有心人,鐵棒終于沒有被磨成針。--

    [python] view plain copy print ?
  • MKCONFIG????:=?$(SRCTREE)/mkconfig??
  • export?MKCONFIG??

  • ?

    MKCONFIG就是uboot目錄下的那個mkconfig這個文件。可是$(@:_config)是個問題。

    沒有可是,不要只有看H片時記得百度,百度一下--makefile中有個這樣的表達(dá)方式:$(A:patternA=patternB)。意思就是將 A中 patternA格式的字符用patternB來代替。回歸$(@:_config),@代表輸入的參數(shù),即:mini2440_config,patternA是_config,patternB是空的。說白了就是將mini2440_config的_config去掉。

    這條語句就是:運行mkconfig文件,傳遞 6個參數(shù)。都分析到這里了,如果不繼續(xù)的話那簡直就是耍流氓。

    ?

    mkconfig分析:

    [python] view plain copy print ?
  • APPEND=no????#?Default:?Create?new?config?file??
  • BOARD_NAME=""????#?Name?to?print?in?make?output??
  • TARGETS=""??
  • 定義變量,沒啥鳥用。??
  • ??
  • while?[?$#?-gt?0?]?;?do??
  • ????case?"$1"?in??
  • ????--)?shift?;?break?;;??
  • ????-a)?shift?;?APPEND=yes?;;??
  • ????-n)?shift?;?BOARD_NAME="${1%%_config}"?;?shift?;;??
  • ????-t)?shift?;?TARGETS="`echo?$1?|?sed?'s:_:?:g'`?${TARGETS}"?;?shift?;;??
  • ????*)?break?;;??
  • ????esac??
  • done??
  • $#是腳本傳遞的參數(shù)的個數(shù)。-gt是>的意思。 $1:第一個參數(shù)。shift:奸殺第一個參數(shù),將第二參數(shù)變成第一個……這段代碼意思 檢查參數(shù)中,有無-a -n -t這樣的參數(shù),沒有的話直接break。 很明顯,makefile傳遞的6個參數(shù),沒有-a,-t,-n。直接break。

    ?

    [python] view plain copy print ?
  • [?"${BOARD_NAME}"?]?||?BOARD_NAME="$1"??
  • ??
  • [?$#?-lt?4?]?&&?exit?1??
  • [?$#?-gt?6?]?&&?exit?1??
  • ??
  • if?[?"${ARCH}"?-a?"${ARCH}"?!=?"$2"?];?then??
  • ????echo?"Failed:?\$ARCH=${ARCH},?should?be?'$2'?for?${BOARD_NAME}"?1>&2??
  • ????exit?1??
  • fi??
  • ??
  • echo?"Configuring?for?${BOARD_NAME}?board..."??
  • 這個一個簡單的寫法:["${BOARD_NAME}"]表示一個條件,BOARD_NAME != NULL, ||表示如果 條件為假 則運行后面的程序。 同時&&表示如果條件為真,則運行后面的程序。BOARD_NAME變量從聲明開始一直是空,到這里給他賦值$1,即 BOARD_NAME = mini2440.

    判斷參數(shù)的個數(shù) lt是<意思。? 半段ARCH變量值是否為BULL ,-a是and的意思,并且!= $2。ARCH但是此刻ARCH應(yīng)該是=NULL的, 但如果我們運行 make mini2440_defconfig ARCH=arm 這樣的命令,ARCH可能就會有值了。個人感覺應(yīng)該是這樣的,沒看過權(quán)威的資料。 阿門:求求你讓我對了吧,少讓咱丟點人~~

    ?

    [python] view plain copy print ?
  • #??
  • #?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??
  • ??
  • 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??

  • 從comment可以看出,是建立link文件。同理:是這里$SRCTREE $OBJTREE應(yīng)該也是null的。所以相等,那么運行elase下語句,建立asm文件,link到asm-arm。 刪除asm-arm下的arch文件,然后再建立他,--人類真是太賤了!???? -z的意思是判斷字符串是否為"" -o是或的意思? 判斷語句意思是???? $6==="" 或者$6==NULL??不好意思,我們的$6==s3c24x0,那么就else吧。于是乎,在asm-arm下建立連接文件arch,link到arch-s3c24x0。arch-s3c24x0就在asm-arm下。 $LNPRERIX變量在哪?其實我也不知道,?那么只好把這個問題留給 蒼空姐姐了,亞麻跌~~殘缺才是美好的~!? 如果是arm的話,再建立 一個link文件。

    ?

    [python] view plain copy print ?
  • #??
  • #?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??
  • ??
  • #?Assign?board?directory?to?BOARDIR?variable??
  • if?[?-z?"$5"?-o?"$5"?=?"NULL"?]?;?then??
  • ????BOARDDIR=$4??
  • else??
  • ????BOARDDIR=$5/$4??
  • fi??
  • 這上面的代碼就太給力了,就像蒼空姐姐一樣,敢不打馬賽克的女人才是真的女人。 直接看看uboot根目錄下的config.mk文件就啥都明白了。另外:賦值了個BOARDDIR, 具體什么用,咱騎驢看唱本。

    ?

    [python] view plain copy print ?
  • #??
  • #?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??
  • ??
  • for?i?in?${TARGETS}?;?do??
  • ????echo?"#define?CONFIG_MK_${i}?1"?>>config.h?;??
  • done??
  • ??
  • cat?<<?EOF?>>?config.h??
  • #define?CONFIG_BOARDDIR?board/$BOARDDIR??
  • #include?<config_defaults.h>??
  • #include?<configs/$1.h>??
  • #include?<asm/config.h>??
  • EOF??
  • ??
  • exit?0??

  • 輸出內(nèi)容到config.h中。? > 的意思是創(chuàng)建一個文件,如果該文件存在則覆蓋。cat << EOF 表示打印后滿的內(nèi)容,直到EOF結(jié)束。

    ?

    結(jié)束:

    至此,make mini2440_defconfig結(jié)束。 看一下干了點什么事: 建立了穿件了include目錄下的link目錄,創(chuàng)建confg.mk文件,創(chuàng)建config.h文件。

    接下來就該make出場了,后面的內(nèi)容更為精彩,赤裸裸的肉搏戰(zhàn),黃色,暴力兼而有之,搞怪,兇險一個都不少。且聽下回分解~~


    總結(jié)

    以上是生活随笔為你收集整理的uboot makefile分析之 make xx_config的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。