現在時刻 - 2017年8月18日(金) 16:10


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

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

モデレータ: Samsungモデレータ

  • 作成者
  • メッセージ

HomuHomu

  • 記事: 211
  • 登録日時: 2013年5月30日(木) 21:31

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

投稿記事2014年3月05日(水) 22:25

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

HomuHomu

  • 記事: 211
  • 登録日時: 2013年5月30日(木) 21:31

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

投稿記事2014年3月05日(水) 22:35

まずは
今回はあくまでもDiablo kernelさんのソースをベースとするため
cloneで持ってくるのは、もちろんDiabloさんからです。
コード: 全て選択
git clone git@github.com:Hellybean/android_kernel_samsung_msm8660-common.git -b cm-11.0

その後、fetchでkbcのソースを引っ張ってくる形ですね。
コード: 全て選択
cd ~/android_kernel_samsung_msm8660-common

コード: 全て選択
git fetch git@github.com:kbc-developers/android_kernel_samsung_msm8660.git cm-11.0:kbc-diablo2

これでDiablo kernelさんのソースにkbcのソースをportする準備が整いました。
コード: 全て選択
git branch -a
してみましょう。
現在いるブランチがDiablo kernelさんのcm-11.0
その下にkbc-diablo2というブランチが出来上がっていますが、これがKBCのSC03Dのカーネルソースになります。

HomuHomu

  • 記事: 211
  • 登録日時: 2013年5月30日(木) 21:31

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

投稿記事2014年3月05日(水) 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で当ててみましょう。
コード: 全て選択
git cherry-pick 39b238ea688f4f4ae4f6253a388f78a8169d6a05

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

HomuHomu

  • 記事: 211
  • 登録日時: 2013年5月30日(木) 21:31

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

投稿記事2014年3月05日(水) 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年前です
カーネルソースもだいぶ変わっていますし
正常に当たらないのは想定内の事でした。
ではコンフリクトしたファイルをみてみましょう。
コード: 全て選択
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

  • 記事: 211
  • 登録日時: 2013年5月30日(木) 21:31

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

投稿記事2014年3月05日(水) 23:11

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

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

HomuHomu

  • 記事: 211
  • 登録日時: 2013年5月30日(木) 21:31

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

投稿記事2014年3月05日(水) 23:22

cyanogenmod_quincydcm_defconfig
だけやたら、コンフリクト数多いので、
コード: 全て選択
git checkout --ours arch/arm/configs/cyanogenmod_quincydcm_defconfig

にしました。どうせconfigだし、SC-05Dだからまぁいいかとw
これで
コード: 全て選択
git diff | grep '<<<<<<< HEAD' | wc -l

63箇所
頑張ろう

HomuHomu

  • 記事: 211
  • 登録日時: 2013年5月30日(木) 21:31

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

投稿記事2014年3月05日(水) 23:31

arch/arm/mach-msm/board-msm8x60_q1.c
arch/arm/mach-msm/gpiomux-8x60_q1.c
もSC05D用なので、とりあえず
コード: 全て選択
git checkout --ours arch/arm/mach-msm/board-msm8x60_q1.c

コード: 全て選択
git checkout --ours arch/arm/mach-msm/board-msm8x60_q1.c

ours theirs 極力使わないというポリシー既に破ってるw
いいんです。自分、SC05D持ってないし、時間が惜しいw
コード: 全て選択
git diff | grep '<<<<<<< HEAD' | wc -l

現在44箇所

HomuHomu

  • 記事: 211
  • 登録日時: 2013年5月30日(木) 21:31

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

投稿記事2014年3月05日(水) 23:47

drivers/media/nmi326/nmi326.h
drivers/media/nmi326/nmi326.c
これらはワンセグ関係なので、SC03Dにはワンセグないから、これもoursで処理
コード: 全て選択
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

  • 記事: 211
  • 登録日時: 2013年5月30日(木) 21:31

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

投稿記事2014年3月05日(水) 23:58

drivers/input/touchscreen/qt602240_ts.c
を編集している間に、こういう箇所を見つけた
コード: 全て選択
<<<<<<< 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)もつけたいので
ここは、
コード: 全て選択
#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

  • 記事: 211
  • 登録日時: 2013年5月30日(木) 21:31

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

投稿記事2014年3月06日(木) 00:34

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

コード: 全て選択
git add -u

コード: 全て選択
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
コード: 全て選択
git remote add kbc-diablo2 git@github.com:kbc-developers/android_kernel_samsung_msm8660.git

コード: 全て選択
git push origin kbc-diablo2:kbc-diablo2

すると、このような姿になる
https://github.com/kbc-developers/andro ... bc-diablo2
https://github.com/kbc-developers/andro ... c82f982080

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

Return to 開発全般