新しい掲示板書き込みできるかな。
タイトルに(初級編)と書いていますが、私もこのくらいしか知らないですm(__)m
少し特殊な例かもしれませんが、いつもお世話になっているNelsonさんのgitを例に進めます。
http://www.eewiki.net/display/linuxonarm/BeagleBone+Black" target="_blank">http://www.eewiki.net/display/linuxonarm/BeagleBone+Black
上記ページには、kernelソースを準備するには、以下の手順で行うようになっています。
(1) git clone git://github.com/RobertCNelson/linux-dev.git
(2) cd linux-dev/
(3) git checkout origin/am33x-v3.12 -b tmp
(4) ./build_kernel.sh
(1)について
git clone:git://github.com/RobertCNelson/linux-dev.gitをローカル(手元のPCなど)にクローンします。
(3)について
リモートブランチであるorigin/am33x-v3.12から、tmpというローカルブランチを作成しcheckoutします。
ローカルブランチの名前はtmpになっていますが、自分で判別しやすい名前にしておけばいいかと思いいます。
どのようなリモートブランチがあるかは、(3)を実行する前に git branch -a とすると確認することができます。
私のところでは以下のようになっています
git branch -a
308(origin/am33x-v3.8のローカルブランチ)
312(ローカルブランチ)
313(ローカルブランチ)
314(ローカルブランチ)
* master
remotes/origin/HEAD -> origin/master
remotes/origin/am33x-v3.1
remotes/origin/am33x-v3.11
remotes/origin/am33x-v3.12
remotes/origin/am33x-v3.13
remotes/origin/am33x-v3.14
remotes/origin/am33x-v3.2
remotes/origin/am33x-v3.6
remotes/origin/am33x-v3.7
remotes/origin/am33x-v3.8
remotes/origin/master
(4)について
(3)を行ったあとに(4)を行えば、kernelが完成します。
めでたしですが、せっかくcloneしたので今後も使うための方法に続きます。
(5) git checout
こんな感じで使います。
git checkout origin/am33x-v3.12 -b 312
git checkout origin/am33x-v3.13 -b 313
作成済のbranchに移動するには
git checkout masterとかgit checkout 312などとします。
checkoutは、リモートブランチだけではなく、tag(後述)やハッシュ値でも可能です。
(6) git tag
git tag と打つと以下のように表示されると思います。
2.6.38-d5
2.6.38-rc1-d0
2.6.38-rc1-d1
ーーー
沢山あるようなので少し整理して表示します。
git tag | grep 3.12
3.12-bone8
3.12-rc1-bone1
3.12-rc2-bone2
・・・
3.12.12-bone12
ーーー
checkoutのところに書いたように、tagからローカルブランチを作成することも出来ます。
git checkout 3.12.12-bone12 -b 31212
(7) git pull
せっかくcloneしたので、今後も使い続けます。
クローン先の変更を取り込むには、以下のようにします。
cd linux-dev
git pull
pullしたあと、他のブランチにcheckoutした時に以下のようなメッセージが出た時には、checkout後にもう一度git pullします。
Your branch is behind 'origin/am33x-v3.14' by 2 commits, and can be fast-forwarded.
(8) ./build_kernel.sh
Nelsonさんのgitでは、checkoutしただけでは~KERNELのソースは変更されません。
変更するには、再度./build_kernel.shを行う必要があるようです。
(9) ローカルでの変更をすべて元に戻す
git checkout .(最後のドットが重要です)
./build_kernel.shを実行するとmenuconfigが立ち上がります。ここで.configを変更した場合、他ブランチにcheckout出来ないようです。
そんな時には、git checkout . を実行後に他ブランチにcheckoutします。
(10) 不要なブランチを削除
git branch -d(または-D) ローカルブランチ名
(11) git diff
ファイル、ブランチ間、タグ間など、どのような変更があったのかを表示できます。
たとえばtag間のdiffは
git diff 3.12.11-bone12 3.12.13-bone12 とします。
以下のようにすればpatchの作成もできます。
git diff 3.12.11-bone12 3.12.13-bone12 > 11_13.diff
ごにょごにょする時には便利です。
少し前に、Nelsonさんのソースを3.12.12に戻すにはどうしたらいいのかって質問がsyuさんから出ました。
いい加減な私は、version.shを修正して./build_kernel.shすれば出来ますよって答えました。
正しくは(6)のようにするべきですねm(__)m
また、twlさんから、新しいrtパッチが出てるけど、3.12.14のソースはないよねって話もありました。
なければ作ってみるかってことでやってみます。
方法は上記のいい加減なやつです。
(a) 新しいブランチを作ります
git checkout 3.12.13-bone12 -b 31214
(b) version.shを修正します
13 → 14
(c) ./build_kernel.shを実行します
(d) 出来ました
root@debian-bbb:~# uname -a
Linux debian-bbb 3.12.14-rt23_140329 #1 SMP PREEMPT RT Sat Mar 29 16:54:34 JST 2014 armv7l GNU/Linux
(e) 31214を削除及び変更を元に戻しておきます
git branch -d 31214
git checkout .
こんな感じで色々遊べるようです。
今回は存在しない3.12.14を作ってみました。
ただ3.12は2016までサポートがあるみたいなので、焦って3.12.14を作る必要はないと思います。
tinkerさん
丁寧な解説ありがとうございます。
存在しない新しいブランチを作る方法は参考になりました。これでBBB専用のパッチがあたったカーネルソースが生成されるという理解でよいのでしょうか。