AndroidのカーネルソースはUbuntuでダウンロードして、コンパイルして、インストールします。
ソースコードツリーからダウンロードされた最新のAndroidソースコードは、カーネルコードを含まない、つまりAndroidソースコードプロジェクトは、デフォルトではLinux Kernelコードを含まないで、あらかじめコンパイルされたカーネルを使っています。では、どうやって自分のカーネルをDIYすることができますか?この文章はいちいち来ます。
まず、前の記事を参照して、Androidソースディレクトリを準備してください。
二.Linux Kernel for Androidソースコードをダウンロードします。
1.GITツールを使ってダウンロードし、以下のコマンドを実行します。
2.ダウンロードが完了したら、ダウンロードしたカーネルコードのバージョンを確認できます。
USER-NAME@MACHINE-NAME:~/Android/ケネル$cd common
USER-NAME@MACHINE-NAME:~/Android/ケネル/common$git branch android-2.6.36
3.上で得たのは主要線のカーネルソースコードです。今はシミュレータ用のカーネルに適用する必要があります。そのため、私達はcheckout goldfishバージョンが必要です。
USER-NAME@MACHINE-NAME://Android/ケネル/common$git chocout remotes/origgin/archive/android-gldfish-2.69
三.カーネルコードをコンパイルする。
1.クロスコンパイルツールディレクトリを$PATH環境変数にエクスポートします。
USER-NAME@MACHINE-NAME:~/Android/ケネル/common$export PATH=$PATH://Android/prebuilt/linux 86/toolchain/arm-eabi-4.43/bin
2.comonディレクトリのMakefileファイルの以下の2つの行為を修正します。
# ARCH?=(SUBARCH)
# CROSS_COMPILE?=
ARCHアーム #アーム構造
CROSS_COMPILE ?= arm-eabi-落クロスコンパイルツールチェーンプレフィックス、参照~/Android/prebuilt/linux-x 86/toolchain/arm-eabi-4.43/binディレクトリ
3.コンパイルを開始します
USER-NAME@MACHINE-NAME://Android/ケネル/common$make goldfish_defconfig
USER-NAME@MACHINE-NAME:~/Android/ケネル/common$make
コンパイルが成功したら、次の2行が見られます。
OBJCOPY arch/arm/boot/zImage
Kernel:arch/arm/boot/zImage is ready
makeコマンドを実行する前に、make menuconfigを実行してもいいです。まずコンパイルオプションを設定してください。
四.シミュレータでコンパイルされたカーネルを実行します。
1.シミュレータを起動する前に、環境変数$PATHにシミュレータのディレクトリを設定します。
USER-NAME@MACHINE-NAME:~/Android$export PATH=$PATH:~/Android/out/host/linux-x 86/bin
2.ANDROID_を設定するPRODUCT_アウト環境変数:
USER-NAME@MACHINE-NAME:~/Android$export ANDROID_PRODUCT_OUT=//Android/out/target/product/generanic
3.バックグラウンドでカーネルファイルの起動シミュレータを指定します。
USER-NAME@MACHINE-NAME:~/Android$ emulator-ケネル./ケネル/common/arch/boot/zImage&
4.adbツールでシミュレータを接続し、カーネルバージョンの情報を確認し、シミュレータで走るカーネルは先ほどコンパイルしたカーネルではないかを確認してください。
USER-NAME@MACHINE-NAME:~/Android$adb shell
この時初めてadb shellコマンドを実行したら、以下の出力が見えます。それに関わらず、もう一度adb shellコマンドを実行すればいいです。
* daemen not running.start it now on port 5037*
* daemen started success fully*
error:device ofline
プロディレクトリに切り替え:
root@android:/菗cd proc
root@android:/proc菗cat version
Linux version 2.5.29-gb 0 d 93 fb-dirty(luo@ubuntu-11-04)(gcc version 4.4.3(GCC))\33451;1 Fri Jun 3 23:17:24 HKT 2011
マシン名からluo@ubuntu-11-04と日付1 Fri Jun 3 23:17 HKT 2011は、シミュレータが使用しているカーネルがコンパイルされたばかりのカーネルであることがわかります。
PS:メインラインの最新ソースコードは不安定バージョンです。使用過程に問題があるかもしれません。
より正式なソースコードのコンパイル方法は、公式サイトを参照してください:http://source.android.com/source/building-kernels.html
以上はUbuntu Androidソースのカーネルのコンパイルで、コンパイルの過程でこれらの問題に出会うことができることを承知して、引き続き整理して、Androidカーネルの友達を研究することを助けることができることを望みます。
まず、前の記事を参照して、Androidソースディレクトリを準備してください。
二.Linux Kernel for Androidソースコードをダウンロードします。
1.GITツールを使ってダウンロードし、以下のコマンドを実行します。
USER-NAME@MACHINE-NAME:~/Android$ mkdir kernel
USER-NAME@MACHINE-NAME:~/Android$ cd kernel
USER-NAME@MACHINE-NAME:~/Android/kernel$ git clone http://android.googlesource.com/kernel/goldfish.git
同じように長い待ち時間を経て、ケネルディレクトリの下にはcomonディレクトリがあります。Linuxカーネルコードはここにあります。2.ダウンロードが完了したら、ダウンロードしたカーネルコードのバージョンを確認できます。
USER-NAME@MACHINE-NAME:~/Android/ケネル$cd common
USER-NAME@MACHINE-NAME:~/Android/ケネル/common$git branch android-2.6.36
3.上で得たのは主要線のカーネルソースコードです。今はシミュレータ用のカーネルに適用する必要があります。そのため、私達はcheckout goldfishバージョンが必要です。
USER-NAME@MACHINE-NAME:~/Android/kernel/common$ git branch -a
* android-2.6.36
remotes/origin/HEAD -> origin/android-2.6.36
remotes/origin/android-2.6.35
remotes/origin/android-2.6.36
remotes/origin/archive/android-2.6.25
remotes/origin/archive/android-2.6.27
remotes/origin/archive/android-2.6.29
remotes/origin/archive/android-2.6.32
remotes/origin/archive/android-gldfish-2.6.29
remotes/origin/archive/android-goldfish-2.6.27
android-gld fishを選択します。USER-NAME@MACHINE-NAME://Android/ケネル/common$git chocout remotes/origgin/archive/android-gldfish-2.69
三.カーネルコードをコンパイルする。
1.クロスコンパイルツールディレクトリを$PATH環境変数にエクスポートします。
USER-NAME@MACHINE-NAME:~/Android/ケネル/common$export PATH=$PATH://Android/prebuilt/linux 86/toolchain/arm-eabi-4.43/bin
2.comonディレクトリのMakefileファイルの以下の2つの行為を修正します。
# ARCH?=(SUBARCH)
# CROSS_COMPILE?=
ARCHアーム #アーム構造
CROSS_COMPILE ?= arm-eabi-落クロスコンパイルツールチェーンプレフィックス、参照~/Android/prebuilt/linux-x 86/toolchain/arm-eabi-4.43/binディレクトリ
3.コンパイルを開始します
USER-NAME@MACHINE-NAME://Android/ケネル/common$make goldfish_defconfig
USER-NAME@MACHINE-NAME:~/Android/ケネル/common$make
コンパイルが成功したら、次の2行が見られます。
OBJCOPY arch/arm/boot/zImage
Kernel:arch/arm/boot/zImage is ready
makeコマンドを実行する前に、make menuconfigを実行してもいいです。まずコンパイルオプションを設定してください。
四.シミュレータでコンパイルされたカーネルを実行します。
1.シミュレータを起動する前に、環境変数$PATHにシミュレータのディレクトリを設定します。
USER-NAME@MACHINE-NAME:~/Android$export PATH=$PATH:~/Android/out/host/linux-x 86/bin
2.ANDROID_を設定するPRODUCT_アウト環境変数:
USER-NAME@MACHINE-NAME:~/Android$export ANDROID_PRODUCT_OUT=//Android/out/target/product/generanic
3.バックグラウンドでカーネルファイルの起動シミュレータを指定します。
USER-NAME@MACHINE-NAME:~/Android$ emulator-ケネル./ケネル/common/arch/boot/zImage&
4.adbツールでシミュレータを接続し、カーネルバージョンの情報を確認し、シミュレータで走るカーネルは先ほどコンパイルしたカーネルではないかを確認してください。
USER-NAME@MACHINE-NAME:~/Android$adb shell
この時初めてadb shellコマンドを実行したら、以下の出力が見えます。それに関わらず、もう一度adb shellコマンドを実行すればいいです。
* daemen not running.start it now on port 5037*
* daemen started success fully*
error:device ofline
プロディレクトリに切り替え:
root@android:/菗cd proc
root@android:/proc菗cat version
Linux version 2.5.29-gb 0 d 93 fb-dirty(luo@ubuntu-11-04)(gcc version 4.4.3(GCC))\33451;1 Fri Jun 3 23:17:24 HKT 2011
マシン名からluo@ubuntu-11-04と日付1 Fri Jun 3 23:17 HKT 2011は、シミュレータが使用しているカーネルがコンパイルされたばかりのカーネルであることがわかります。
PS:メインラインの最新ソースコードは不安定バージョンです。使用過程に問題があるかもしれません。
より正式なソースコードのコンパイル方法は、公式サイトを参照してください:http://source.android.com/source/building-kernels.html
以上はUbuntu Androidソースのカーネルのコンパイルで、コンパイルの過程でこれらの問題に出会うことができることを承知して、引き続き整理して、Androidカーネルの友達を研究することを助けることができることを望みます。