2015年5月9日土曜日

BLUL不可能なAndroid端末でモジュールを作成する方法(その2)

 今、Xperia Z3(D6653)を使用しています。
 入手後はKitkat(4.4.4)であったため、Androplusカーネルからcpufreqモジュールのソースをダウンロードして以前使用していたSO-02Eで作成したソースとのマージを行って使用していました(SmartassH3はZ3のカーネルではearlysuspend設定が無効化されているためそのままではコンパイル不可能)。
 先日Lollipop(5.0.2)が降ってきた際に再度カーネルモジュールを作成しようと思いましたが、以前記載した方法ではvermagic対応が出来ませんでした。(MakefileのEXTRAVERSIONに指定文字列を入力したが、その後ろに"-perf"と付けられてしまった)。
 また、新しいカーネルダウンロード方法(この方法なら場合によっては複数の機種で同一のソースツリーを管理可能)が分かったので、再度まとめてみることにします。

1.カーネルソースのダウンロード方法

以前のブログで紹介したdeveloper worldからダウンロードする方法以外に、最近Githubで直接ダウンロードする方法が追加されましたのでこちらを紹介します。
git clone https://github.com/sonyxperiadev/kernel-copyleft
cd kernel-copyleft
git branch -r
git checkout <branch-name>
まず現在のgithub.comに登録されているsonyのkernelリポジトリを自分のPCに複写します(1行目)。
 次に複写したリポジトリ内部に入り(2行目)、全ブランチ名を表示させます(3行目)。
 ちなみに現在有効+使用中のブランチを表示させるにはgit branchと入力します。このコマンドで行頭に*マークが付いているものが現在使用中のブランチです。
 最後に自分がカーネルメイクしたいブランチを4行目のコマンドで有効化します。この時<branch-name>で指定するブランチ名はgit branch -rで表示したブランチ名一覧から先頭の"origin/"を省いたものです。

2.vermagicの指定方法

  以前紹介した方法ではうまく動かないことがありました。ちょっとググってみましたが、以下の方法がうまく動作したのでこれを紹介します(http://forum.xda-developers.com/showthread.php?t=2495152)。
 上記のリンクの If you want use automaticaly this vermagic, you can modify into the custom kernel this file :に書かれている通り include/config/kernel.release を開き、実機のカーネルバージョンで調べた内容を記載して下さい。
 その後、カーネルのビルドを行い、ストックカーネルで生成されたモジュール(例えば drivers/misc/tspp.ko など)が希望のvermagicを所有していることを確認して下さい。
 もしkernel.releaseファイルが無ければ、touchコマンドやエディタで新規作成して保存するといいでしょう。この方法でもvermagicがうまく動作しない場合は以前に細工したMakefileが悪さしている可能性もあるかもしれませんので、EXTRAVERSIONの記述は消して再実行をお勧めします。
 結局、.configのCONFIG_LOCALVERSIONとMakefileのEXTRAVERSIONが重なる場合があるときちんとバージョン情報が入らないようです。
 実際にコンパイルされる際に付けられるカーネルのバージョンはinclude/config/kernel.releaseファイルに書き込まれるのですが、これはMakefileで生成されるファイルで、記載を見た限りでは $EXTRAVERSIONの後ろに CONFIG_LOCALVERSIONが書込される構造となっています。
 例えば$EXTRAVERSIONに-perf-hogehogeと書き、.configのCONFIG_LOCALVERSIONにストックカーネルのソースコードのように-perfと書き込まれていた場合はkernel.releaseファイルの内容は-perf-hogehoge-perfとなります。
 これを避けるためには.configの_LOCALVERSIONかMakefileのEXTRAVERSIONのどちらかにvermagic関連の記述を統一する必要があります。

0 件のコメント:

コメントを投稿