SC-03Dのkernel source merge(cherry-pick編)
Moderator: Samsungモデレータ
SC-03Dのkernel source merge(cherry-pick編)
前回の質問で「kernel merge」についての質問だったので
いきなり全く違うベースのソースからgit mergeをするという荒技を行いましたが
本来、ああいう強引なmergeはするべきではありません。
(あくまでもmergeでという質問だったので、手抜きで帳尻を合わせただけです)
自分がリリースするなら、140個もコンフリクト出た時点でmerge branchによる強引は手法はやめ
使いたいカーネルソースをベースとして欲しい機能だけcherry-pickで入れていく手段をとります。
今回は、その実践編ということで、またDiablo kernelさんのソースを使い、機能を殺さずSC03D(SC05Dも?)でも使えるような
port手法について解説したいと思います。
このportは時間がかかるため、何日かに分けて進めていきたいと思ってます。
※もし上手くいかないようであれば、このトピックを消して裸足で逃げ出しますw
いきなり全く違うベースのソースからgit mergeをするという荒技を行いましたが
本来、ああいう強引なmergeはするべきではありません。
(あくまでもmergeでという質問だったので、手抜きで帳尻を合わせただけです)
自分がリリースするなら、140個もコンフリクト出た時点でmerge branchによる強引は手法はやめ
使いたいカーネルソースをベースとして欲しい機能だけcherry-pickで入れていく手段をとります。
今回は、その実践編ということで、またDiablo kernelさんのソースを使い、機能を殺さずSC03D(SC05Dも?)でも使えるような
port手法について解説したいと思います。
このportは時間がかかるため、何日かに分けて進めていきたいと思ってます。
※もし上手くいかないようであれば、このトピックを消して裸足で逃げ出しますw
Re: SC-03Dのkernel source merge(cherry-pick編)
まずは
今回はあくまでもDiablo kernelさんのソースをベースとするため
cloneで持ってくるのは、もちろんDiabloさんからです。
その後、fetchでkbcのソースを引っ張ってくる形ですね。
これでDiablo kernelさんのソースにkbcのソースをportする準備が整いました。
してみましょう。
現在いるブランチがDiablo kernelさんのcm-11.0
その下にkbc-diablo2というブランチが出来上がっていますが、これがKBCのSC03Dのカーネルソースになります。
今回はあくまでもDiablo kernelさんのソースをベースとするため
cloneで持ってくるのは、もちろんDiabloさんからです。
Code: Select all
git clone git@github.com:Hellybean/android_kernel_samsung_msm8660-common.git -b cm-11.0
Code: Select all
cd ~/android_kernel_samsung_msm8660-common
Code: Select all
git fetch git@github.com:kbc-developers/android_kernel_samsung_msm8660.git cm-11.0:kbc-diablo2
Code: Select all
git branch -a
現在いるブランチがDiablo kernelさんのcm-11.0
その下にkbc-diablo2というブランチが出来上がっていますが、これがKBCのSC03Dのカーネルソースになります。
Re: SC-03Dのkernel source merge(cherry-pick編)
自分がCyanogenmodのmsm8660-commonソースに手動でSC03DとSC05Dに対応するために手を加え始めたのは
2013年4月28日です。
もっと前からSC03D用のCMソースは作っていましたが、この頃、CMソースのベースがOpensourceSamsungの公式ソースからではなく
CodeAuroraフォーラムからのmsm-3.0.yソースベースに切り替わり、また改めて、ソースを仕切り直した訳です。
(つまり全部手作り)
具体的に言うと
https://github.com/kbc-developers/andro ... a8169d6a05
この時点デスね。
ここから色々手探りで直していった訳ですが、逆に言えば自分が当てた変なカスタムコミット以外をDiablo Kernelに当てていけば
Diablo Kernelの機能を全て保持したままSC03Dでも使えるようになる「ハズ」です。
それでは早速、このコミットをcherry-pickで当ててみましょう。
cherry-pick 以下の変な文字列はコミットIDです。
↑のURLの変な文字列と一緒です。
2013年4月28日です。
もっと前からSC03D用のCMソースは作っていましたが、この頃、CMソースのベースがOpensourceSamsungの公式ソースからではなく
CodeAuroraフォーラムからのmsm-3.0.yソースベースに切り替わり、また改めて、ソースを仕切り直した訳です。
(つまり全部手作り)
具体的に言うと
https://github.com/kbc-developers/andro ... a8169d6a05
この時点デスね。
ここから色々手探りで直していった訳ですが、逆に言えば自分が当てた変なカスタムコミット以外をDiablo Kernelに当てていけば
Diablo Kernelの機能を全て保持したままSC03Dでも使えるようになる「ハズ」です。
それでは早速、このコミットをcherry-pickで当ててみましょう。
Code: Select all
git cherry-pick 39b238ea688f4f4ae4f6253a388f78a8169d6a05
↑のURLの変な文字列と一緒です。
Re: SC-03Dのkernel source merge(cherry-pick編)
実行した結果
error: could not apply 39b238e... Added JPN Model(SC03D,SC03D),build script and release-tools
hint: after resolving the conflicts, mark the corrected paths
hint: with 'git add <paths>' or 'git rm <paths>'
hint: and commit the result with 'git commit'
と出ました。つまりコンフリクト起きたよって事です。
これは当たり前で、今は2014年3月ですから、1年前です
カーネルソースもだいぶ変わっていますし
正常に当たらないのは想定内の事でした。
ではコンフリクトしたファイルをみてみましょう。
結果
arch/arm/configs/cyanogenmod_quincydcm_defconfig
arch/arm/mach-msm/qdsp6v2/board-msm8x60-audio.c
arch/arm/mach-msm/board-msm8x60_q1.c
arch/arm/mach-msm/Kconfig
arch/arm/mach-msm/gpiomux-8x60_q1.c
drivers/input/touchscreen/qt602240_ts.c
drivers/input/keyboard/cypress-touchkey.c
drivers/input/keyboard/Kconfig
drivers/media/nmi326/nmi326.h
drivers/media/nmi326/nmi326.c
drivers/media/Makefile
コンフリクト数
git diff | grep '<<<<<<< HEAD' | wc -l
125箇所
ファイル数の割にだいぶ多いですね。
今回は綺麗にmergeしたいので、出きるだけ、git checkout -ours (or -thiers)を出来るだけ使わず綺麗に処理したいと思います。
error: could not apply 39b238e... Added JPN Model(SC03D,SC03D),build script and release-tools
hint: after resolving the conflicts, mark the corrected paths
hint: with 'git add <paths>' or 'git rm <paths>'
hint: and commit the result with 'git commit'
と出ました。つまりコンフリクト起きたよって事です。
これは当たり前で、今は2014年3月ですから、1年前です
カーネルソースもだいぶ変わっていますし
正常に当たらないのは想定内の事でした。
ではコンフリクトしたファイルをみてみましょう。
Code: Select all
grep -lr '<<<<<<< HEAD' *
arch/arm/configs/cyanogenmod_quincydcm_defconfig
arch/arm/mach-msm/qdsp6v2/board-msm8x60-audio.c
arch/arm/mach-msm/board-msm8x60_q1.c
arch/arm/mach-msm/Kconfig
arch/arm/mach-msm/gpiomux-8x60_q1.c
drivers/input/touchscreen/qt602240_ts.c
drivers/input/keyboard/cypress-touchkey.c
drivers/input/keyboard/Kconfig
drivers/media/nmi326/nmi326.h
drivers/media/nmi326/nmi326.c
drivers/media/Makefile
コンフリクト数
git diff | grep '<<<<<<< HEAD' | wc -l
125箇所
ファイル数の割にだいぶ多いですね。
今回は綺麗にmergeしたいので、出きるだけ、git checkout -ours (or -thiers)を出来るだけ使わず綺麗に処理したいと思います。
Re: SC-03Dのkernel source merge(cherry-pick編)
また上のファイルからgeditで開いて、「=======」で検索し
どちらの、箇所を選ぶか決めるわけですが
今回は原則「<<<<<<< HEAD」の部分を選択します。
何故ならDiablo kernelにしたい訳ですから、KBCで当てる部分は必要最低限のもので十分な訳です。
じゃあ必要最低限なものってなんだ?ってことですが、「JPN_MODEL_SC_03D」「JPN_MODEL_SC_05D」
「JPN_OPERATOR_NTT」「TARGET_LOCALE_JPN」で分岐してる所と考えてくれていいです。
※その他にも微妙な違いはありますが…
という訳で事務的に修正していき注意すべき点があれば、随時ここに書いていきたいと思います。
ちょっと時間かかるかな…
どちらの、箇所を選ぶか決めるわけですが
今回は原則「<<<<<<< HEAD」の部分を選択します。
何故ならDiablo kernelにしたい訳ですから、KBCで当てる部分は必要最低限のもので十分な訳です。
じゃあ必要最低限なものってなんだ?ってことですが、「JPN_MODEL_SC_03D」「JPN_MODEL_SC_05D」
「JPN_OPERATOR_NTT」「TARGET_LOCALE_JPN」で分岐してる所と考えてくれていいです。
※その他にも微妙な違いはありますが…
という訳で事務的に修正していき注意すべき点があれば、随時ここに書いていきたいと思います。
ちょっと時間かかるかな…
Re: SC-03Dのkernel source merge(cherry-pick編)
cyanogenmod_quincydcm_defconfig
だけやたら、コンフリクト数多いので、
にしました。どうせconfigだし、SC-05Dだからまぁいいかとw
これで
63箇所
頑張ろう
だけやたら、コンフリクト数多いので、
Code: Select all
git checkout --ours arch/arm/configs/cyanogenmod_quincydcm_defconfig
これで
Code: Select all
git diff | grep '<<<<<<< HEAD' | wc -l
頑張ろう
Re: SC-03Dのkernel source merge(cherry-pick編)
arch/arm/mach-msm/board-msm8x60_q1.c
arch/arm/mach-msm/gpiomux-8x60_q1.c
もSC05D用なので、とりあえず
ours theirs 極力使わないというポリシー既に破ってるw
いいんです。自分、SC05D持ってないし、時間が惜しいw
現在44箇所
arch/arm/mach-msm/gpiomux-8x60_q1.c
もSC05D用なので、とりあえず
Code: Select all
git checkout --ours arch/arm/mach-msm/board-msm8x60_q1.c
Code: Select all
git checkout --ours arch/arm/mach-msm/board-msm8x60_q1.c
いいんです。自分、SC05D持ってないし、時間が惜しいw
Code: Select all
git diff | grep '<<<<<<< HEAD' | wc -l
Re: SC-03Dのkernel source merge(cherry-pick編)
drivers/media/nmi326/nmi326.h
drivers/media/nmi326/nmi326.c
これらはワンセグ関係なので、SC03Dにはワンセグないから、これもoursで処理
24箇所!ぉぉだいぶ減ったw(ただの手抜きw)
残りは
arch/arm/mach-msm/qdsp6v2/board-msm8x60-audio.c
arch/arm/mach-msm/Kconfig
drivers/input/touchscreen/qt602240_ts.c
drivers/input/keyboard/cypress-touchkey.c
drivers/input/keyboard/Kconfig
drivers/media/Makefile
6ファイル
drivers/media/nmi326/nmi326.c
これらはワンセグ関係なので、SC03Dにはワンセグないから、これもoursで処理
Code: Select all
git diff | grep '<<<<<<< HEAD' | wc -l
残りは
arch/arm/mach-msm/qdsp6v2/board-msm8x60-audio.c
arch/arm/mach-msm/Kconfig
drivers/input/touchscreen/qt602240_ts.c
drivers/input/keyboard/cypress-touchkey.c
drivers/input/keyboard/Kconfig
drivers/media/Makefile
6ファイル
Re: SC-03Dのkernel source merge(cherry-pick編)
drivers/input/touchscreen/qt602240_ts.c
を編集している間に、こういう箇所を見つけた
||が&&に変わっている。
同じ事なんだろうが、何となく変えたんだろうね。<<<<<<< HEADを優先したいとこだが、!defined (CONFIG_JPN_MODEL_SC_03D)もつけたいので
ここは、に手で修正
を編集している間に、こういう箇所を見つけた
Code: Select all
<<<<<<< HEAD
#if !defined (CONFIG_USA_MODEL_SGH_I577) && !defined(CONFIG_CAN_MODEL_SGH_I577R) && !defined (CONFIG_USA_MODEL_SGH_I727) && !defined (CONFIG_USA_MODEL_SGH_T989)
=======
#if !defined (CONFIG_USA_MODEL_SGH_I577) || !defined(CONFIG_CAN_MODEL_SGH_I577R) || !defined (CONFIG_USA_MODEL_SGH_I727) || !defined (CONFIG_USA_MODEL_SGH_T989) || !defined (CONFIG_JPN_MODEL_SC_03D)
>>>>>>> 39b238e... Added JPN Model(SC03D,SC03D),build script and release-tools
同じ事なんだろうが、何となく変えたんだろうね。<<<<<<< HEADを優先したいとこだが、!defined (CONFIG_JPN_MODEL_SC_03D)もつけたいので
ここは、
Code: Select all
#if !defined (CONFIG_USA_MODEL_SGH_I577) && !defined(CONFIG_CAN_MODEL_SGH_I577R) && !defined (CONFIG_USA_MODEL_SGH_I727) && !defined (CONFIG_USA_MODEL_SGH_T989) && !defined (CONFIG_JPN_MODEL_SC_03D)
Re: SC-03Dのkernel source merge(cherry-pick編)
何か手抜きしてると、あっという間に終わった。
Diabloさんの方がソース新しいから、手抜きしてもあまり不安要素は感じない。
ここで、Build走らせてもいいが、面倒なので一度
ここですぐにCrtl+o Ctrl+Xしたいとこなんだが、ちょっと黒歴史を直したい。
1年前、寝ぼけ眼でやってたから
Added JPN Model(SC03D,SC05D),build script and release-tools
と書くとこを
Added JPN Model(SC03D,SC03D),build script and release-tools
にしてしまったんだw 超恥ずかしいw
んで、ここで一度push
すると、このような姿になる
https://github.com/kbc-developers/andro ... bc-diablo2
https://github.com/kbc-developers/andro ... c82f982080
特に急かされているわけではないので、続きは後日…
Diabloさんの方がソース新しいから、手抜きしてもあまり不安要素は感じない。
ここで、Build走らせてもいいが、面倒なので一度
Code: Select all
git add .
Code: Select all
git add -u
Code: Select all
git commit
1年前、寝ぼけ眼でやってたから
Added JPN Model(SC03D,SC05D),build script and release-tools
と書くとこを
Added JPN Model(SC03D,SC03D),build script and release-tools
にしてしまったんだw 超恥ずかしいw
んで、ここで一度push
Code: Select all
git remote add kbc-diablo2 git@github.com:kbc-developers/android_kernel_samsung_msm8660.git
Code: Select all
git push origin kbc-diablo2:kbc-diablo2
https://github.com/kbc-developers/andro ... bc-diablo2
https://github.com/kbc-developers/andro ... c82f982080
特に急かされているわけではないので、続きは後日…