在有些狀況之下,專案建置之前須要用到一些patch來修改source code,通常系統都會在建置組態『./configure』之前會套用這些patch。使用patch會用底下的順序:

  1. 如果需要下載的patch則需要在『mk』檔裡面的『<pkg>_PATCH』變數裡面去設定,設定完之後便會自動下載。
  2. 只要是在同一個資料夾底下的『*.patch』檔,都會被套用。
  3. 如果你有在『.config』裡面去定義『BR2_GLOBAL_PATCH_DIR』的話,系統也會從這邊去套用patch,當然你可以直接將patch放在你的套件的資料夾裡就好(eg. buildroot/package/<pkg>/*.patch』),但是這樣就會去改到buildroot的結構,所以最好還是統一放在『Global Dir』裡面,命名方式主要在『Global Dir』底下,在用套件的名字來建立資料夾(eg. ~/myPatches/strace/001-Demo-strace-chage.patch)。
  4. patch套用的順序主要是由你patch的檔頭編號,所以最好你的patch要由小到大『001~010』這樣子的編號,這樣系統就會完全照你的順序來套用,否則就會直接由字母順序來套用,會比較不直覺。

下圖是一個伺服器nginx的patch清單:

(來源 : free-electrons )

在這個buildroot裡,如果是像上面這樣子的命名規則,就會非常清楚,因為你可以知道它的順序,也可以很清楚的知道每一個patch的用途。而最好是裡面還要包含一個『Signed-off-by』的資訊如下:

(來源 : free-electrons )

要知道畢竟這是open source,大家都有可能用到,所以每件事都要讓後人好維護才對。

Generating patches

有兩個方式可以產生patch 檔,如果你的案子是有版本管控的話,當然就是用『git』拉,如果沒有的話用『quilt』也蠻方便的。

git patch(必須在buildroot外面去做這件事)

  1. clone 專案
    git clone git://...
    
  2. 建立branch
    git checkout -b buildroot-changes v3.2
    
  3. 引入既有的patches

    git am /path/to/buildroot/package/<foo>/*.patch
    
  4. 修改檔案並且commit

    git commit -s -m \`\`this is a change'
    
  5. 產生patches

    git format-patch v3.2
    

quilt patch:

  1. 解壓縮sorce code (buildroot將下載完的package放在資料夾『dl』裡面)
    tar xf /path/to/dl/<foo>-<version>.tar.gz
    
  2. 在source code裡面,建立一個patch資料夾
    mkdir patches
    
  3. 引入既有的patch
    quilt import /path/to/buildroot/package/<foo>/*.patch
    
  4. 套用既有的patch
    quilt push -a
    
  5. 建立新的patch
    quilt new 0001-fix-header-inclusion.patch
    
  6. 修改檔案
    quilt edit main.c
    
  7. 將修改存入patch
    quilt refresh
    

results matching ""

    No results matching ""