跳至主要内容

送出 kernel patch:實際跑過一遍的步驟

這份是操作手冊。每個步驟都實際執行過,包含四個中途撞到的錯誤與它們的解法。

另外兩份文件是手冊(按主題查用法)和歷程(走一遍開發過程)。


0. 目前狀態

已送出:change 4200863

ANDROID: dma-heap: fix struct dma_heap kernel-doc
分支:android-mainline
狀態:NEW,等待 review

環境設定已完成的部分:

項目
user.nameAlan Tseng
user.emailalan.tseng.cs@gmail.com(必須是 Gerrit 已註冊的)
http.cookiefile~/.gitcookies
push 目標git push aosp HEAD:refs/for/android-mainline

aosp 這個 remote 指向 android.googlesource.com它會自動路由到 Gerrit,不需要改成 android-review 主機。


1. 選題材(真正的門檻)

流程只要學一次,找到值得修的東西才是每次都要重來的部分。

三道必過的關卡

關卡一:這段程式碼在 mainline 存不存在?

git log --oneline -1 -S "函式名" -- 路徑/檔案.c

看到 ANDROID: 開頭 → ACK 專屬,只能送 Gerrit,不要送 LKML。

關卡二:mainline 現在還錯不錯?

不要相信手上的 tree。android14-6.1 落後 mainline 約兩年。

curl -s https://raw.githubusercontent.com/torvalds/linux/master/路徑/檔案.c | grep -B12 "函式簽名"

關卡三:android-mainline 現在還錯不錯?

ACK 的改動先進 android-mainline,再往下合到發行分支。直接送舊發行分支多半會被退。

cd ~/android14-6.1/common && git fetch --depth=1 aosp android-mainline
git show FETCH_HEAD:路徑/檔案.c | grep -B12 "函式簽名"

--depth=1 很重要,完整 fetch 會拉幾百 MB。

這三關實際淘汰掉的兩個候選

候選淘汰在哪
dma_buf_set_name kernel-doc關卡二:mainline 是對的。關卡三:android-mainline 裡那段 ANDROID 修改已被移除,只剩舊發行分支有 → 送上去會被當 churn 退
dma_buf_account_task關卡一:git log 顯示是 ANDROID: commit → 不是 mainline 題材

兩分鐘的檢查,換掉一次上傳後被打回票。 這是整份文件最有價值的一段。

掃描方式

scripts/kernel-doc -none 路徑/檔案.c 2>&1 | grep warning
scripts/checkpatch.pl -f 路徑/檔案.c

批次掃 android-mainline 的某幾個子系統(不用整棵 checkout):

cd ~/android14-6.1/common && git archive FETCH_HEAD drivers/dma-buf drivers/android | tar -x -C /tmp/am
for f in $(find /tmp/am -name '*.c'); do n=$(scripts/kernel-doc -none "$f" 2>&1 | grep -c warning); [ "$n" -gt 0 ] && echo "$n $f"; done

什麼會被接受

類型mainlineACK