Patches

因為專案裡面有很多檔案是tarball下載或是git下載,我想要讓它保持專案的最小限度,所以要去修改它裡面的內容就必須要用到patch(補丁)檔[以下都稱patch],在buildroot的patch步驟時,它會自動的將patch套用到你的package裡面(解壓縮後,跑組態前)。


- 建制前下載

如果需要下載的patch則需要在< pkg >_PATCH變數裡面去設定,設定完之後便會自動下載。


- Patch的放置路徑

patch都要放在 package/< pkg >/*.patch


- Patch 的順序

如果你有多個patch,則命名規則就是先數字,然後沒有數字的話就用字母排序 舉例來說: 會發現這個package就是用序號開頭,然後後面接的是這個patch的描述。


- 產生patch

有兩個方式可以產生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