YANO's digital garage

Copyright ©YANO All rights reserved. https://www.bravotouring.com/~yano/

Last-modified: 2024-04-17 (水)


[一語一絵/IT系]

kernel乗換え用patchの作り方 / 2006-07-19 (水)

「kernel乗換え用patch」を作成するシェルスクリプトを公開。同じ階層に存在する-devの無いフォルダをオリジナルソースツリーとして、配下に含まれる全ソースファイルの差分を出力する。

カスタマイズソースディレクトリの~/linux-2.6.16.26-dev/をカレントにしてスクリプトを起動する事が前提。環境変数COMPAIR_FILESにソースツリーに含まれるKconfig,Makefile,*.c,*.hファイルだけを全てリストアップするfindコマンドの使い方がミソ。sortを通しているのは各版数のpatchを比較しやすくする為の小技だ。

#!/bin/sh
#
# current is customized kernel source directory
#     ex) ~/linux-2.6.16.26-dev/
# original kernel source directory
#     ex) ~/linux-2.6.16.26/
#
DIR_DEV=`pwd`
DIR_DEV=`basename $DIR_DEV`
DIR_ORG=`echo $DIR_DEV | sed 's/-dev$//'`

cd ..

COMPAIR_FILES=`find $DIR_ORG -name Kconfig -or -name Makefile -or -name *.[ch] | sort`

for fname in $COMPAIR_FILES;
do
    targetfile=`echo $fname | sed s/$DIR_ORG/$DIR_DEV/`
    diff -bc $fname $targetfile;
done
注意点としては、オリジナルソースツリーに存在しない新規のファイルやシンボリックリンクは対象外なので、手作業で対応すること。あとkernel版数に依存しないので、版数が変ってもそのまま使用可能。

patchを作成する場合は

$ mkpatch.sh > linux-2.6.16.26-dev.patch
patchを適用する場合は
$ patch -p1 < linux-2.6.16.26-dev.patch
となる。

[ ツッコミの受付は終了しています ]
1: iso (07/20 00:51)
お初に書き込んでます。
自分は、patch file 作成の時は、
% diff -urN old_dir new_dir > patch.file
って、やってたような・・・・
diff のバージョンによりますが、コマンド一発!
2: YANO (07/20 02:23)
kernelツリーだと .config とか .o とか .S とか .cmd とか
余計なのがいっぱい入るんで掃除するのが大変かもかもよ~