SC-03Dのkernel source merge(cherry-pick編)

カーネルやカスタムROMに関する話題・質問はこちらへ

Moderator: Samsungモデレータ

HomuHomu
Posts: 211
Joined: 2013年May月30日(Thu) 21:31

SC-03Dのkernel source merge(cherry-pick編)

Post by HomuHomu » 2014年Mar月05日(Wed) 22:25

前回の質問で「kernel merge」についての質問だったので
いきなり全く違うベースのソースからgit mergeをするという荒技を行いましたが
本来、ああいう強引なmergeはするべきではありません。
(あくまでもmergeでという質問だったので、手抜きで帳尻を合わせただけです)
自分がリリースするなら、140個もコンフリクト出た時点でmerge branchによる強引は手法はやめ
使いたいカーネルソースをベースとして欲しい機能だけcherry-pickで入れていく手段をとります。
今回は、その実践編ということで、またDiablo kernelさんのソースを使い、機能を殺さずSC03D(SC05Dも?)でも使えるような
port手法について解説したいと思います。
このportは時間がかかるため、何日かに分けて進めていきたいと思ってます。
※もし上手くいかないようであれば、このトピックを消して裸足で逃げ出しますw

HomuHomu
Posts: 211
Joined: 2013年May月30日(Thu) 21:31

Re: SC-03Dのkernel source merge(cherry-pick編)

Post by HomuHomu » 2014年Mar月05日(Wed) 22:35

まずは
今回はあくまでもDiablo kernelさんのソースをベースとするため
cloneで持ってくるのは、もちろんDiabloさんからです。

Code: Select all

git clone git@github.com:Hellybean/android_kernel_samsung_msm8660-common.git -b cm-11.0
その後、fetchでkbcのソースを引っ張ってくる形ですね。

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
これでDiablo kernelさんのソースにkbcのソースをportする準備が整いました。

Code: Select all

git branch -a
してみましょう。
現在いるブランチがDiablo kernelさんのcm-11.0
その下にkbc-diablo2というブランチが出来上がっていますが、これがKBCのSC03Dのカーネルソースになります。

HomuHomu
Posts: 211
Joined: 2013年May月30日(Thu) 21:31

Re: SC-03Dのkernel source merge(cherry-pick編)

Post by HomuHomu » 2014年Mar月05日(Wed) 22:49

自分が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で当ててみましょう。

Code: Select all

git cherry-pick 39b238ea688f4f4ae4f6253a388f78a8169d6a05
cherry-pick 以下の変な文字列はコミットIDです。
↑のURLの変な文字列と一緒です。

HomuHomu
Posts: 211
Joined: 2013年May月30日(Thu) 21:31

Re: SC-03Dのkernel source merge(cherry-pick編)

Post by HomuHomu » 2014年Mar月05日(Wed) 23:01

実行した結果
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)を出来るだけ使わず綺麗に処理したいと思います。

HomuHomu
Posts: 211
Joined: 2013年May月30日(Thu) 21:31

Re: SC-03Dのkernel source merge(cherry-pick編)

Post by HomuHomu » 2014年Mar月05日(Wed) 23:11

また上のファイルからgeditで開いて、「=======」で検索し
どちらの、箇所を選ぶか決めるわけですが
今回は原則「<<<<<<< HEAD」の部分を選択します。
何故ならDiablo kernelにしたい訳ですから、KBCで当てる部分は必要最低限のもので十分な訳です。
じゃあ必要最低限なものってなんだ?ってことですが、「JPN_MODEL_SC_03D」「JPN_MODEL_SC_05D」
「JPN_OPERATOR_NTT」「TARGET_LOCALE_JPN」で分岐してる所と考えてくれていいです。
※その他にも微妙な違いはありますが…

という訳で事務的に修正していき注意すべき点があれば、随時ここに書いていきたいと思います。
ちょっと時間かかるかな…

HomuHomu
Posts: 211
Joined: 2013年May月30日(Thu) 21:31

Re: SC-03Dのkernel source merge(cherry-pick編)

Post by HomuHomu » 2014年Mar月05日(Wed) 23:22

cyanogenmod_quincydcm_defconfig
だけやたら、コンフリクト数多いので、

Code: Select all

git checkout --ours arch/arm/configs/cyanogenmod_quincydcm_defconfig
にしました。どうせconfigだし、SC-05Dだからまぁいいかとw
これで

Code: Select all

git diff | grep '<<<<<<< HEAD' | wc -l
63箇所
頑張ろう

HomuHomu
Posts: 211
Joined: 2013年May月30日(Thu) 21:31

Re: SC-03Dのkernel source merge(cherry-pick編)

Post by HomuHomu » 2014年Mar月05日(Wed) 23:31

arch/arm/mach-msm/board-msm8x60_q1.c
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
ours theirs 極力使わないというポリシー既に破ってるw
いいんです。自分、SC05D持ってないし、時間が惜しいw

Code: Select all

git diff | grep '<<<<<<< HEAD' | wc -l
現在44箇所

HomuHomu
Posts: 211
Joined: 2013年May月30日(Thu) 21:31

Re: SC-03Dのkernel source merge(cherry-pick編)

Post by HomuHomu » 2014年Mar月05日(Wed) 23:47

drivers/media/nmi326/nmi326.h
drivers/media/nmi326/nmi326.c
これらはワンセグ関係なので、SC03Dにはワンセグないから、これもoursで処理

Code: Select all

git diff | grep '<<<<<<< HEAD' | wc -l
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ファイル

HomuHomu
Posts: 211
Joined: 2013年May月30日(Thu) 21:31

Re: SC-03Dのkernel source merge(cherry-pick編)

Post by HomuHomu » 2014年Mar月05日(Wed) 23:58

drivers/input/touchscreen/qt602240_ts.c
を編集している間に、こういう箇所を見つけた

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)
に手で修正

HomuHomu
Posts: 211
Joined: 2013年May月30日(Thu) 21:31

Re: SC-03Dのkernel source merge(cherry-pick編)

Post by HomuHomu » 2014年Mar月06日(Thu) 00:34

何か手抜きしてると、あっという間に終わった。
Diabloさんの方がソース新しいから、手抜きしてもあまり不安要素は感じない。
ここで、Build走らせてもいいが、面倒なので一度

Code: Select all

git add .

Code: Select all

git add -u

Code: Select all

git commit
ここですぐに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

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

特に急かされているわけではないので、続きは後日…

Post Reply