Windows 10でAndroidカーネルを構築する方法
Appualには、AndroidオープンソースプロジェクトからカスタムROMをビルドする方法など、Android開発に関する優れたガイドがいくつかありますが、これらのガイドは通常、純粋なLinuxビルド環境を対象としています。
このガイドでは、Windows 10でAndroidカーネルをビルドする方法を示します。はい、Linuxビルド環境を引き続き使用しますが、Windows 10内のLinuxサブシステムになります。 Android向けの開発に興味があるユーザーは、ガイドに従ってください。
このガイドでは、特に、ARMおよびMediaTekデバイス用のカーネルの構築方法、機能の追加、およびGitの使用の基本的な概要を学習します。
必要条件
- Windows 10 x64(Fall Creatorのアップデート付き)
Linux環境のセットアップ
- Windows 10では、[設定]> [更新とセキュリティ]> [開発者向け]> [開発者モードを有効にする]に移動します。
- 次に、[コントロールパネル]> [プログラム]> [Windowsの機能の有効化または無効化]> [Linux用Windowsサブシステムの有効化]に移動します。
- PCを再起動します。
- Linuxサブシステムを起動し、ダウンロードプロセスを実行できるようにします。 パスワードを設定して、紛失しないでください。
- 次に、Windowsアプリストアに移動し、Ubuntuをダウンロードします。
- Windows 10デスクトップでUbuntuを起動すると、ユーザー名とパスワードが要求されます。
- Ubuntuで、ネイティブターミナルを起動し、次のコマンドを入力します。apt-get update
- これにより、アプリと依存関係のすべてのリポジトリが更新されます。
- 次にターミナルタイプで:sudo apt-get install -y build-essential kernel-package libncurses5-dev bzip2
- すべての依存関係が正しくインストールされたかどうかを確認するには、ターミナルで「gcc」と入力します(引用符なし)。
- 「gcc」が既にインストールされている場合は、「gcc:致命的なエラー:入力ファイルがありません」と表示されるはずです。
- これで、ターミナルで「make」と入力できます。 「make」がすでにインストールされている場合は、「make:***ターゲットが指定されておらず、メイクファイルが見つかりません」と表示されます。 やめる。"
- 次に「git」と入力します。「git」が既にインストールされている場合、基本的なgitコマンドが表示されます。
- ここで、いくつかのツールチェーンが必要です(GCC、Linaro、および少数のカスタムなものを含む、いくつかのタイプがあります)。 一部のデバイスには異なるツールチェーンが必要な場合があります。たとえば、すべてのデバイスカーネルがGCCで起動またはコンパイルされるわけではありません。
ARMデバイスの場合
これにはGCC 4.7を使用します。
- Linuxターミナルを開き、「mkdir kernel」と入力します
- 次のように入力します:cd kernel
- (「カーネル」である必要はありません。これは簡単にするためです。好きな名前を付けることができます。)
- 次のように入力します:git clone //android.googlesource.com/platform/prebuilts/gcc/linux-x86/arm/arm-eabi-4.7
ARM 64デバイスの場合
ARM 64デバイス用の64ビットカーネルコンパイラ、たとえばaarch64が必要です。
デバイスのソースファイルを取得する
カーネルソースをホストするGitHubリポジトリを見つける必要があるため、これは扱いにくい部分です。 もちろん、それを検索する必要があります。ほとんどの場合、XDAフォーラムで見つけることができます。
カーネルソースGitの例を次に示します。
左上に「Branch:Completed by xxxx」と表示されます。
カーネル/プロジェクトにはさまざまなバージョンがあり、通常は「テスト」、「ベータ」、「最終リリース」などで区切られています。
通常、カーネルフォルダーは次のとおりです。
- / arch / arm / configs :ガバナーなど、デバイスのさまざまな構成ファイルが含まれます。
- / output / arch / arm / boot / :ここにzimageが保存されます。
- build.sh :構築プロセスを簡素化するスクリプト。
- /arm-cortex-linux-gnueabi-linaro_5.2-2015.11-2 :これは通常、カーネルソースに配置されたツールチェーンであるため、見つけやすくなっています。
カーネルソースをダウンロードする必要があります。
Linuxターミナルを開き、以前に作成したカーネルフォルダー(cd kernel)にいることを確認します。
次に、ターミナルに「git clone“ github kernelのURL” -b“ブランチ名”」と入力します
例:「git clone//github.com/atxoxx/android_ke…amsung_msm8974-b xenomTW」
カーネルの構築
簡単にするために、ファイルエクスプローラーの場所に移動できます。 / home / user ID / kernel(またはカーネルフォルダーに名前を付けたもの)でなければなりません。
ツールチェーンとカーネルソース用の2つのフォルダーが表示されます。 カーネルソースフォルダー内に移動します。
ARMデバイスの場合
ターミナルで、次のコマンドを入力します。
#!/ bin / bash export ARCH = arm export CROSS_COMPILE = mkdir output make -C $(pwd)O = output "defconfigおよび必要に応じてバリアントの名前" make -j4 -C $(pwd)O = output
将来的にこれを簡単にするために、これらのコマンドの機能の概要を次に示します。
- #!/ bin / bash:シェルコマンドで実行するようにスクリプトに指示します
- export ARCH = arm:カーネルアーキテクチャタイプの定義(たとえば、arm64など)
- export CROSS_COMPILE = :ツールチェーンの場所を見つけます。 正確なパスと一致する必要があり、最後のダッシュは必須です。
- mkdir出力:コンパイルされたzimageを保存するためのディレクトリを作成します
- make -C $(pwd)O = output :カーネルのコンパイルをガイドするためのdefconfigを定義します。
- make -j4 -C $(pwd)O = output :ビルドプロセスが開始されると、-j#は、試行およびコンパイルの速度を指示します。 通常、この数値はCPUに応じて設定します。 たとえば、バジェットCPUで-j32を設定すると、大きな不安定性が生じる可能性があります。
- cp output / arch / arm / boot / Image $(pwd)/ arch / arm / boot / zImage :これは、イメージを2番目のパスに移動するためのものです。
もう一つの例:
#!/ bin / bash export ARCH = arm export CROSS_COMPILE = $(pwd)/arm-cortex-linux-gnueabi-linaro_5.2-2015.11-2/bin/arm-cortex-linux-gnueabi- mkdir output make -C $ (pwd)O = output msm8974_sec_defconfig VARIANT_DEFCONFIG = msm8974_sec_ks01_skt_defconfig SELINUX_DEFCONFIG = selinux_defconfig make -j4 -C $(pwd)O = output cp output / arch / arm / boot / Image $(pwd)/ arch / arm / boot / zImage
ARM 64デバイスの場合
#!/ bin / bash export ARCH = arm64 export CROSS_COMPILE = "ツールチェーンへのパス"(「nameofarch-something-」などで終了する必要があります)mkdir output make -C $(pwd)O = output "name of defconfig必要に応じてバリアントを作成します "make -j4 -C $(pwd)O = output
Mediatek(MTK)デバイスの場合
#!/ bin / bash export CROSS_COMPILE = "ツールチェーンへのパス"( "nameofarch-something-"のように終了する必要があります)export ARCH = arm ARCH_MTK_PLATFORM = make "必要に応じてdefconfigおよびvariantの名前" make -j4
カーネルアーキテクチャに必要な手順を完了したら、ターミナルに次のように入力できます。sudo bash build.sh
その後、ユーザーパスワードを入力すると、コンパイルプロセスが開始されます。
少し時間がかかりますが、通常はそれほど長くはなく、カーネルのコンパイルはAndroid ROM全体のコンパイルとは異なります。 これは実際にはCPUに依存しています。たとえば、8GBのRAMを搭載したAMD Phenom X4 3.4GHzは、最初から最後までコンパイルするのに約10分かかります。
完了すると、「zimage is ready」などのメッセージで通知されます。
ARMおよびARM64デバイス
「/ Output / arch / arm / boot /」に移動して、zimageを見つけます。
Mediatekデバイス
「/ arch / arm / boot /」に移動して、zimageを見つけます。
すべてのカーネルビルドがZimageファイルになるわけではなく、他のイメージ形式としてビルドできる場合があります。
重要:再度コンパイルする場合は、コンパイルプロセスを再度開始する前に、コマンドmake cleanおよびmrproperを入力することをお勧めします。
カーネルブートの作成
選択できるオプションは2つあります。
anykernelメソッドを使用できます(このXDAスレッドでXDAユーザー@ osm0sisによって定義されます)。 チュートリアル全体を読む必要がありますが、手順の概要は次のとおりです。
- zImageをルートに配置します(カスタムデバイスを必要とするデバイスの場合は、dtbおよび/またはdtboもここに配置する必要があり、含まれていない場合はそれぞれ元にフォールバックします)
- 必要なramdiskファイルを/ ramdiskに、モジュールを/ modulesに(/ modules / system / lib / modulesなどのフルパスで)配置します
- / patchに必要なパッチファイル(通常はコマンドに付随する部分的なファイル)を配置します。
- anykernel.shを変更して、カーネルの名前、ブートパーティションの場所、含まれるramdiskファイルのアクセス許可を追加し、必要なramdiskの変更方法を使用します(オプションで、バナーファイルやバージョンファイルをルートに配置して、これらをフラッシュ中に表示します)
- `zip -r9 UPDATE-AnyKernel2.zip * -x .git README.md * placeholder`
他の方法としては、同じROM(CM、TouchWiz、EMUIなど)と同じAndroidバージョンからboot.imgを解凍する方法があります。 次に、Zimageを交換します。 繰り返しますが、これは非常に複雑なプロセスであり、正確なチュートリアルを読む必要がありますが、手順の概要は次のとおりです。
- 解凍します。
- コマンドライン「unpackimg」を使用するか、単に画像をドラッグアンドドロップします。 これにより、イメージが分割され、ramdiskがサブディレクトリに解凍されます。
- 必要に応じてRAMディスクを変更します。
- repackimgバッチスクリプトは入力を必要とせず、元のすべての画像情報(分割され保存された)を使用して、以前に分割されたzImageを新しくパックされた変更済みラムディスクと再結合します。
- クリーンアップバッチスクリプトは、フォルダを初期状態にリセットし、split_img + ramdiskディレクトリと、パックされた新しいramdiskまたはイメージファイルを削除します。
カーネルをフラッシュする前に、ストックboot.imgのバックアップを作成してから、カーネルをフラッシュして、Androidシステムが起動できるかどうかを確認する必要があります。
カーネルに機能を追加する
カーネルに機能を追加することは、それを強化する素晴らしい方法です。 CPUガバナー、IOスケジューラー、GPUのオーバークロック、オーディオ拡張など、微調整できるものがたくさんあります。
ガバナーを追加する例はこちらです(このガバナーのコードネームはIntellimmです)。
最初の2つのテキストボックスで、「arch / arm / configs /」の「msm8974_sec_defconfig」および「cm_msm8974_sec_defconfig」が変更されていることがわかります。
このファイルの行140と141の間に、このテキストが追加されました:「CONFIG_CPU_FREQ_GOV_INTELLIMM = y」
(この行は、カーネルをコンパイルするときにIntellimmを有効にするためのものです)
同じテクニックが他のテキストボックスにも適用されます(追加および削除されたものとその場所)
追加する機能に応じて、より多くのまたはより少ないファイルを変更、追加、または削除できます。
まとめると、コミットでは、行われたすべての変更とその他すべてを確認できます。
一般的なヒントとコツ
カーネル名とバージョンを変更する方法:
簡単な方法:
defconfigファイルの次の行を編集します。
「CONFIG_LOCALVERSION = "-"の後-defconfigで
例:CONFIG_LOCALVERSION =”-XenomTW-3.2.6″
高度な方法:
カーネルソースのルートフォルダーにあるMakefileに移動します。
次の行を追加します。
CONFIG_LOCALVERSION = "nameofyourkernel" LOCALVERSION = "versionofyourkernel"
バージョンVersion、PatchLevel、Sublevel、またはExtraversionの行を変更しないでください。
別の方法:
scripts / mkcompile_hに移動して、次の行を追加します。
LINUX_COMPILE_BY = "名前の選択" LINUX_COMPILE_HOST = "名前の選択"
PATH問題の解決:
「パスは正しいですか?」というエラーが発生した場合は、Linuxターミナルでこれを試してください。
"export PATH =" pathtotoolchainlocation "/ bin:$ PATH"
Windows 10からUbuntuフォルダーにアクセスする
Ubuntuへのパスは通常次のとおりです。
C:\ Users” NAME” \ AppData \ Local \ Packages \ CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc \ LocalState \ rootfs \ home
ただし、Windowsから直接ファイルを編集しないでください。通常、これによりファイルのアクセス権が破壊されるため、Linuxターミナル内からアクセス権をリセットする必要があります。