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環境のセットアップ

  1. Windows 10では、[設定]> [更新とセキュリティ]> [開発者向け]> [開発者モードを有効にする]に移動します。
  2. 次に、[コントロールパネル]> [プログラム]> [Windowsの機能の有効化または無効化]> [Linux用Windowsサブシステムの有効化]に移動します。
  3. PCを再起動します。
  4. Linuxサブシステムを起動し、ダウンロードプロセスを実行できるようにします。 パスワードを設定して、紛失しないでください。
  5. 次に、Windowsアプリストアに移動し、Ubuntuをダウンロードします。
  6. Windows 10デスクトップでUbuntuを起動すると、ユーザー名とパスワードが要求されます。
  7. Ubuntuで、ネイティブターミナルを起動し、次のコマンドを入力します。apt-get update
  8. これにより、アプリと依存関係のすべてのリポジトリが更新されます。
  9. 次にターミナルタイプで:sudo apt-get install -y build-essential kernel-package libncurses5-dev bzip2
  10. すべての依存関係が正しくインストールされたかどうかを確認するには、ターミナルで「gcc」と入力します(引用符なし)。
  11. 「gcc」が既にインストールされている場合は、「gcc:致命的なエラー:入力ファイルがありません」と表示されるはずです。
  12. これで、ターミナルで「make」と入力できます。 「make」がすでにインストールされている場合は、「make:***ターゲットが指定されておらず、メイクファイルが見つかりません」と表示されます。 やめる。"
  13. 次に「git」と入力します。「git」が既にインストールされている場合、基本的なgitコマンドが表示されます。
  14. ここで、いくつかのツールチェーンが必要です(GCC、Linaro、および少数のカスタムなものを含む、いくつかのタイプがあります)。 一部のデバイスには異なるツールチェーンが必要な場合があります。たとえば、すべてのデバイスカーネルがGCCで起動またはコンパイルされるわけではありません。

ARMデバイスの場合

これにはGCC 4.7を使用します。

  1. Linuxターミナルを開き、「mkdir kernel」と入力します
  2. 次のように入力します:cd kernel
  3. (「カーネル」である必要はありません。これは簡単にするためです。好きな名前を付けることができます。)
  4. 次のように入力します: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によって定義されます)。 チュートリアル全体を読む必要がありますが、手順の概要は次のとおりです。

  1. zImageをルートに配置します(カスタムデバイスを必要とするデバイスの場合は、dtbおよび/またはdtboもここに配置する必要があり、含まれていない場合はそれぞれ元にフォールバックします)
  2. 必要なramdiskファイルを/ ramdiskに、モジュールを/ modulesに(/ modules / system / lib / modulesなどのフルパスで)配置します
  3. / patchに必要なパッチファイル(通常はコマンドに付随する部分的なファイル)を配置します。
  4. anykernel.shを変更して、カーネルの名前、ブートパーティションの場所、含まれるramdiskファイルのアクセス許可を追加し、必要なramdiskの変更方法を使用します(オプションで、バナーファイルやバージョンファイルをルートに配置して、これらをフラッシュ中に表示します)
  5. `zip -r9 UPDATE-AnyKernel2.zip * -x .git README.md * placeholder`

他の方法としては、同じROM(CM、TouchWiz、EMUIなど)と同じAndroidバージョンからboot.imgを解凍する方法があります。 次に、Zimageを交換します。 繰り返しますが、これは非常に複雑なプロセスであり、正確なチュートリアルを読む必要がありますが、手順の概要は次のとおりです。

  1. 解凍します。
  2. コマンドライン「unpackimg」を使用するか、単に画像をドラッグアンドドロップします。 これにより、イメージが分割され、ramdiskがサブディレクトリに解凍されます。
  3. 必要に応じてRAMディスクを変更します。
  4. repackimgバッチスクリプトは入力を必要とせず、元のすべての画像情報(分割され保存された)を使用して、以前に分割されたzImageを新しくパックされた変更済みラムディスクと再結合します。
  5. クリーンアップバッチスクリプトは、フォルダを初期状態にリセットし、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ターミナル内からアクセス権をリセットする必要があります。

興味深い記事