bc10


bc10/TI-Android-GingerBread-2.3-Devkit-1.0


2011年4月1日、TI-Android-GingerBread-2.3-Devkit-1.0 がリリースされました。

rowboat project Blog のアナウンス
http://arowboat.wordpress.com/2011/04/01/ti-android-gingerbread-2-3-devkit-1-0/

このページでは TI-Android-GingerBread-2.3-Devkit-1.0 を bc10 向けに調整してビルドし、起動用 SD カードを作成する手順を記述しています。

主な特徴

TI-Android-GingerBread-2.3-Devkit-1.0 は、beagleboard など
TI の ARM SoC、AM1808、OMAP35x、AM35x、AM37x、AM389x、DM37x を搭載したボード向けに調整を加えられた
Android の Gingerbread branch です。

詳細な情報は以下の URL をご覧ください。
TI-Android-GingerBread-2.3-DevKit-1.0 ReleaseNotes 
TI-Android-GingerBread-2.3-DevKit-1.0 DeveloperGuide
TI-Android-GingerBread-2.3-DevKit-1.0 UserGuid

作業手順

作業の流れは以下のとおりです。

  1. ビルドを実行する環境の作成
  2. ソースコード取得
  3. bc10-kernel と USB wifi 用 kernel module のビルド
  4. bc10用変更の追加
  5. ビルド
  6. SGX SDK のインストール
  7. SDカードへの書き込み

調整のため予告無く更新することがあります。予めご了承ください。

ビルド環境作成

今回の環境は以下のようになります。

  • OS: Ubuntu 10.04(64bit版)
  • JAVA: java 1.6x
  • Android Version: TI-Android-GingerBread-2.3-DevKit-1.0 (Android 2.3)

Android 2.3(codename : Gingerbread)以降をビルドするには 64bit 環境が必要です。

環境の構築は、Android Open Source Project の "Getting the Source" のページ
"Setting up your machine" の項の手順に従って行います。

java6

以下のコマンドで ubuntu のリポジトリから sun java6 のパッケージを取得してインストールします。

$ sudo add-apt-repository "deb http://archive.canonical.com/ lucid partner"
$ sudo add-apt-repository "deb-src http://archive.canonical.com/ubuntu lucid partner"
$ sudo apt-get update
$ sudo apt-get install sun-java6-jdk
$ sudo update-java-alternatives -s java-6-sun

パッケージインストール

以下のコマンドで ubuntu のリポジトリから必要なパッケージを取得してインストールします。
(実際は一行ですが、shell の改行バックスラッシュで途中で改行して表示しています。)

$ sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev \
  gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev ia32-libs \
  x11proto-core-dev libx11-dev lib32readline5-dev lib32z-dev

android ソースコード取得

repo 設定

android のソースコードを取得するため repo の設定を行います。

$ cd ~
$ mkdir bin
$ curl http://android.git.kernel.org/repo >~/bin/repo
$ chmod a+x ~/bin/repo

ubuntu を使っている場合は一旦ログアウトしてログインし直せば ~/bin への PATH は通っています。
ログアウトせずそのまま作業したい場合は、以下のようにして ~/bin を環境変数の PATH に追加します。

$ export PATH=~/bin:$PATH

repo 初期化

まず以後の作業すべてをその中で行う作業用ディレクトリを作成します。

$ cd ~/
$ mkdir bc10 
$ cd bc10

このディレクトリ内に TI-Android-GingerBread-2.3-DevKit-1.0 を取得するためのディレクトリを作成し、
そこで repo init を実行します。
(このディレクトリ名は任意です。2.3-DevKit などといった短い名前でもかまいません。
 変更した場合には以降の記述の PATH を自分の設定で読み替えてください。)

$ mkdir TI-Android-GingerBread-2.3-DevKit-1.0
$ cd TI-Android-GingerBread-2.3-DevKit-1.0
$ repo init -u git://gitorious.org/rowboat/manifest.git -m TI-Android-GingerBread-2.3-DevKit-1.0.xml

repo sync

repo init の実行後、 repo sync を実行し DevKit のソースコードを取得します。

$ repo sync

約6GB のファイルをダウンロードしますので回線速度に応じて時間がかかります。

kernel ビルド

android の UI からの Wifi on/off に対応するためには
android の userland 内に USB wifi 用の kernel module を配置する必要があります。
配置は android のビルド時に行われますので、ビルドを行う前に USB wifi の kernel module をビルドして作成しておきます。
この USB wifi の kernel module のビルドには
ビルド実行済みの kernel ソースツリーが必要になるため、
bc10 用 kernel を最初にビルドします。

環境変数設定

boot に必要な x-loader、u-boot、kernel は全て android のソースコードと共に配布されている
cross toolchain を使用してビルドします。
ここでは、bc10/TI-Android-GingerBread-2.3-DevKit-1.0/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/ 内 の arm cross toolchain を使用します。

ビルド時にこの toolchain を使って cross compile が行われるように環境変数を設定します。
PATH は各自の環境に合わせて変更してください。

$ export PATH=/home/beat/bc10/TI-Android-GingerBread-2.3-DevKit-1.0/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin:${PATH}
$ export ARCH=arm
$ export CROSS_COMPILE=arm-eabi-

kernel

$ cd ~/bc10/
$ git clone git://gitorious.org/~bc-dev/rowboat/bc10-rowboat-kernel.git bc10-rowboat-kernel
$ cd ~/bc10/bc10-rowboat-kernel/

bc10向けリリースブランチに切り替えます。

$ git checkout -t -b bc10-2.6.32 origin/bc10-2.6.32
$ make omap3_bc10_defconfig
$ make uImage
$ make modules

ビルド完了後以下のディレクトリに uImage が作成されます。
(USB wifi 以外の kernel module を使用しない場合には、最後の make modules は必要ありません。)

$ ls ~/bc10/bc10-rowboat-kernel/arch/arm/boot/
Image  Makefile  bootp  compressed  install.sh  uImage  zImage

USB Wifi (RT3070USB) ドライバー ビルド

USB Wifi に対応するため RT3070USB のドライバーを追加します。
動作を確認したデバイスは以下のものです。

メーカー型番Vendor IDDevice ID備考
PLANEXGW-USMicroN-G2019ED14販売終了
LogitecLAN-W150N/U2IPH07890164
LogitecLAN-W150N/U2BK07890168
BuffaloWLI-UC-GNM041101a2
BuffaloWLI-UC-G301N0411016fAC給電の USBハブに接続して動作を確認しています。
BuffaloWLI-UC-GN0411015d

ここでは、RT3070USB を使用している上記 USB Wifi の使用を前提に記述します。

ドライバーは RALINK Web にあるLinuxドライバー
2011_0107_RT3070_RT3370_Linux_STA_v2.5.0.1_DPO.tar.bz2 を使用します。

ソースコードの入手には上記 web ページからのメールアドレスと氏名の入力を必要とします。
ダウンロードしたファイルは /home/beat/bc10/ に置いて作業するものとして記述します。

ビルドには上記 kernel ビルド時に使用したのと同じ TI-Android-GingerBread-2.3-DevKit-1.0 ソースファイル内の
prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/ の cross toolchain を使用します。

以下の patch を当てることで bc10 向けにクロスコンパイルできるようになります。
変更内容は、
・bc10 向けのコンパイル設定の追加(platform、toolchain の PATH、コンパイルフラグの設定)
・ファームウェアのリージョン設定を日本にし、設定項目例をわかりやすいものに変更
・USB Wifi のベンダーID、製品IDの追加
です。

差分は修正後のソースを 2011_0107_RT3070_RT3370_Linux_STA_v2.5.0.1_DPO-bc10 とリネームした後オリジナルと比較し

diff -urN 2011_0107_RT3070_RT3370_Linux_STA_v2.5.0.1_DPO/ 2011_0107_RT3070_RT3370_Linux_STA_v2.5.0.1_DPO-bc10/

で取得しました。

注:下記のLINUX_SRCとCROSS_COMPAILEのPATHはご使用の環境によって適宜設定を変更してください。
RT3070-2.5.0.1.diffでは以下のように設定しています。

+LINUX_SRC = /home/beat/bc10/bc10-rowboat-kernel
+CROSS_COMPILE = /home/beat/bc10/TI-Android-GingerBread-2.3-DevKit-1.0/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/arm-eabi-

・bc10 用設定の追加

--- 2011_0107_RT3070_RT3370_Linux_STA_v2.5.0.1_DPO/Makefile     2011-01-07 11:18:32.000000000 +0900
+++ 2011_0107_RT3070_RT3370_Linux_STA_v2.5.0.1_DPO-bc10/Makefile        2011-01-30 15:09:46.023581979 +0900
@@ -23,7 +23,8 @@
 RTMP_SRC_DIR = $(RT28xx_DIR)/RT$(CHIPSET)

 #PLATFORM: Target platform
-PLATFORM = PC
+PLATFORM = BC10
+#PLATFORM = PC
 #PLATFORM = 5VT
 #PLATFORM = IKANOS_V160
 #PLATFORM = IKANOS_V180
@@ -176,6 +177,11 @@
 CROSS_COMPILE =
 endif

+ifeq ($(PLATFORM),BC10)
+LINUX_SRC = /home/beat/bc10/bc10-rowboat-kernel
+CROSS_COMPILE = /home/beat/bc10/TI-Android-GingerBread-2.3-DevKit-1.0/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/arm-eabi-
+endif
+
 ifeq ($(PLATFORM),IXP)
 LINUX_SRC = /project/stable/Gmtek/snapgear-uclibc/linux-2.6.x
 CROSS_COMPILE = arm-linux-
@@ -384,6 +390,9 @@
        cp -f $(RT28xx_DIR)/os/linux/rtnet$(CHIPSET)apsta.ko /tftpboot
 endif
 else
+ifeq ($(PLATFORM),BC10)
+       $(MAKE) ARCH=arm CROSS_COMPILE=$(CROSS_COMPILE) -C  $(LINUX_SRC) SUBDIRS=$(RT28xx_DIR)/os/linux modules
+else
        cp -f $(RT28xx_DIR)/os/linux/rt$(CHIPSET)sta.ko /tftpboot
 ifeq ($(OSABL),YES)
        cp -f $(RT28xx_DIR)/os/linux/rtutil$(CHIPSET)sta.ko /tftpboot
@@ -392,6 +401,7 @@
 endif
 endif
 endif
+endif


 release:

・リージョンコードの変更、設定例の変更

--- 2011_0107_RT3070_RT3370_Linux_STA_v2.5.0.1_DPO/RT2870STA.dat        2011-01-07 11:18:32.000000000 +0900
+++ 2011_0107_RT3070_RT3370_Linux_STA_v2.5.0.1_DPO-bc10/RT2870STA.dat   2011-01-30 15:18:32.301699483 +0900
@@ -1,8 +1,8 @@
 #The word of "Default" must not be removed
 Default
 CountryRegion=5
-CountryRegionABand=7
-CountryCode=
+CountryRegionABand=1
+CountryCode=JP
 ChannelGeography=1
 SSID=11n-AP
 NetworkType=Infra
@@ -18,8 +18,8 @@
 PktAggregate=0
 WmmCapable=1
 AckPolicy=0;0;0;0
-AuthMode=OPEN
-EncrypType=NONE
+AuthMode=authtype
+EncrypType=encrtype
 WPAPSK=
 DefaultKeyID=1
 Key1Type=0

・Vendor_ID:Device_ID の追加

--- 2011_0107_RT3070_RT3370_Linux_STA_v2.5.0.1_DPO/common/rtusb_dev_id.c        2011-01-07 11:18:32.000000000 +0900
+++ 2011_0107_RT3070_RT3370_Linux_STA_v2.5.0.1_DPO-bc10/common/rtusb_dev_id.c   2011-01-30 15:28:20.393002119 +0900
@@ -104,6 +104,13 @@
        {USB_DEVICE(0x13D3,0x3321)}, /* Azurewave */
        {USB_DEVICE(0x07FA,0x7712)}, /* Edimax */
        {USB_DEVICE(0x0789,0x0166)}, /* Edimax */
+        {USB_DEVICE(0x2019,0xED14)}, /* PLANEX added by BC */
+        {USB_DEVICE(0x2019,0xAB29)}, /* PLANEX added by BC */
+        {USB_DEVICE(0x0789,0x0164)}, /* Logitec added by BC */
+        {USB_DEVICE(0x0789,0x0168)}, /* Logitec added by BC */
+        {USB_DEVICE(0x0411,0x01a2)}, /* Buffalo added by BC */
+        {USB_DEVICE(0x0411,0x016f)}, /* Buffalo added by BC */
+        {USB_DEVICE(0x0411,0x015d)}, /* Buffalo added by BC */
 #endif /* RT3070 */
        { }/* Terminating entry */
};

・bc10用設定の追加

--- 2011_0107_RT3070_RT3370_Linux_STA_v2.5.0.1_DPO/os/linux/config.mk   2011-01-07 11:20:51.000000000 +0900
+++ 2011_0107_RT3070_RT3370_Linux_STA_v2.5.0.1_DPO-bc10/os/linux/config.mk      2011-01-30 15:36:50.191769728 +0900
@@ -11,7 +11,7 @@
 HAS_XLINK=n

 # Support Wpa_Supplicant
-HAS_WPA_SUPPLICANT=n
+HAS_WPA_SUPPLICANT=y

 # Support Native WpaSupplicant for Network Maganger
 HAS_NATIVE_WPA_SUPPLICANT_SUPPORT=n
@@ -415,6 +415,10 @@
     endif
 endif

+ifeq ($(PLATFORM),BC10)
+EXTRA_CFLAGS := $(WFLAGS) -I$(RT28xx_DIR)/include -DMODILE
+endif
+
 #If the kernel version of RMI is newer than 2.6.27, please change "CFLAGS" to "EXTRA_FLAGS"
 ifeq ($(PLATFORM),RMI)
 EXTRA_CFLAGS := -D__KERNEL__ -DMODULE=1 -I$(LINUX_SRC)/include -I$(LINUX_SRC)/include/asm-mips/mach-generic \
 -I$(RT28xx_DIR)/include -Wall -Wstrict-prototypes -Wno-trigraphs -O2 -fno-strict-aliasing -fno-common \
 -DCONFIG_IFX_ALG_QOS -DCONFIG_WAN_VLAN_SUPPORT -fomit-frame-pointer -DIFX_PPPOE_FRAME -G 0 -fno-pic \
 -mno-abicalls -mlong-calls -pipe -finline-limit=100000 -mabi=32 -G 0 -mno-abicalls -fno-pic -pipe -msoft-float \
 -march=xlr -ffreestanding  -march=xlr -Wa,--trap, -nostdinc -iwithprefix include $(WFLAGS)

・GPLフラグの追加(これがないと insmod できません。)

--- 2011_0107_RT3070_RT3370_Linux_STA_v2.5.0.1_DPO/os/linux/usb_main_dev.c      2011-01-07 11:18:32.000000000 +0900
+++ 2011_0107_RT3070_RT3370_Linux_STA_v2.5.0.1_DPO-bc10/os/linux/usb_main_dev.c 2011-01-30 14:38:08.011046027 +0900
@@ -37,6 +37,7 @@
 /* Otherwise post to forum in ralinktech's web site(www.ralinktech.com) and let all users help you. *** */
 MODULE_AUTHOR("Paul Lin <paul_lin@ralinktech.com>");
 MODULE_DESCRIPTION("RT2870 Wireless Lan Linux Driver");
+MODULE_LICENSE("GPL");
 #ifdef CONFIG_STA_SUPPORT
 #ifdef MODULE_VERSION
 MODULE_VERSION(STA_DRIVER_VERSION);

配布されているソースアーカイブは拡張子が bz2 となっているのに実際は gzip 圧縮されていますので、
以下のようにアーカイブの展開、patch 後 makeを実行します。

$ cd ~/
$ tar xvfz 2011_0107_RT3070__RT3370_Linux_STA_v2.5.0.1_DPO.tar.bz2
$ patch -p0 < RT3070-2.5.0.1.diff
$ cd 2011_0107_RT3070__RT3370_Linux_STA_v2.5.0.1_DPO/
$ make
$ ls -l os/linux/rt3070sta.ko
-rw-r--r-- 1 beat beat 8809768 2011-01-30 21:58 rt3070sta.ko

make 完了後 os/linux/ 以下に rt3070sta.ko が作成されています。

bc10 用追加ファイルの取得

TI-Android-GingerBread-2.3-DevKit-1.0 を bc10 向けにビルドするための追加ファイルを
github のリポジトリから git clone で取得します。

bc10 device build files

以下のコマンドで TI-Android-GingerBread-2.3-DevKit-1.0 を bc10 向けにビルドするビルド設定ファイル類をソースコード中に追加します。

$ cd ~/bc10/TI-Android-GingerBread-2.3-DevKit-1.0/device
$ git clone git://github.com/bc-dev/2.3-device-beatcraft.git beatcraft
$ git clone git://github.com/bc-dev/2.3-device-common.git common

patch の適用とファイルの配置

ファイルの追加でなく、TI-Android-GingerBread-2.3-DevKit-1.0 のソースコードに直接 bc10 向けの修正を加える patch を適用します。

patch の取得

まず以下のコマンドで patch ファイルを取得します。

$ cd ~/bc10/
$ git clone git://github.com/bc-dev/2.3-patches.git

2.3-patches の中には二つのファイルが入っていますが、TI-Android-GingerBread-2.3-DevKit-1.0 では hardware-ti-omap3.diff の方は使用しません。

wpa_supplicant_6

USB wifi を接続し Android の UI から設定できるよう wpa_supplicant_6 に patch をあてます。

$ cd ~/bc10/TI-Android-GingerBread-2.3-Devkit-1.0/external/wpa_supplicant_6
$ cp ~/bc10/2.3-patches/external-wpa_supplicant_6.diff .
$ patch -p1 < external-wpa_supplicant_6.diff 

USB Wifi ドライバーの配置

前項でビルドした RT3070USB のドライバーと、patch 済みのファームウェアファイルを
device/beatcraft/bc10/ にコピーします。

$ cd ~/bc10/2011_0107_RT3070__RT3370_Linux_STA_v2.5.0.1_DPO/
$ cp os/linux/rt3070sta.ko ~/bc10/TI-Android-GingerBread-2.3-DevKit-1.0/device/beatcraft/bc10/
$ cp RT2870STA.dat ~/bc10/TI-Android-GingerBread-2.3-DevKit-1.0/device/beatcraft/bc10/

このディレクトリに配置したファイルは android のビルド時に
android のビルドシステムによって適正な位置にコピーされます。
詳細は ~/bc10/TI-Android-GingerBread-2.3-DevKit-1.0/device/beatcraft/bc10/device.mk の中の変数
PRODUCT_COPY_FILES をご覧ください。

なお、device/beatcraft/bc10/ の git リポジトリには
ビルド済みの uImage、RT3070sta.ko と、RT2870STA.dat を最初から登録してありますので
そちらを使って androud の起動イメージ を作成することもできますが、
kernel と その kernel に合ったドライバーはお手元でビルドされることをお勧めします。
(kernel の minor revision の違いにより insmod できないといったトラブルを防ぐため。)

以上でビルドの準備が整いました。

Android ビルド

android ビルドのため bc10用の環境変数を設定します。

$ cd ~/bc10/TI-Android-GingerBread-2.3-DevKit-1.0/
$ source build/envsetup.sh
including device/beatcraft/bc10/vendorsetup.sh
including device/htc/passion/vendorsetup.sh
including device/samsung/crespo/vendorsetup.sh
$ lunch

You're building on Linux

Lunch menu... pick a combo:
     1. generic-eng
     2. simulator
     3. full_bc10-eng

Which would you like? [generic-eng] [3] ← 3 を入力し enter

============================================
PLATFORM_VERSION_CODENAME=REL
PLATFORM_VERSION=2.3
TARGET_PRODUCT=full_bc10
TARGET_BUILD_VARIANT=eng
TARGET_SIMULATOR=false
TARGET_BUILD_TYPE=release
TARGET_BUILD_APPS=
TARGET_ARCH=arm
HOST_ARCH=x86
HOST_OS=linux
HOST_BUILD_TYPE=release
BUILD_ID=GRH55
============================================

上記の設定確認後 make を実行します。

$ make

make を実行する際はビルドの環境(CPU のコア数)に応じて -j2 など並列実行を指定すると所要時間を減らすことができます。
make 中に出力される情報を増やしたい場合は showcommands を付加して実行すると
make 中に実行されているコマンドのログを詳細に出力します。

例:

$ time make showcommands -j8 2>&1 | tee make.log-20110420-01

注:bc10ではkernelビルドとAndroid ビルドは別手順として実行しています。
Android ビルド実行時kernelのエラーが表示されますが、Androidのuserlandのビルドが完了していれば
そのまま次の手順にすすんでください。kernelは上記で別途ビルド手順を記載しています。

Target system fs image: out/target/product/bc10/obj/PACKAGING/systemimage_intermediates/system.img
Install system fs image: out/target/product/bc10/system.img
Installed file list: out/target/product/bc10/installed-files.txt
DroidDoc took 132 sec. to write docs to out/target/common/docs/doc-comment-check
in kernel rule
make -C kernel ARCH=arm CROSS_COMPILE=../prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/arm-eabi- uImage
...<略>...
*** You have not yet configured your kernel!
*** (missing kernel config file ".config")
***
*** Please run some configurator (e.g. "make oldconfig" or
*** "make menuconfig" or "make xconfig").
***
make[3]: *** [silentoldconfig] エラー 1
make[2]: *** [silentoldconfig] エラー 2
  CHK     include/linux/version.h
make[1]: *** `include/config/kernel.release' に必要なターゲット `include/config/auto.conf' を make するルールがありません.  中止.
make[1]: *** 未完了のジョブを待っています....
  UPD     include/linux/version.h
make[1]: ディレクトリ `/home/beat/bc10/TI-Android-GingerBread-2.3-DevKit-1.0/kernel' から出ます
make: *** [build_kernel] エラー 2

追加ビルド

上記のビルド完了後、同じ環境変数が設定されたままの状態で以下のコマンドを実行し、
GPS用とセンサー用の HAL ライブラリモジュールを追加ビルドします。

$ cd ~/bc10/TI-Android-GingerBread-2.3-DevKit-1.0/device/beatcraft/bc10/libgps
$ mm
$ cd ~/bc10/TI-Android-GingerBread-2.3-DevKit-1.0/device/beatcraft/bc10/libsensors
$ mm

イメージ作成

ビルド完了後のビルド済みファイルは bc10/TI-Android-GingerBread-2.3-DevKit-1.0/out/target/product/bc10/ にあり、以下のような内容になっています。

$ cd ~/bc10/TI-Android-GingerBread-2.3-DevKit-1.0/out/target/product/bc10/
$ ls -al
drwxr-xr-x  8 beat   beat      4096 2011-04-22 12:39 .
drwxr-xr-x  3 beat   beat      4096 2011-04-21 22:22 ..
-rw-r--r--  1 beat   beat        11 2011-04-21 22:23 android-info.txt
-rw-r--r--  1 beat   beat      3298 2011-04-22 12:01 clean_steps.mk
drwxr-xr-x  3 beat   beat      4096 2011-04-21 22:28 data
-rw-r--r--  1 beat   beat     22691 2011-04-21 22:38 installed-files.txt
drwxr-xr-x 14 beat   beat      4096 2011-04-21 22:38 obj
-rw-r--r--  1 beat   beat       230 2011-04-22 12:01 previous_build_config.mk
-rw-r--r--  1 beat   beat    142359 2011-04-21 22:32 ramdisk.img
drwxr-xr-x  8 beat   beat      4096 2011-04-21 22:32 root
drwxr-xr-x  5 beat   beat      4096 2011-04-21 22:32 symbols
drwxr-xr-x 12 beat   beat      4096 2011-04-21 22:33 system
-rw-------  1 beat   beat 105228288 2011-04-21 22:38 system.img
-rw-------  1 beat   beat   1482624 2011-04-21 22:28 userdata.img

以下のコマンドでビルドされた userland のバイナリを起動可能な配置に整えます。

$ mkdir bc10_image
$ cp -afr root/* bc10_image/
$ cp -afr system/* bc10_image/system/
$ sudo chown -R root.root bc10_image/
$ sudo chmod -R 777 bc10_image/

起動可能な配置の userland は以下のような内容になります。

$ cd bc10_image
$ ls -al
drwxrwxrwx  8 root   root    4096 2011-04-22 12:39 .
drwxr-xr-x  8 beat   beat  4096 2011-04-22 12:39 ..
drwxrwxrwx  2 root   root    4096 2011-04-21 22:23 data
-rwxrwxrwx  1 root   root     145 2011-04-21 22:23 default.prop
drwxrwxrwx  2 root   root    4096 2011-04-21 22:23 dev
-rwxrwxrwx  1 root   root     904 2011-02-07 15:35 gps_init.sh
-rwxrwxrwx  1 root   root   90084 2011-04-21 22:32 init
-rwxrwxrwx  1 root   root    1677 2011-03-23 19:55 init.goldfish.rc
-rwxrwxrwx  1 root   root     917 2011-02-07 15:08 init.omap3.rc
-rwxrwxrwx  1 root   root   15018 2011-02-07 17:15 init.rc
drwxrwxrwx  2 root   root    4096 2011-04-21 22:23 proc
drwxrwxrwx  2 root   root    4096 2011-04-21 22:32 sbin
drwxrwxrwx  2 root   root    4096 2011-04-21 22:23 sys
drwxrwxrwx 12 root   root    4096 2011-04-22 12:40 system
-rwxrwxrwx  1 root   root       0 2011-03-23 19:55 ueventd.goldfish.rc
-rwxrwxrwx  1 root   root     231 2011-02-07 21:05 ueventd.omap3.rc
-rwxrwxrwx  1 root   root    3764 2011-03-23 19:55 ueventd.rc

SGX SDK のインストール

OMAP3530 の video chip PowerVR 用のドライバー TI Android SGX SDK は
TI-Android-GingerBread-2.3-DevKit-1.0 に含まれていますので、
以下のようにしてビルドを行い、先に作成しておいた起動可能イメージディレクトリに
インストールします。

Rules.make の変更

Make を実行するために、Rules.make 内の HOME、GRAPHICS_INSTALL_DIR、ANDROID_ROOT、
CSTOOL_DIR、KERNEL_INSTALL_DIR の記述をそれぞれのファイル PATH に合うよう修正してください。

$ cd ~/bc10/TI-Android-GingerBread-2.3-DevKit-1.0/hardware/ti/sgx/

以下に diff の形で示してあります Rules.make の変更点は、 ここまでのビルド時の設定に従った内容になっています。
ANDROID_ROOT は作成しておいた bc10_image のディレクトリの PATH を指定します。

$ diff -u Rules.make.orig Rules.make
--- Rules.make.orig	2011-03-25 20:16:38.000000000 +0900
+++ Rules.make	2011-04-21 19:21:46.416467759 +0900
@@ -4,21 +4,26 @@
 
 ################# FIELDS MODIFIABLE BY THE USER ###############################
 #set home area HOME (relative location for all SDK operations)
-HOME=$(ANDROID_ROOT_DIR)/hardware/ti/sgx
+#HOME=$(ANDROID_ROOT_DIR)/hardware/ti/sgx
+HOME=/home/beat/bc10/TI-Android-GingerBread-2.3-DevKit-1.0/hardware/ti/sgx
 #Current Directory where Graphics SDK is installed
-GRAPHICS_INSTALL_DIR=$(ANDROID_ROOT_DIR)/hardware/ti/sgx
+#GRAPHICS_INSTALL_DIR=$(ANDROID_ROOT_DIR)/hardware/ti/sgx
+GRAPHICS_INSTALL_DIR=/home/beat/bc10/TI-Android-GingerBread-2.3-DevKit-1.0/hardware/ti/sgx
 #Android Specific
 #Path of Android Root FS
-ANDROID_ROOT=$(ANDROID_ROOT_DIR)/out/target/product/$(TARGET_PRODUCT)
+#ANDROID_ROOT=$(ANDROID_ROOT_DIR)/out/target/product/$(TARGET_PRODUCT)
+ANDROID_ROOT=/home/beat/bc10/TI-Android-GingerBread-2.3-DevKit-1.0/out/target/product/bc10/bc10_image
 #set toolchain root path for arm-eabi
-CSTOOL_DIR=$(ANDROID_ROOT_DIR)/prebuilt/linux-x86/toolchain/arm-eabi-4.4.0
+#CSTOOL_DIR=$(ANDROID_ROOT_DIR)/prebuilt/linux-x86/toolchain/arm-eabi-4.4.0
+CSTOOL_DIR=/home/beat/bc10/TI-Android-GingerBread-2.3-DevKit-1.0/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3
 CSTOOL_PREFIX=arm-eabi-
 CSTOOL_PATH=$(CSTOOL_DIR)/bin
 
 CSTOOL_LIBSTDC++_PATH=$(CSTOOL_DIR)/arm-none-linux-gnueabi/libc/usr/lib
 
 #set the kernel installation path
-KERNEL_INSTALL_DIR=$(ANDROID_ROOT_DIR)/kernel
+#KERNEL_INSTALL_DIR=$(ANDROID_ROOT_DIR)/kernel
+KERNEL_INSTALL_DIR=/home/beat/bc10/bc10-rowboat-kernel
 TARGETFS_INSTALL_DIR=$(ANDROID_ROOT)
 
 GFX_TARGETFS_KERMOD_PATH=$(TARGETFS_INSTALL_DIR)/lib/modules/2.6.32
 

RULEs.make変更完了後make、make installを実行します。

$ make OMAPES=3.x
$ make OMAPES=3.x install

Kernel 以外の起動に必要なファイルのビルド

u-boot

u-boot-bc10 のアップデートにより、有機ELを表示デバイスの初期値とする boot.scr の設定を
予め組込むように修正しています。
また起動時の u-boot shell の入力待機時間を10秒から2秒に変更しています。
以下のコマンドでソースコードを取得しビルドします。

$ cd ~/bc10/
$ git clone git://gitorious.org/bc10/u-boot-bc10.git u-boot-bc10
$ cd u-boot-bc10/
$ make mrproper
$ make omap3_bc10_config

arm-eabi-4.4.3のtoolchainでmakeを実行すると以下のようなリンカのエラーが起こります。

arm-eabi-ld: error: u-boot.lds:34:24: OVERLAY section type is unsupported
/bin/sh: line 1: 12830 Segmentation fault   ...<略>...

このエラーを回避するために、LDのオプションを追加してmakeを実行します。

$ make LD=arm-eabi-ld.bfd

有機ELを表示デバイスの初期値とする設定は u-boot-bc10 内の
include/configs/omap3_bc10.h に以下のように記述しています。

u-boot-bc10/include/configs$ vi omap3_bc10.h
#define CONFIG_EXTRA_ENV_SETTINGS \
        "loadaddr=0x82000000\0" \
        "usbtty=cdc_acm\0" \
        "console=ttyS2,115200n8\0" \
        "androidconsole=ttyS2\0" \
        "mem=256M\0" \
        "vram=12M\0" \
        "dvimode=1024x768MR-24@60\0" \
        "defaultdisplay=lcd\0" \
        "mmcroot=/dev/mmcblk0p2 rw\0" \
        "mmcrootfstype=ext3 rootwait\0" \
        "nandroot=/dev/mtdblock4 rw\0" \ 

これは、以下の boot.scr と同じ設定内容になります。

if fatload mmc 0 84000000 uImage
then
 echo ***** Kernel: /dev/mmcblk0p1/uImage.bin *****
fi
echo ***** RootFS: /dev/mmcblk0p2 *****
setenv bootargs 'mem=256M androidboot.console=ttyS2 console=tty0  
console=ttyS2,115200n8 root=/dev/mmcblk0p2 init=/init rootwait omapdss.def_disp=lcd'
bootm 84000000
(注)setenv bootargs〜 disp=lcd' は改行してありますが、使用される際は1行で記述してください。

ビルド後 u-boot.bin は SDカードFATパーティションに MLO ファイルをコピーした後にコピーします。
(必ず MLO ファイルを最初に FATパーティションにコピーする必要があります。)

x-loader

以下のコマンドでソースコードを取得しビルドします。

$ cd ~/bc10/
$ git clone git://gitorious.org/~bc-dev/x-load-omap3/x-load-bc10.git x-load-bc10
$ cd x-load-bc10/
$ git checkout -t -b bc10 origin/bc10
$ make omap3530bc10_config
$ make

x-load.bin は OMAP BootROMの仕様とフォーマットが合っていないため、このまま NAND Flash や
SDカードに書きこんでもブートローダとして動作させることができません。
この問題を解決するため signGP というツールで x-load.bin を加工する必要があります。

signGP の実行ファイルは以下の場所からダウンロードすることができます。
http://beagleboard.googlecode.com/files/signGP
ダウンロードした signGP は実行権を付けて以下のように実行します。

$ signGP x-load.bin

実行後 x-load.bin.ift というファイルが生成されていますので、 これを MLO という名前に変更します。

$ mv x-load.bin.ift MLO

MLO は SDカードFATパーティションの先頭に書き込むためのファイルです。
この名前になっていないと OMAP3530 内のブートロムコードが見つけることができません。

起動用 SD カードの作成

bc10/booting 起動用SDカード作成
手順に従って作成していきます。
この作成手順はSDカード用です。
(bc10 は、設計上マイクロSDからのブートは出来ません。)

SDカードのパーティション配置、ファイル配置の概略は以下のようになります。

  • FAT32パーティション
    • X-Loader
    • U-Boot
    • Android 化 Linux kernel
  • Linuxパーティション
    • Android ルートファイルシステム

作業環境は Linux を想定しています。
作業手順は以下のようになります。

  1. パーティションの初期化・設定
  2. ファイルシステムのフォーマット
  3. ファイルの配置

以下の手順は主にLinuxBootDiskFormat(code.google.com)から引用してアレンジしたものです。

SDカードのアンマウント

このあとパーティション操作やフォーマット作業をおこなうために、
SDカードがマウントされている場合には、まずアンマウントをおこないます。
以下のようにSDカードがマウントされているとします。

$ df -h
Filesystem            Size  Used Avail Use% Mounted on
...
/dev/sdd1             400M   94M  307M  24% /media/disk
...

アンマウントをおこないます。

$ umount /media/disk

パーティションの初期化・設定

fdiskコマンドを実行します。
引数にはSDカードのデバイスファイルを指定します。
この位置は作業環境によって変わりますので、事前に確認しておいてください。
以下は実行例です。

$ sudo fdisk /dev/sdd
Command (m for help): [p]

Disk /dev/sdd: 2021 MB, 2021654528 bytes
255 heads, 63 sectors/track, 245 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sdd1   *           1         246     1974240+   c  W95 FAT32 (LBA)
Partition 1 has different physical/logical endings:
     phys=(244, 254, 63) logical=(245, 200, 19)

パーティションを全て削除します。

Command (m for help): [d]
Selected partition 1

エキスパートモードにモード変更します。

Command (m for help): [x]

ヘッダ数を255に設定します。

Expert Command (m for help): [h]
Number of heads (1-256, default xxx): [255]

セクタ数を63に設定します。

Expert Command (m for help): [s]
Number of sectors (1-63, default xxx): [63]

シリンダ数の設定は使用するSDカードごとに異なります。
以下の計算式でシリンダ数を計算します。(小数点以下切り捨て)

#シリンダ数 = 小数点以下切り捨て (SDカードのバイト数 / 255 / 63 / 512 )

今回の例で使用しているSDカードでは以下のようになります。

2021654528 / 255 / 63 / 512 = 245.79
-> 245

シリンダ数を設定します。今回の例では245になります。

Expert Command (m for help): [c]
Number of cylinders (1-256, default xxx): [上式で求めた値]

ノーマルモードにモード変更します。

Expert Command (m for help): [r]

FAT32パーティションを作成します。

Command (m for help): [n]
Command action
   e   extended
   p   primary partition (1-4)
[p]
Partition number (1-4): [1]
First cylinder (1-245, default 1): [(press Enter)]
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-245, default 245): [+50]

Command (m for help): [t]
Selected partition 1
Hex code (type L to list codes): [c]
Changed system type of partition 1 to c (W95 FAT32 (LBA))

ブートフラグを設定します。

Command (m for help): [a]
Partition number (1-4): [1]

Linuxのファイルシステム用パーティションを作成します。

Command (m for help): [n]
Command action
   e   extended
   p   primary partition (1-4)
[p]
Partition number (1-4): [2]
First cylinder (52-245, default 52): [(press Enter)]
Using default value 52
Last cylinder or +size or +sizeM or +sizeK (52-245, default 245): [(press Enter)]
Using default value 245

パーティション設定を確認します。

Command (m for help): [p]

Disk /dev/sdd: 2021 MB, 2021654528 bytes
255 heads, 63 sectors/track, 245 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sdd1   *           1          51      409626    c  W95 FAT32 (LBA)
/dev/sdd2              52         245     1558305   83  Linux

パーティションテーブルの変更を保存します。

Command (m for help): [w]
The partition table has been altered!

Calling ioctl() to re-read partition table.

WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table.
The new table will be used at the next reboot.

WARNING: If you have created or modified any DOS 6.x
partitions, please see the fdisk manual page for additional
information.
Syncing disks.

ファイルシステムのフォーマット

FAT32パーティションとLinuxパーティションをそれぞれフォーマットします。
FAT32とEXT3の文字列の部分はパーティションのラベルになりますので、お好きな名前で設定してください。

$ [sudo mkfs.msdos -F 32 /dev/sdd1 -n FAT32]
mkfs.msdos 2.11 (12 Mar 2005)
$ [sudo mkfs.ext3 -L EXT3 /dev/sdd2]
mke2fs 1.40-WIP (14-Nov-2006)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
195072 inodes, 389576 blocks
19478 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=402653184
12 block groups
32768 blocks per group, 32768 fragments per group
16256 inodes per group
Superblock backups stored on blocks: 
        32768, 98304, 163840, 229376, 294912

Writing inode tables: done                            
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: 

SDカードへのファイルの書き込み

FAT32パーティションへのファイル配置

1段目のブートローダであるX-Loader(MLO)は、SDカード上の配置方法に制約があります。
必ず以下のように配置してください。

  • FAT32パーティションのフォーマット後、最初に配置するようにします。
  • パーティション内のトップディレクトリに配置します。
$ cd ~/bc10/x-load-bc10/
$ sudo cp MLO /media/FAT32/

他のファイルには配置方法に特に規則はありません。そのままSDカード上にコピーしてください。

$ cd ~/bc10/u-boot-bc10/
$ sudo cp u-boot.bin /media/FAT32/
$ cd ~/bc10/bc10-rowboat-kernel/arch/arm/boot/
$ sudo cp uImage /media/FAT32/

配置する順序を間違えたり手順に失敗したりした場合は、
FAT32パーティションのフォーマットからやり直してください。

EXT3パーティションへの配置

EXT3パーティションへの配置には特に制限はありません。
bc10-image/ の中身をまるごと SDカード上にコピーします。

$ cd ~/bc10/TI-Android-GingerBread-2.3-DevKit-1.0/out/target/product/bc10/bc10_image/
$ sudo cp -a * /media/EXT3/


以上で起動イメージのSDカード上への配置は完了です。
念のため sync を行ってからアンマウントしてください。

$ sudo sync
$ umount /media/EXT3
$ umount /media/FAT32

SDカードからの起動

用意できたSDカードを bc10 のSDカードスロットに挿入して電源を投入します。
Android は初回起動時に SQLite3 設定DBの作成や Dalvik Executable(.dex)ファイルの生成を行い
それらの起動ディスクへの書き込みを行いますので、初回起動には少し長めに時間がかかります。

これで bc10 向けの TI-Android-GingerBread-2.3-DevKit-1.0 の起動イメージの作成は完了です。

備考

ボタン配置について

bc10の本体正面右側に7つのボタンがあります。
図a.の数字で示した各ボタンは、以下のように予め設定してあります。
(図のbc10 筐体は試作用筐体です)

1. Menu
2. Back
3. Home
4. 上
5. 左
6. 右
7. 下
keypad_android.jpg


boot.scr について

u-boot-bc10 のアップデートにより、有機ELを表示デバイスの初期値とする設定は
u-boot-bc10 内の include/configs/omap3_bc10.h に以下のように予め設定しています。
そのため boot.scr の配置を行っていませんが、
同じ内容の設定を boot.scr に記述して起動することも可能です。
その際は、u-boot.bin の設定は boot.scr の設定で上書きされて起動します。
有機ELを表示デバイスの初期値とする設定の boot.scr は以下のように作成します。

$ cd ~
$ vi boot.script

if fatload mmc 0 84000000 uImage
then
  echo ***** Kernel: /dev/mmcblk0p1/uImage.bin *****
 fi
 echo ***** RootFS: /dev/mmcblk0p2 *****
 setenv bootargs 'mem=256M androidboot.console=ttyS2 console=tty0  
 console=ttyS2,115200n8 root=/dev/mmcblk0p2 init=/init rootwait omapdss.def_disp=lcd'
 bootm 84000000
(注)setenv bootargs〜 disp=lcd' は改行していますが、使用される際は1行で記述してください。

$ mkimage -A arm -O linux -T script -C none -a 0 -e 0 -n ./boot.script -d ./boot.script ./boot.scr &> /dev/null

またHDMI-DVIコネクタ経由で外部の液晶ディスプレイなどに出力して起動する場合は
上記 boot.scr の omapdss.def_disp=lcd を omapdss.def_disp=dvi に変更し、
解像度を設定してください。
現在 1280x768 の解像度まで動作を確認しています。

if fatload mmc 0 84000000 uImage
then
  echo ***** Kernel: /dev/mmcblk0p1/uImage.bin *****
 fi
setenv bootargs 'mem=256M androidboot.console=ttyS2 console=tty0  
console=ttyS2,115200n8 root=/dev/mmcblk0p2 init=/init rootwait 
omapfb.mode=dvi:1024x768MR-24@60 omapdss.def_disp=dvi'
 bootm 84000000
(注)setenv bootargs〜 disp=lcd' は改行していますが、使用される際は1行で記述してください。

omapfb.mode や omapdss の詳細については、kernelソースファイル内
kernel/Documentation/arm/OMAP/DSS をご覧ください

SDカードについて

bc10 で動作確認をとった SDカードは以下のものになります。

記載されている全てのSDカードの動作確認は取っておりませんが、 TI-Android-GingerBread-2.3-DevKit-1.0 UserGuide のページに推奨SDカードが記載されています。

SD_Card_Recommendations

参照URL

更新記録

2011/04/26 初稿公開
2011/05/27 注意事項(注:)を追加、u-bootの項目修正


添付ファイル: filekeypad_android.jpg 1553件 [詳細] fileRT3070-2.5.0.1.diff 1733件 [詳細] file2011_0107_RT3070_RT3370_Linux_STA_v2.5.0.1_DPO.tar.bz2 1539件 [詳細]

BC::labsへの質問は、bc9-dev @ googlegroups.com までお願い致します。
トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   最終更新のRSS
Last-modified: 2011-09-05 (月) 16:48:29 (4808d)