Android カーネルのビルド と 環境の構築までの手順
公開日:2020/10/18
本項は、SHARP SH-01G を MVNO でテザリングする方法
のページにて一部触れた内容です。
メーカーで販売されている、Androidカーネルは、GPLライセンスのため、カーネルのソースコードを、公開する義務があります。
その為、SHARPの端末においても、SHARPのWebサイトにて各端末のソースコードが公開されています。
この公開されているソースコードを使用して、個人でビルドする事が出来るのですが、
このカーネルビルドまでの手順が、これまた恐ろしく面倒で手間だったので、これからRom焼きを挑戦する人の参考になればと思い、
環境構築までの手順を纏めてみました。
※ただ私の場合、実際にROM焼きまでは行っていないので、環境の準備と、カーネルのビルドまでの紹介となりますなります
Linuxk環境の準備
Androidカーネルの作成には、LinuxOSを搭載したパソコンが必要になります。
※Googleのサイトでは、MacOS 又は LinuxOS の環境が必要になると書いてあり、
Windowsでは対応していないとの説明があります。
ですが、その為だけにLinuxのパソコンを新調するわけにもいかないので、
Windows上に、Linuxの仮想マシンを作ってそのマシン上でビルドするまでの手順で記載します。
また自分は、SHL25のroot化に調整した際でしか試していないので、あくまでSHL25での
カーネルビルド迄の手順となりますので、予めご了承下さい。
仮想マシンの準備
仮想マシンは、VMware Wokstation を利用しましょう。
(※Android 2.3以上のカーネルビルドを行う為には、ゲストOSも含めて64bit CPU環境である必要があります。)
参照:https://source.android.google.cn/setup/build/initializing?hl=ja
ですので、必然的に、VMware Player ではなく VMware Wokstation を使うことになるはずです。
VMware Wokstation は、VMwareのホームページから、無料でダウンロードできます。
Verは特に指定はありませんが、Windows10で使用する場合は、Ver.15 以上を使用した方が良いでしょう。
VMware の準備が出来たら、次にLinuxの仮想マシンのイメージOSを入手します。
これまた、Linuxのディストリビューションがたくさんあるので迷いますが、今回はUbuntu を使用した例で紹介します。
Ubuntuも、Verがたくさんあるのですが、新しければ良いと言う訳ではないようで、AndroidOSの開発Ver
に合わせたVerを選択する必要あるようです。
google のWebサイトの、旧バージョンのサポート のページにて、ubuntu と AndroidOS Ver
について言及している記載があります。
参照:https://source.android.google.cn/setup/build/older-versions?hl=ja
ですので、4.4(kitkut) をビルドしたいので、 Ubuntu のsWebサイトから、
Ubuntu 12.04(Precise)のイメージOSをダウンロードしてきます。
バックナンバーのページから ubuntu-12.04.5-desktop-amd64.iso 探してきてください。
OSのイメージiso のダウンロード出来たら VMware Wokstation の 『新規仮想マシンの作成』を選んでマシンを作ります。
ここでは、ガイダンスに従って、デフォルトの設定で作成して問題ないでしょう。
もし メモリに余裕があるのであれば 4GB 位確保割り当てた方がいいかもしれません。
仮想マシンを起動する
仮想マシンが出来上がったら、早速起動してみましょう。 そのまま初めても良いのですが、キーボードの配置が英語のままなので、
変更します。 下記の写真を参考に、キーボードレイアウトを変更します。
ダウンロードとインストールに少々時間がかかりますが、言語を選択したら、あとは自動で行ってくれます。
インストールが出来たら、追加された日本語キーボードを、ドラッグして一番上に移動させて、初めて有効になります。
画面上端の、キーボードのマークが、ja になるはずです。
次に、そのままでのいいのですが、OSを日本語環境にもできるので変更したい方は一緒に行いましょう。
キーボードと同じく、初めにインストールをダウンロードが始まるので、気長にまちます。
インストールが完了したら、キーボードの時と同じくドラックして一番上に持ってきて、再起動を行うと有効になりあます
前準備ができたので、早速カーネルビルドの準備にはいります。
まず初めに、SHARPのWebサイトから、SHL25のカーネルソースをダウンロードします。
Ubuntu の Firefox 起動して、『SHL25 カーネルソース』 で検索すれば、一番初めに表示されるはずです。
ビルド番号01.00.05を を選んで、
・kernel.tar.gz
・vendor.tar.gz
をダウンロードしておいてください。
ダウンロードが出来たら、Ubuntu(Linux)のターミナルを起動して、
sudo apt-get update
と打って、とりあえずシステムを最適化させておきます。
次に、Android で使われている arm のアーキテクチャ用の、クロスコンパイラを用意します。
SHL25の コンパイラのバージョンは、実機から調べる事ができます。
SHL25をUSBでつないで、/proc/version に記載があるので開いてみましょう。
※AndroidStudioがあれば、接続機のデバイス・ファイルエクスプローラーから、直接見る事ができます。
記載のとおり、Ver_4.7 の gcc を準備しましょう。
googleから自力て探すのも良いのですが、
SHL25で使用出来そうな、クロスコンパラが、Githubに公開されていたので、利用させてもらいましょう。
https://github.com/DooMLoRD/android_prebuilt_toolchains.git
では早速端末から、git clone をしたいのですが、初めは git がインストールされていないので
sudo apt-get install git
と打って、Unbutuに git をインストールしましょう。
インストールが出来たら早速 git clone してみましょう
git clone https://github.com/DooMLoRD/android_prebuilt_toolchains.git
エクスプローラーの、ホームパス上に、android_prebuilt_toolchains
フォルダが出来上がります。
次に作業用の、ディレクトリを作っておきましょう。
とりあえず、ホームディレクトリ上に、メイン作業場となる 『SHL25』 ディレクトリを作っておきましょう
ディレクトリができたら、先ほどSHARPのサイトから落とした、2種類のカーネルソースを展開して、SHL25に突っ込みます。
再びターミナルに戻って、早速 make と打ってしまいたい所なのですが、先ほど準備した
gcc(クロスコンパイラ)のパスの設定fが出来ていないので、パスの設定をします。
ターミナルより、
$ export ARCH=arm
$ export CROSS_COMPILE=arm-linux-androideabi-
$ export PATH=~/android_prebuilt_toolchains/arm-linux-androideabi-4.7/bin:$PATH
と打ってgccのパスを通します。
※上記は、一時的なパスなので、Ubuntuを再起動するとは消えるので注意して下さい。
最後に
echo $PATH
と打ってでパスがちゃんと通っているか確認しておきましょう。
※補足:今回は、実機と同じカーネルビルドをするに、ビルドコンフィグを変更はしないつもりなのですが、
ビルド時の条件を変更したい場合は、 meka menuconfig を使用します。 初期の状態では、使用する事ができ
ないので、下記コマンド打ってライブラリをインストールする事が出来ます。
sudo apt-get install ncurses-dev
カーネルソースをビルドする
クロスコンパイラの準備と、パスの設定、ソースコードが準備できたので、
早速ビルトしたい所なのですが、SHARPのからダウンロードした、kernel の ソースはそのままビルドするとエラーが出るので、一部ソースコードの修正が必要です。
SHL25の(01.00.05)場合
/arch/arm/march-msm/smd_init_dt.c の 24行目のinclude を <> から "" に変える
/drivers/cpufreq/cpufreq_ondemand.c の 32行目のinclude を <> から "" に変える
/drivers/sharp/shtps/sy3000/tm2979-001/shtps_cfg_tm2979-001.h の 88行、89行、tm2979-001 を消す
/sound/soc/msm/qdsp6v2/rtac.c の 28行目のinclude を <> から "" に変える
※補足:先程説明しましたが、SHL25の作業ディレクトリに vendor ソース が 無い場合、
/drivers/sharp/wifi/qcom のシンボリックリンクでエラーがでてビルド出来ないのでこれも注意が必要です。
プログラムソースが修正が出来て、ようやく make したいところですが、
実機と同じ条件でビルドする為の詳細情報が記された、.config ファイルが無いので、準備しなければなりません。
ですが、最後に一つ問題があって、通常この .configファイルは、実機の /proc/
に入っている事が多いようなのですが、SHL25 には入っておらず、抽出する事が出来ません。
これを打開するためには、SHL25のカーネルソース内の、script ディレクトリ内にある、extract-ikconfig スクリプト
を使って 実機から作り出した カーネルダンプから .configファイルを抽出する事ができます。
では、このカーネルのダンプをどうやって作り出すのかというと、 これまた、公開してくれている素晴らしい方が居らっしゃるので、利用させて頂きましょう。
てんぷ (id:a_one_of_fan) さんのブログで公開している
『国産スマホをroot化するには LSM解除編(前半)』
記事のページで、カーネルダンプを行う、実行ファイルを公開しているので、ダウンロードさせてもらいます。
同ページの記事で、kernel.dump の取り方の詳細が記載されているので、SHL25も同様の方法で取る事が出来ます。
ただし、一時root 取らないと、失敗した記憶があるので、SHL25においても、
SH-01Gのroot化 のページで紹介している手法を利用して仮root になる事ができるので、
もし失敗した場合は、仮rootになってから 再度行ってみて下さい。
無事、kernel.dump が取れたら、Unbuntu の、
~/SHL25/kernel/
のディレクトリに突っ込んで、下記コマンドを実行してください。
scripts/extract-ikconfig kernel.dump > .config
問題がなければ、kernel ディレクトリに .config ファイルが出来上がるはずです。
おそらくそのままでは、.cofigファイルは、隠しファイル扱いになっていて見つけられないので、
ショートカットの ctrl+H を操作してエクスプローラ上に表示させましょう。
※.config ファイルはビルド失敗時や、やり直したい時の為に、そのままだと上書きされてしまうので、
別のストレージ等にコピーを取っておいた方が良いでしょう。
.config の準備が出来たので、いよいよ make してみましょう。
恐らく10分以上かかるでしょう。 完了するまで気長に待ちます。
駄目でした。 WARNING が2個でて、ビルドが中断されました。
警告メッセージでは、config との2個の不一致とでておりますが、cnfigは、実機から抽出しているので
間違えようがありませんし、カーネルのソースコードは、メーカーのサイトから落としたそのものになるので
(一部修正は加えましたが・・・・)既知の問題であるとし考えられないので、お勧めできないと、
メッセージが出ておりますが、無理やりビルドしてしまいましょう。
make CONFIG_NO_ERROR_ON_MISMATCH=y
と打ってみます。再度待ちます。
できました。 途中、警告メッセージがたくさんでたような気がしますが、無事最後までビルドが通ったようです。
/kernel/arch/arm/boot/ ディレクトリ内に
zimage
が出来ているはずです。
本項の内容はここまでとなります。 本当は、fi01さんが、公開している android_mmc_protect のモジュール作成とと、
ハードウェアライトプロテクトの解除までの手順を記載したかったのですが、紹介できるほど自分が理解していないので悔しいのですが断念します。
ここまで読んで頂きまして有難うございます、とともに本記事が少しでもお役にたてたなら光栄です。