AndroidソースLinux Kernelのダウンロードとコンパイル
7993 ワード
Android上位システムのソースコードをダウンロード
Androidソースディレクトリの作成
初期化repo
-uはソースコードのgitサーバアドレスであり、-bはソースコードのあるブランチであり、-bがなければmasterブランチからcheckoutする.
ソースサーバ上のブランチが不明な場合は、リモートサーバ上のブランチをリストできます.
ディレクトリrefsにはtagsとheadsの2つのサブディレクトリが含まれており、異なるブランチのヘッダのインデックスが格納されており、インデックスでどのbranchがあるかを表示できます.
ソースコードのダウンロード
指定したモジュールのソースコードをダウンロード
ダウンロードできるモジュールを表示
上記コマンドは、ローカルソースディレクトリを読み出すものと等しい.repo/manifest/default.xmlファイル、直接開いてこのファイルを見ることができます.
モジュールソースコードのダウンロード
SDKコンパイル
Androidソースとカーネルをコンパイルする際にSDKは自動コンパイルされず、公式に提供されているSDKをダウンロードしたり、自分で手動でSDKをコンパイルしたりすることができます.アプリケーションを開発する際、SDKが持っているシミュレータを使ってAPKアプリケーションをデバッグすることが多く、本物よりも効率的で便利で、シミュレータは様々なパラメータを構成することができ、アプリケーションの「適合」能力を検証することができます.
LinuxとMacOS:1.ソースコードをダウンロードします.他のダウンロードコードと同じです.2.SDK対応製品を選択します.
注意:lunchでSDK関連の製品が見つからない場合は、上記のコマンドを直接入力します.3.コマンドコンパイルSDKを実行します.
Windos:-Windows環境で実行されるSDKコンパイルには、前のLinuxのコンパイル結果(MacOSではなくLinux環境でのみ生成される結果)に基づいている必要があります.-Linuxの下でSDKを生成するすべてのステップをコンパイルし、LinuxバージョンのSDKを生成します.
マルチコアCPUによりコンパイルを加速することができる.
ホストおよびターゲット向けのコンパイル結果は、ソースディレクトリのoutの下にあります.-target:makeコマンドで生成されたものはすべてこのディレクトリの下にあります.-host:SDKで生成されたファイルはここに保存されます.
個別モジュールのコンパイル
モジュールコンパイルでは、SDKによって生成されたディレクトリがクリアされるので、まずモジュールをコンパイルしてから、SDKをコンパイルすることができます.次のコマンドを実行します.
build/envsetupを開くには、他のコマンドが追加されます.shはこれらのコマンドの関数実装を見る.
Invoke “. build/envsetup.sh” from your shell to add the following functions to your environment: - lunch: lunch - - tapas: tapas [ …] [arm|x86|mips|armv5|arm64|x86_64|mips64] [eng|userdebug|user] - croot: Changes directory to the top of the tree. - m: Makes from the top of the tree. - mm: Builds all of the modules in the current directory, but not their dependencies. - mmm: Builds all of the modules in the supplied directories, but not their dependencies. To limit the modules being built use the syntax: mmm dir/:target1,target2. - mma: Builds all of the modules in the current directory, and their dependencies. - mmma: Builds all of the modules in the supplied directories, and their dependencies. - cgrep: Greps on all local C/C++ files. - ggrep: Greps on all local Gradle files. - jgrep: Greps on all local Java files. - resgrep: Greps on all local res/*.xml files. - sgrep: Greps on all local source files. - godir: Go to the directory containing a file. make:システム全体をコンパイルする必要がない限り、パラメータを持たずにシステム全体をコンパイルするために適用されます. make MediaProvider:これは単一のモジュールコンパイルに対応し、そのモジュールに依存する他のモジュールも一緒にコンパイルされます.例えばmake libmediaは、libmedia依存の泣きをすべてコンパイルします.これにより速度も遅くなり、MediaProviderモジュールで使用されているAndroidを特定するためにソースコード全体を検索する必要があります.mkファイルは、そのモジュールに依存するモジュールが変更されているかどうかも判断します.ターゲットモジュールの名前しか知らない場合は、makeモジュール名方式を適用してモジュールをコンパイルします.たとえば、make libmediaです.初回コンパイルであればこの方法も可能です. mmm packages/providers/MediaProvider:このコマンドは、依存するモジュールをコンパイルせずに、指定したディレクトリの下のターゲットモジュールをコンパイルします.したがって、最初のコンパイルでは、このような方法でモジュールをコンパイルすると、このモジュールに依存するモジュールがコンパイルされていないため、エラーが発生します. mm:このコマンドは、cdをpackages/providers/MediaProviderディレクトリなどのディレクトリにcdで入力し、mmコマンドを実行します.このコマンドは、現在のディレクトリのモジュールをコンパイルします.mmmと同様に、ターゲットモジュールのみをコンパイルするので、この2つのコマンドは速いです. パラメータ-B:一般的なコンパイル方式では、変化するターゲットファイルのみをコンパイルするインクリメンタルコンパイルが使用されます.すべてのターゲットファイルを再コンパイルする必要がある場合は、-Bパラメータを使用します.例えば、make-Bモジュール名、mmm-B、mm-B.
======================================
Android Linux Kernelをダウンロード
イメージに基づいてカーネルのバージョンを決定
たとえば、nexus 5のシステムでは、次のようになります.
Kernelソースのダウンロード
異なるプロセッサに対して異なるカーネルバージョンがあります.$git clone https://android.googlesource.com/kernel/common.git $ git clone https://android.googlesource.com/kernel/x86_64.git $ git clone https://android.googlesource.com/kernel/exynos.git $ git clone https://android.googlesource.com/kernel/goldfish.git $ git clone https://android.googlesource.com/kernel/msm.git $ git clone https://android.googlesource.com/kernel/omap.git $ git clone https://android.googlesource.com/kernel/samsung.git $ git clone https://android.googlesource.com/kernel/tegra.git
たとえば、汎用バージョンをダウンロードします.
ブランチを選択するコードをダウンロードします.
Androidソースディレクトリの作成
$ mkdir WORKING_DIRECTORY
$ cd WORKING_DIRECTORY
初期化repo
repo init -u https://android.googlesource.com/platform/manifest -b android-4.0.1_r1
-uはソースコードのgitサーバアドレスであり、-bはソースコードのあるブランチであり、-bがなければmasterブランチからcheckoutする.
ソースサーバ上のブランチが不明な場合は、リモートサーバ上のブランチをリストできます.
git ls-remote --tags https://android.googlesource.com/platform/manifest
ディレクトリrefsにはtagsとheadsの2つのサブディレクトリが含まれており、異なるブランチのヘッダのインデックスが格納されており、インデックスでどのbranchがあるかを表示できます.
ソースコードのダウンロード
repo sync
指定したモジュールのソースコードをダウンロード
ダウンロードできるモジュールを表示
repo manifest -o -
上記コマンドは、ローカルソースディレクトリを読み出すものと等しい.repo/manifest/default.xmlファイル、直接開いてこのファイルを見ることができます.
モジュールソースコードのダウンロード
repo sync platform/system/core
SDKコンパイル
Androidソースとカーネルをコンパイルする際にSDKは自動コンパイルされず、公式に提供されているSDKをダウンロードしたり、自分で手動でSDKをコンパイルしたりすることができます.アプリケーションを開発する際、SDKが持っているシミュレータを使ってAPKアプリケーションをデバッグすることが多く、本物よりも効率的で便利で、シミュレータは様々なパラメータを構成することができ、アプリケーションの「適合」能力を検証することができます.
LinuxとMacOS:1.ソースコードをダウンロードします.他のダウンロードコードと同じです.2.SDK対応製品を選択します.
$ lunch sdk-eng
注意:lunchでSDK関連の製品が見つからない場合は、上記のコマンドを直接入力します.3.コマンドコンパイルSDKを実行します.
$ make sdk
Windos:-Windows環境で実行されるSDKコンパイルには、前のLinuxのコンパイル結果(MacOSではなくLinux環境でのみ生成される結果)に基づいている必要があります.-Linuxの下でSDKを生成するすべてのステップをコンパイルし、LinuxバージョンのSDKを生成します.
$ sudo apt-get install mingw32 tofrodos
-コンパイルコマンドを再実行します.$ source ./build/envsetup.sh
$ lunch sdk-eng
$ make win_sdk
マルチコアCPUによりコンパイルを加速することができる.
$ make -j4 sdk
ホストおよびターゲット向けのコンパイル結果は、ソースディレクトリのoutの下にあります.-target:makeコマンドで生成されたものはすべてこのディレクトリの下にあります.-host:SDKで生成されたファイルはここに保存されます.
個別モジュールのコンパイル
モジュールコンパイルでは、SDKによって生成されたディレクトリがクリアされるので、まずモジュールをコンパイルしてから、SDKをコンパイルすることができます.次のコマンドを実行します.
$ . build/envsetup.sh
build/envsetupを開くには、他のコマンドが追加されます.shはこれらのコマンドの関数実装を見る.
Invoke “. build/envsetup.sh” from your shell to add the following functions to your environment: - lunch: lunch - - tapas: tapas [ …] [arm|x86|mips|armv5|arm64|x86_64|mips64] [eng|userdebug|user] - croot: Changes directory to the top of the tree. - m: Makes from the top of the tree. - mm: Builds all of the modules in the current directory, but not their dependencies. - mmm: Builds all of the modules in the supplied directories, but not their dependencies. To limit the modules being built use the syntax: mmm dir/:target1,target2. - mma: Builds all of the modules in the current directory, and their dependencies. - mmma: Builds all of the modules in the supplied directories, and their dependencies. - cgrep: Greps on all local C/C++ files. - ggrep: Greps on all local Gradle files. - jgrep: Greps on all local Java files. - resgrep: Greps on all local res/*.xml files. - sgrep: Greps on all local source files. - godir: Go to the directory containing a file.
======================================
Android Linux Kernelをダウンロード
イメージに基づいてカーネルのバージョンを決定
$ dd if=kernel bs=1 skip=$(LC_ALL=C grep -a -b -o $'\x1f\x8b\x08\x00\x00\x00\x00\x00' kernel | cut -d ':' -f 1) | zgrep -a 'Linux version'
たとえば、nexus 5のシステムでは、次のようになります.
$ dd if=zImage-dtb bs=1 skip=$(LC_ALL=C od -Ad -x -w2 zImage-dtb | grep 8b1f | cut -d ' ' -f1 | head -1) | zgrep -a 'Linux version'
Kernelソースのダウンロード
mkdir ~/kernel
cd kernel
異なるプロセッサに対して異なるカーネルバージョンがあります.$git clone https://android.googlesource.com/kernel/common.git $ git clone https://android.googlesource.com/kernel/x86_64.git $ git clone https://android.googlesource.com/kernel/exynos.git $ git clone https://android.googlesource.com/kernel/goldfish.git $ git clone https://android.googlesource.com/kernel/msm.git $ git clone https://android.googlesource.com/kernel/omap.git $ git clone https://android.googlesource.com/kernel/samsung.git $ git clone https://android.googlesource.com/kernel/tegra.git
たとえば、汎用バージョンをダウンロードします.
$ git clone https://android.googlesource.com/kernel/common.git
ブランチを選択するコードをダウンロードします.
cd common // common
git branch -a //
git checkout remote/origin/Android-3.0 // keernel3.0
// image
git checkout