close

Linux_kernel_014_makefile.png

Makefile 將所需要的files include 進來

 

Linux_kernel_015_makefile_link.png

最上層的Makefile是svn.subMake/Makefile 的link

 

Linux_kernel_016_makefile_STEP.png

在svn.subMake/Makefile.kernel中定義了make kernel的各地target的prerequisites.在make過程中會把正確與錯誤資料通通寫入(overwrite)到同一個檔案$(LOG)

 

Linux_kernel_017_makefile_premake.png

premake target是定義在Makefile.major中

 

Linux_kernel_018_makefile_K_build.png

在premake後真正要進入build linux kernel的是 _K_build,從這裡進入linux kernel的Makefile

 

$ find /home -name .bashrc > list.file 2>&1
是表示說把正確的訊息與錯誤的訊息寫到同一個檔案中, 也就是list.file這一個檔案啦~ 也就是說&1表示的就是前一個導向的檔案 因為,平常的訊息若沒有特別設定的話,是導到stdout,也因此,

在 Linux 中的檔案有三種時間戳記:
    access time:檔案最後被讀取的時間。
    modify time:檔案最後被修改的時間。
    change time:檔案屬性(例如權限、擁有者等)最後被修改的時間。

我們可以使用 stat 指令來查看一個檔案的這三種時間戳記:
stat test.sh

當我們使用 touch 更改檔案(或目錄)的時間戳計時,預設會將三種時間戳記都設定為目前的時間:
# 更改時間戳記
touch test.sh

若只要更新 access time,可以加上 -a 參數:

# 更新 access time
touch -a test.sh

若只要更新 modify time,可以加上 -m 參數:

# 更新 modify time
touch -m test.sh

touch 最常被用來建立空的檔案,只要執行 touch 並指定檔案名稱,當指定的檔案不存在時,touch 就會自動建立一個空檔案,並將檔案的時間設定為目前的時間:

touch empty.txt  這樣就會建立一個檔名為 empty.txt 的空檔案。

 

$(foreach   <var>,<list>,<text>)

這個函數的意思是,把參數<list>中的單詞逐一取出放到參數<var>所指定的變數中,然後再執行< text>所包含的表達式。每一次<text>會返回一個字元串,循環過程中,<text>的所返回的每個字元串會以空格 分隔,最後當整個循環結束時,<text>所返回的每個字元串所組成的整個字元串(以空格分隔)將會是foreach函數的返回值。

所以,<var>最好是一個變數名,<list>可以是一個表達式,而<text>中一般會使用<var>這個參數來依次枚舉<list>中的單詞。舉個例子:

names := a b c d

files := $(foreach n,$(names),$(n).o)

上面的例子中,$(name)中的單詞會被挨個取出,並存到變數「n」中,「$(n).o」每次根據「$(n)」計算出一個值,這些值以空格分隔,最後作為foreach函數的返回,所以,$(files)的值是「a.o b.o c.o d.o」。

 

當我們在shell下執行command 或 function 結束都會回傳一個值(我們將值區分為0跟非0,兩種狀況)

$ abc=123
$ echo $?        #?問號也是一個變數 , 功能是觀看上一個指令的執行狀況,如正確回傳0,出錯回傳非0值

0    #因為$?前一個執行指令沒有出錯,故回傳值為0

$ 12abc=123                                              #變數前面不能為數字
-bash: 12abc=123: command not found        #發生錯誤
$echo $?
127                            #前一個指令執行出錯,故回傳值非0當要檢查系統上面是否存在的檔案或相關屬性時,test是一個方便的指令

$ A=123      #給變數A數值
$ test $A     #查看變數A是否存在
$ echo $?    #查看前一個指令是否出錯

0                #正常回傳0

 

運行腳本時傳遞給腳本(shell script file)的參數稱為命令行參數。命令行參數用 $n 表示,例如,$1 表示第一個參數,$2 表示第二個參數,依次類推。

$* 和 $@ 的區別

$* 和 $@ 都表示傳遞給函數或腳本的所有參數,不被雙引號(" ")包含時,都以"$1" "$2" … "$n" 的形式輸出所有參數。

但是當它們被雙引號(" ")包含時,"$*" 會將所有的參數作為一個整體,以"$1 $2 … $n"的形式輸出所有參數;"$@" 會將各個參數分開,以"$1" "$2" … "$n" 的形式輸出所有參數。

 

標準輸入輸出和管線 (Standard Input Output and Pipes)

資料流重導向

多重目標項目(target)

善用判斷式

Linux Kernel Makefiles

 

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 peter27863043 的頭像
    peter27863043

    檸檬傻斌-無料

    peter27863043 發表在 痞客邦 留言(0) 人氣()