トップページ | 組込みソフト | Linux搭載ボード | Android OSのビルド |
Android OSのビルド |
Androidの開発はソースファイルからAndroid OSをビルドするという面倒なことが必要です。Linuxならsudo suで管理者になって必要なことができます。ところがAndroidでは一般ユーザーの権限しかないので、管理者権限でアクセスするような処理ができません。そこであらかじめ一般ユーザーでもやりたいことができるように、たとえばファイルの権限をあらかじめユーザー権限でもできるようにしておくことが必要になります。 Ubuntu12.04 64ビット をVirtual Boxで使うことにしました。本当は、ハードディスクのパーティションをWindow/Ubuntu 12.04 64ビットで環境を構築してありますが、やはりWindowsとUbuntuでコピペができるのは便利なのと、Virtual Boxで動作が遅くなることがないようなのでもう一度Android用にUbuntuをインストールしました。 ビルドの方法は、この本を参考にしました。 しかし、間違いが多すぎます。 極めつけはこれ! 書いてあるとおりにやるとダメです。 LANG=C をつけないとダメ。 Ubuntuを英語でやってくれ。とはどこにも書いてありません。また、記事の途中でLANG=Cがあるので、Ubuntuは日本語と思ってしまいます。(わざわざ英語にする人はあまりいないでしょう!) この本の元ねたは TI-Android-JB-4.2.2-DevKit-4.1.1 DeveloperGuide のように思います。(あとでわかったことです。)英語で記述されています。 この本の最大の欠点! l(エル)と1(壱)の違いがほとんどわかりません。l(エル)と1(壱)の違いを明確にするのはこの業界では常識ですよね。また、元ねたのURLを書いておけばそこからコピペすればOKで済むところを... .本をよーーーく見てキーボードで打ち込みしました。そして失敗も... 正誤表も少しはあるようですが、ぜんぜん足りないです。著者や編集者がちゃんと記事をチェックしてば、こんなに余計な時間を費やさないですみました。オラは本のチェック要員じゃないぞ! というわけで再度同じことやるのにこの本を元にしたら、また同じ記事の間違いで時間を浪費することを避けるため、備忘録的にメモしておきます。 |
JDKのインストール |
jdk-6u45-linux-x64.bin をダウンロードします。 ホームディレクトリ(sunaga)直下に置きます。 |
sunaga@android:~/share$ cp jdk-6u45-linux-x64.bin ~/ sunaga@android:~/share$ cd ~/ sunaga@android:~$ ls examples.desktop ダウンロード ドキュメント ミュージック jdk-6u45-linux-x64.bin テンプレート ビデオ 公開 |
ホームディレクトリにコピーできました。 jdk-6u45-linux-x64.binに実行権限を与え解凍します。 |
sunaga@android:~$ chmod a+x jdk-6u45-linux-x64.bin sunaga@android:~$ ./jdk-6u45-linux-x64.bin sunaga@android:~$ ls examples.desktop share デスクトップ ピクチャ jdk-6u45-linux-x64.bin ダウンロード ドキュメント ミュージック jdk1.6.0_45 テンプレート ビデオ 公開 |
jdk1.6.0_45のフォルダに解凍されています。 Virtual BoxでBeagle Bone BlackのAndroid組込み専用に作成したUbuntuなのでTIの解説にしたがって/usr/lib/jvm にコピーして設定をします。 |
sunaga@android:~$ sudo mkdir -p /usr/lib/jvm sunaga@android:~$ sudo mv jdk1.6.0_45 /usr/lib/jvm/ sunaga@android:~$ sudo update-alternatives --install "/usr/bin/java" "java" "/usr/lib/jvm/jdk1.6.0_45/bin/java" 1 sunaga@android:~$ sudo update-alternatives --install "/usr/bin/javac" "javac" "/usr/lib/jvm/jdk1.6.0_45/bin/javac" 1 sunaga@android:~$ sudo update-alternatives --config java sunaga@android:~$ sudo update-alternatives --config javac |
これでJAVAの設定が終わりです。 確認します。 |
sunaga@android:~$ java -version java version "1.6.0_45" Java(TM) SE Runtime Environment (build 1.6.0_45-b06) Java HotSpot(TM) 64-Bit Server VM (build 20.45-b01, mixed mode) |
ビルドに必要なソフトウェア |
Ubuntuのバージョンによって違います。気をつけてください。 Ubuntu12.04 64bitのソフトを取得します。 |
sunaga@android:~$ sudo apt-get install git-core gnupg flex bison gperf
build-essential zip curl libc6-dev libncurses5-dev:i386 x11proto-core-dev
libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-glx:i386 libgl1-mesa-dev
g++-multilib mingw32 openjdk-6-jdk tofrodos python-markdown libxml2-utils
xsltproc zlib1g-dev:i386 minicom tftpd uboot-mkimage expect libgl1-mesa-dri 以下のパッケージには満たせない依存関係があります: libgl1-mesa-glx:i386 : 依存: libglapi-mesa:i386 (= 8.0.4-0ubuntu0.7) 推奨: libgl1-mesa-dri:i386 (>= 7.2) E: 問題を解決することができません。壊れた変更禁止パッケージがあります。 |
ibgl1-mesa-glx:i386 を libgl1-mesa-dri:i386 で書き換えます。 |
sunaga@android:~$sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl libc6-dev libncurses5-dev:i386 x11proto-core-dev libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-dri:i386 libgl1-mesa-dev g++-multilib mingw32 openjdk-6-jdk tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386 minicom tftpd uboot-mkimage expect libgl1-mesa-dri |
sunaga@android:~$ sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so |
ソースコードの取得 |
Repoコマンドをするためディレクトリを作成して、パスを通します。 |
sunaga@android:~$ mkdir ~/bin .export PATH=~/bin:$PATH |
ダウンロードします。 TIのページにある方法でやってみました。 |
$ curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo $ chmod a+x ~/bin/repo $ mkdir $HOME/rowboat-android $ cd $HOME/rowboat-android $ repo init -u git://gitorious.org/rowboat/manifest.git -m TI-Android-JB-4.2.2-DevKit-4.1.1.xml $ repo sync |
ダメでした。 Interface (インターフェース) 増刊 Linuxガジェット BeagleBoneBlackでI/O 2014年 03月号 に記載されている方法でやってみるとOKです。 |
sunaga@android:~$ chmod a+x ~/bin/repo sunaga@android:~$ mkdir $HOME/src-android sunaga@android:~$ cd $HOME/src-android sunaga@android:~/src-android$ curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > ~/bin/repo sunaga@android:~/src-android$ repo init -u git://gitorious.org/rowboat/manifest.git -m rowboat-jb-am335x.xml sunaga@android:~/src-android$ repo sync |
$HOME/src-android 上記ディレクトリにソースファイルが取得できました。 |
ビルド |
ツールチェインにパスを通します。 |
sunaga@android:~/src-android$ export PATH=$HOME/src-android/prebuilts/gcc/linux-x86/arm/arm-eabi-4.6/bin:$PATH |
ブートローダのビルド |
sunaga@android:~/src-android$ cd ~/src-android/u-boot sunaga@android:~/src-android/u-boot$ make CROSS_COMPILE=arm-eabi- distclean sunaga@android:~/src-android/u-boot$make CROSS_COMPILE=arm-eabi- am335x_evm_config sunaga@android:~/src-android/u-boot$ make CROSS_COMPILE=arm-eabi- |
カーネルのビルド |
sunaga@android:~/src-android/u-boot$ cd ~/src-android/kernel sunaga@android:~/src-android/kernel$ make ARCH=arm CROSS_COMPILE=arm-eabi- distclean sunaga@android:~/src-android/kernel$ make ARCH=arm CROSS_COMPILE=arm-eabi- am335x_evm_android_defconfig sunaga@android:~/src-android/kernel$ make ARCH=arm CROSS_COMPILE=arm-eabi- uImage |
ユーザランドのビルド これは2時間くらいはかかります。 |
sunaga@android:~/src-android/kernel$ cd ~/src-android sunaga@android:~/src-android$ make TARGET_PRODUCT=beagleboneblack droid |
JDKのバージョンが違うと怒られたら、次のコマンドで sunaga@android:~/src-android$ sudo update-alternatives --config java sunaga@android:~/src-android$ sudo update-alternatives --config javac Java 1.6を選んで、再度チャレンジ! |
SGXのビルド |
sunaga@android:~$ cd ~/src-android/hardware/ti/sgx sunaga@android:~$ make TARGET_PRODUCT=beagleboneblack OMAPES=4.x ANDROID_ROOT_DIR=$HOME/src-android sunaga@android:~$ make TARGET_PRODUCT=beagleboneblack OMAPES=4.x ANDROID_ROOT_DIR=$HOME/src-android install |
ユーザランドのパッケージ化 |
sunaga@android:~/src-android$ cd $HOME/src-android sunaga@android:~/src-android$ make TARGET_PRODUCT=beagleboneblack fs_tarball |
SDカードに書き込む |
Virtual Boxを使っているときの注意: SDカードに書き込むとき USBカードリーダーにチェックをいれてください。 SDカードに外すとき、 USBカードリーダーにチェックを外してください。 |
sunaga@android:~$ mkdir $HOME/image-folder sunaga@android:~$ cp /home/sunaga/src-android/kernel/arch/arm/boot/uImage $HOME/image-folder sunaga@android:~$ cp /home/sunaga/src-android/u-boot/MLO $HOME/image-folder sunaga@android:~/image-folder$ cp /home/sunaga/src-android/u-boot/u-boot.img $HOME/image-folder sunaga@android:~$ cp /home/sunaga/src-android/external/ti_android_utilities/am335x/u-boot-env/uEnv_beagleboneblack.txt $HOME/image-folder sunaga@android:~$ cp /home/sunaga/src-android/out/target/product/beagleboneblack/rootfs.tar.bz2 $HOME/image-folder sunaga@android:~$ cp /home/sunaga/src-android/external/ti_android_utilities/am335x/mk-mmc/mkmmc-android.sh $HOME/image-folder sunaga@android:~/image-folder$ LANG=C sunaga@android:~/image-folder$ sudo ./mkmmc-android.sh /dev/sde MLO u-boot.img uImage uEnv_beagleboneblack.txt rootfs.tar.bz2 |