2020/05/26(火)openWRTでカーネルにパッチを当てたい

公式手順に沿って試してみる

Adding or editing kernel patches

make target/linux/clean V=s QUILT=1
make target/linux/prepare V=s QUILT=1
cd build_dir/target-aarch64_generic_glibc/linux-*/linux-4.14.108
quilt new platform/100-my-kernel-patch.patch
Makefileによって 以下にファイルが生成される様子.. (findで見つけた)
FILE: build_dir/target-aarch64_generic_glibc/linux-*/linux-4.14.108/patches/platform/100-my-kernel-patch.patch

いろいろとコードを編集する.
編集・作成する前に quilt add filename してから作業すること(後述。quiltの使い方)
make target/linux/update V=s
make target/linux/update package/index V=s

quiltコマンドの使い方

これはシェルスクリプトで書かれたツールです.

ディレクトリを遡って、ワークディレクトリを探してくれます.
.pc/ patches があると、そこを WORKING TREE先頭とみなすようです(要確認)

ファイルの新規作成は、存在しないファイル名を追加してから 編集をかけます.
quilt add path/to/new-file.c
編集事態は quilt edit path/to/new-file.c としなくてもよいみたいですね.
どこかにファイルを置いて以下を実行すると一括登録できます.
for f in $(ls -1 /new/files/); do
  quilt add $f
  cp -af /new/filew/$f ./
done
symbolic linkの追加は現状できていません.
quilt add の処理で test -L $fname を見て、シンボリックリンクならエラーを出してくれます..

■kernel

make target/linux/clean
make target/linux/prepare V=s QUILT=1
cd build_dir/target-*/linux-*/linux-4.14*

TO=$PWD
FROM=/path/to/patched-files/linux-4.14.108

# pathは seriesに合わせて付与した
quilt new platform/920-add_dts.patch

for f in $(cat /tmp/hogehoge)
do
  quilt add $f
  cp -avf $FROM/$f ./$f
done

quilt refresh
cp -avf patches/platform/920-add_dts.patch  openwrt/target/linux/*/patches-4.14/
予め対象のファイル名は用意しておく..
$ git diff --name-only <変更前のID> -- linux-4.14.108 | sed -e 's,^linux-4.14.108/,,' > /tmp/hogehoge

quiltコマンド覚え書き(man page見た方が詳しい)

# 次のパッチを見る
quilt next

# 全てのパッチを参照する
$ quilt serires
....

# 順番にパッチを適用する
quilt push

# パッチを一つ戻す
quilt pop

参照先

公式のパッチの作り方

ハマったヒト

ひたすらぐぐったけど symblic linkに言及したものが少ない.
OpenWRTのもの
実例が甘い気がする...更新止まっているかもしれん.

debian勉強会@東京の資料 が 良さそう.
debian wikiにもあるけれど ん-..


同じく困っているヒト