labs.beatcraft.com
bc10


bc10/prebuilt-20110127 概要

bc10/prebuilt-20110127は、rowboat コミュニティーのTI-Android-FroYo-Devkit-V2がベースのAndroidのバージョンとなります。

TI-Android-FroYo-Devkit-V2のfroyoはmaster branchにあったころの安定版に相当します。
そのためAOSP Android 2.2_r1.1とは複数箇所で差異があります。

bc10/prebuilt-20110107のAndroidベースバージョンは
AOSP Android 2.2_r1.1です。
このbc10/prebuilt-20110127の項目は
TI-Android-FroYo-Devkit-V2のfroyoという別バージョンとして記載しています。

bc10/TI-Android-FroYo-Devkit-V2に追加、修正を加えた
TI-Android-FroYo-Devkit-V2 prebuiltイメージ作成手順
について記載しています。

大きな項目としては以下のものがあります。

主な変更は以下のとおりです。


一部デバイスに対応中の箇所があります。予告無く更新することがありますのでご了承ください。

bc10/TI-Android-FroYo-Devkit-V2


2010年10月27日にテキサスインスツルメンツ社より
TI-Android-FroYo-Devkit-V2がリリースされました。
TI-Android-FroYo-Devkit-V2は主にTI製品向けのfroyoの安定版です。

TI-Android-FroYo-Devkit-V2のfroyo について

前述のとおりTI-Android-FroYo-Devkit-V2 は、
主にTI製品向けのfroyoの安定版になります。

またlunchコマンド実行時に以下のような表示がされます。

BUILD_ID=MASTER

TI-Android-FroYo-Devkit-V2のfroyoはmaster branch
にあったころの安定版に相当します。
そのためAOSP Android 2.2_r1.1 とは複数箇所で差異があります。

(略)
/TI-Android-FroYo-DevKit-V2$ lunch bc10-eng
============================================
PLATFORM_VERSION_CODENAME=REL
PLATFORM_VERSION=2.2
TARGET_PRODUCT=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=MASTER
============================================

主な特徴

TI-Android-FroYo-Devkit-V2は、OMAP35x EVM, AM35x EVM,
AM37x EVM, Beagleboard Rev CxやBeagleboard XM向けのSDKパッケージです。

また、TI-Android-Froyo-Devkit-V2.xmlは各プロダクトの
特定のバージョンを取得できるようにxml内に
各プロダクトごとのリビジョンを含んでいます。

以下、TI-Android-FroYo-Devkit-V2 の開発環境、bc10用へ変更方法や
prebuiltイメージ作成について記載します。

(注):開発マシンのメモリが 1GB未満の場合repo sync実行時にprebuiltやsdkのfetchで
エラーが起こります。以下の手順は1GB以上のメモリで動作確認をしています。

TI-Android-FroYo-DevKit-V2_ReleaseNotes 
TI-Android-FroYo-DevKit-V2_UserGuide

prebuilt イメージの作成手順

開発環境

今回の開発環境の概略は以下のとおりです。

パッケージインストール

Ubuntuのリポジトリから必要なパッケージを取得してインストールします。

$ sudo apt-get install git-core gnupg flex bison gperf libsdl-dev libesd0-dev \
  libwxgtk2.6-dev build-essential zip curl libncurses5-dev zlib1g-dev uboot-mkimage

java5

TI-Android-FroYo-Devkit-V2 のビルドに必要なsun-java5-jdkはUbuntu 9.10 以降
リポジトリから外されていますので/etc/apt/sources.listに、
一時的に古いリポジトリを追加します。

$ sudo vi /etc/apt/sources.list
  ## respective vendors as a service to Ubuntu users.
  deb http://archive.canonical.com/ubuntu lucid partner
  deb-src http://archive.canonical.com/ubuntu lucid partner
 
  deb http://archive.ubuntu.com/ubuntu lucid-security main restricted
  deb-src http://archive.ubuntu.com/ubuntu lucid-security restricted main multiverse universe #Added by software-properties
  deb http://archive.ubuntu.com/ubuntu lucid-security universe
  deb http://archive.ubuntu.com/ubuntu lucid-security multiverse
+ deb http://us.archive.ubuntu.com/ubuntu/ jaunty multiverse
+ deb http://us.archive.ubuntu.com/ubuntu/ jaunty-updates multiverse

追加完了後、apt-get updateコマンドでリポジトリ情報の取得をし、
sun-java5-jdkをインストールします。

$ sudo apt-get update
$ sudo apt-get install sun-java5-jdk

インストール完了後、誤って他の古いパッケージをインストールしないよう、
上記で追加したリポジトリを削除しておきます。

$ sudo vi /etc/apt/sources.list
  ## respective vendors as a service to Ubuntu users.
  deb http://archive.canonical.com/ubuntu lucid partner
  deb-src http://archive.canonical.com/ubuntu lucid partner
 
  deb http://archive.ubuntu.com/ubuntu lucid-security main restricted
  deb-src http://archive.ubuntu.com/ubuntu lucid-security restricted main multiverse universe #Added by software-properties
  deb http://archive.ubuntu.com/ubuntu lucid-security universe
  deb http://archive.ubuntu.com/ubuntu lucid-security multiverse
- deb http://us.archive.ubuntu.com/ubuntu/ jaunty multiverse
- deb http://us.archive.ubuntu.com/ubuntu/ jaunty-updates multiverse

もう一度apt-get updateで現状のリポジトリ情報の取得をして元の状態に戻します。

$ sudo apt-get update

Android ソースファイル取得

repo 設定

androidのソースコードを取得するためにrepoの設定を行います。
ホームディレクトリにbinというディレクトリを作成しrepoを取得します。
注:以後、/home/beatをホームディレクトリとして記載します。

$ 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

ファイルの取得

TI-Android-Froyo-Devkit-V2の取得方法を記載します。
Androidのソースファイルを取得するのためにTI-Android-FroYo-DevKit-V2.xmlを使用します。

TI_Android_DevKit 02_00_00 Product Download Page から
TI-Android-FroYo-DevKit-V2.xml をダウンロードします。

(注):ファイル取得完了までに時間がかかることがあります。
また、作業には1GB以上のメモリを必要とします。開発マシンのメモリが
1GB未満の場合repo syncでprebuiltやsdk のfetch の際にエラーが起こります。

$ cd ~
$ mkdir TI-Android-FroYo-DevKit-V2
$ cd TI-Android-FroYo-DevKit-V2
$ wget http://software-dl.ti.com/dsps/dsps_public_sw/sdo_tii/TI_Android_DevKit/02_00_00/exports/TI-Android-FroYo-DevKit-V2.xml
$ repo init -u git://gitorious.org/rowboat/manifest.git -m TI-Android-FroYo-DevKit-V2.xml
$ repo sync

bc10 用 DevKit V2 patch

添付ファイルにあるbc10用DevKit V2 patchのdevkitv2-patches-for-bc10.tar.gzを
取得しファイルを展開します。

filedevkitv2-patches-for-bc10.tar.gz
$ cd ~
$ tar xvfz devkitv2-patches-for-bc10.tar.gz
$ cd devkitv2-patches-for-bc10

bc10-devkitV2-patch.sh 内のANDROID_DIR、SETUP_DIRと
PATCH_DIRは以下のように設定しています。
bc10-devkitV2-patch.sh の中の以下の環境変数を
ファイルの PATH に合うよう修正してください。

### Settings
#ANDROID_DIR=${HOME}/TI_Android_FroYo_DevKit-V2/Android_Source_Manifest/rowboat-android
ANDROID_DIR=${HOME}/prebuilt-20110122-DevkitV2/TI-Android-FroYo-DevKit-V2
SETUP_DIR=${HOME}/prebuilt-20110122-DevkitV2/devkitv2-patches-for-bc10
PATCH_DIR=${SETUP_DIR}/patches
###

patch適用後、device/ti以下にbc10ディレクトリが作成されます。

$ cd ~
$ tar xvfz devkitv2-patches-for-bc10.tar.gz
$ cd ~/devkitv2-patches-for-bc10
$ ./bc10-devkitV2-patch.sh
$ ls TI-Android-FroYo-DevKit-V2/device/ti/
am3517evm  bc10  beagleboard  igepv2  omap3evm

Android のビルド

bc10用設定ファイルを読み込みビルドします。

$ cd ~/TI-Android-FroYo-DevKit-V2
$ source build/envsetup.sh
$ lunch bc10-eng
$ make

イメージの作成

ビルドが終了したらビルドされたuserlandのバイナリを起動可能な配置に整えます。
userlandを整えるスクリプトmkbc10-image.shを使用します。
mkbc10-image.sh内の ANDROID_DIR は以下のように設定しています。
ファイルのPATHに合うよう修正してください。

### Settings
#ANDROID_DIR=${HOME}/bc10
ANDROID_DIR=${HOME}/prebuilt-20110122-DevkitV2/TI-Android-FroYo-DevKit-V2
###
$ cd ~/devkitv2-patches-for-bc10
$ ./mkbc10-image.sh

実行後、TI-Android-FroYo-DevKit-V2/out/target/product/bc10/に、
bc10-imageディレクトリが作成されます。
このディレクトリ内にandroid userlandが配置されます。

環境変数の設定

bootに必要なx-loader、u-boot、kernelはAndroidのソースコードと共に
配布されているtoolchainを使用してビルドを実行します。
ビルド時に以下のtoolchainでcross compileが実行されるように
環境変数の設定をします。

PATHのディレクトリ位置は上記の設定に合わせています。

$ export PATH=/home/beat/TI-Android-FroYo-DevKit-V2/prebuilt/linux-x86/toolchain/arm-eabi-4.4.0/bin:$PATH
$ export ARCH=arm
$ export CROSS_COMPILE=arm-eabi-

kernel のビルド

$ cd ~
$ git clone git://gitorious.org/~bc-dev/rowboat/bc10-rowboat-kernel.git bc10-rowboat-kernel
$ cd 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が作成されます。

$ ls arch/arm/boot/
Image  Makefile  bootp  compressed  install.sh  uImage  zImage

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

ここでは、RT3070USBを使用している無線LAN USBデバイス、
Baffalo WLI-UG-G301N について記載します。

ドライバーはRALINK Webにある
Linux ドライバー2011_0107_RT3070_RT3370_Linux_STA_v2.5.0.1_DPO.tar.bz2と
ファームウェアRT28XX/RT30XX USB series (RT2870/RT2770/RT3572/RT3070)を使用します。

ドライバー及びファームウェアの入手はメールアドレスと氏名の入力を必要とします、
またドライバーのバージョンアップが行われた際過去のドライバーの取得ができないため
下記にドライバーを添付します。

toolchainは上記kernelビルド時に設定したAndroidソースファイル内の
prebuilt/linux-x86/toolchain/arm-eabi-4.4.0/bin を使用します。

file2011_0107_RT3070_RT3370_Linux_STA_v2.5.0.1_DPO.tar.bz2
fileRT3370USB.diff


bc10用に下記のように2011_0107_RT3070_RT3370_Linux_STA_v2.5.0.1_DPOを修正するか、
もしくは添付のRT3370USB.diffからのpatchコマンドを実行してください。
patchを当てることで bc10 向けにクロスコンパイルできるようになります。

変更内容は、

+LINUX_SRC = /home/beat/prebuilt-20110122-DevkitV2/bc10-rowboat-kernel
+CROSS_COMPILE = /home/beat/prebuilt-20110122-DevkitV2/TI-Android-FroYo-DevKit-V2/prebuilt/linux-x86/toolchain/arm-eabi-4.4.0/bin/arm-eabi-
$ cd ~
$ tar xvfz 2011_0107_RT3070_RT3370_Linux_STA_v2.5.0.1_DPO.tar.bz2
$ patch -p0 < RT3370USB.diff
$ cd 2011_0107_RT3070_RT3370_Linux_STA_v2.5.0.1_DPO/

修正が完了したら、makeを実行します。make 完了後 os/linux 以下にrt3070sta.ko が作成されます。

$ make
$ ls -l os/linux/rt3070sta.ko
-rw-r--r-- 1 beat beat 10871281 2011-01-20 14:50 os/linux/rt3070sta.ko
diff -urpN 2011_0107_RT3070_RT3370_Linux_STA_v2.5.0.1_DPO-orig/Makefile 2011_0107_RT3070_RT3370_Linux_STA_v2.5.0.1_DPO/Makefile
--- 2011_0107_RT3070_RT3370_Linux_STA_v2.5.0.1_DPO-orig/Makefile        2011-01-07 11:18:32.000000000 +0900
+++ 2011_0107_RT3070_RT3370_Linux_STA_v2.5.0.1_DPO/Makefile    2011-01-18 18:11:40.641082398 +0900
@@ -23,7 +23,8 @@ endif
 RTMP_SRC_DIR = $(RT28xx_DIR)/RT$(CHIPSET)

 #PLATFORM: Target platform
-PLATFORM = PC
+#PLATFORM = PC
+PLATFORM = BC10
 #PLATFORM = 5VT
 #PLATFORM = IKANOS_V160
 #PLATFORM = IKANOS_V180
@@ -176,6 +177,11 @@ LINUX_SRC_MODULE = /lib/modules/$(shell

 CROSS_COMPILE =
 endif

+ifeq ($(PLATFORM),BC10)
+LINUX_SRC = /home/beat/prebuilt-20110122-DevkitV2/bc10-rowboat-kernel
+CROSS_COMPILE = /home/beat/prebuilt-20110122-DevkitV2/TI-Android-FroYo-DevKit-V2/prebuilt/linux-x86/toolchain/arm-eabi-4.4.0/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,10 @@ ifeq ($(OSABL),YES)
        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,7 +402,7 @@ endif
 endif
 endif
 endif
-
+endif

 release:
       $(MAKE) -C $(RT28xx_DIR)/striptool -f Makefile.release clean
@@ -423,6 +433,9 @@ ifeq ($(TARGET), LINUX)
        $(MAKE) -C os/linux clean
        rm -rf os/linux/Makefile
 endif
+ifneq ($(TARGET), THREADX)
+       $(MAKE) -C tools clean
+endif
 ifeq ($(TARGET), UCOS)
        $(MAKE) -C os/ucos clean MODE=$(RT28xx_MODE)
 endif
diff -urpN 2011_0107_RT3070_RT3370_Linux_STA_v2.5.0.1_DPO-orig/RT2870STA.dat 2011_0107_RT3070_RT3370_Linux_STA_v2.5.0.1_DPO/RT2870STA.dat
--- 2011_0107_RT3070_RT3370_Linux_STA_v2.5.0.1_DPO-orig/RT2870STA.dat   2011-01-07 11:18:32.000000000 +0900
+++ 2011_0107_RT3070_RT3370_Linux_STA_v2.5.0.1_DPO/RT2870STA.dat        2011-01-18 18:05:18.130569879 +0900
@@ -1,8 +1,10 @@
 #The word of "Default" must not be removed
 Default
 CountryRegion=5
-CountryRegionABand=7
-CountryCode=
+#CountryRegionABand=7
+CountryRegionABand=1
+#CountryCode=
+CountryCode=JP
 ChannelGeography=1
 SSID=11n-AP
 NetworkType=Infra
diff -urpN 2011_0107_RT3070_RT3370_Linux_STA_v2.5.0.1_DPO-orig/common/rtusb_dev_id.c 2011_0107_RT3070_RT3370_Linux_STA_v2.5.0.1_DPO/common/rtusb_dev_id.c
--- 2011_0107_RT3070_RT3370_Linux_STA_v2.5.0.1_DPO-orig/common/rtusb_dev_id.c   2011-01-07 11:18:32.000000000 +0900
+++ 2011_0107_RT3070_RT3370_Linux_STA_v2.5.0.1_DPO/common/rtusb_dev_id.c        2011-01-18 18:06:15.102333133 +0900
@@ -104,6 +104,13 @@ USB_DEVICE_ID rtusb_dev_id[] = {
         {USB_DEVICE(0x13D3,0x3321)}, /* Azurewave */
         {USB_DEVICE(0x07FA,0x7712)}, /* Edimax */
         {USB_DEVICE(0x0789,0x0166)}, /* Edimax */
+        {USB_DEVICE(0x2019,0xED14)}, /* PLANEX*/
+        {USB_DEVICE(0x2019,0xAB29)}, /* PLANEX*/
+        {USB_DEVICE(0x0789,0x0164)}, /* Logitec*/
+        {USB_DEVICE(0x0789,0x0168)}, /* Logitec*/
+        {USB_DEVICE(0x0411,0x01a2)}, /* Buffalo*/
+        {USB_DEVICE(0x0411,0x016f)}, /* Buffalo*/
+        {USB_DEVICE(0x0411,0x015d)}, /* Buffalo*/
 #endif /* RT3070 */
        { }/* Terminating entry */
 };
diff -urpN 2011_0107_RT3070_RT3370_Linux_STA_v2.5.0.1_DPO-orig/include/firmware.h 2011_0107_RT3070_RT3370_Linux_STA_v2.5.0.1_DPO/include/firmware.h
--- 2011_0107_RT3070_RT3370_Linux_STA_v2.5.0.1_DPO-orig/include/firmware.h      2011-01-07 11:18:32.000000000 +0900
+++ 2011_0107_RT3070_RT3370_Linux_STA_v2.5.0.1_DPO/include/firmware.h   2011-01-20 19:09:02.032635701 +0900
@@ -1,28 +1,5 @@
-/*
- *************************************************************************
- * Ralink Tech Inc.
- * 5F., No.36, Taiyuan St., Jhubei City,
- * Hsinchu County 302,
- * Taiwan, R.O.C.
- *
- * (c) Copyright 2002-2010, Ralink Technology, Inc.
- *
- * This program is free software; you can redistribute it and/or modify  *
- * it under the terms of the GNU General Public License as published by  *
- * the Free Software Foundation; either version 2 of the License, or     *
- * (at your option) any later version.              *
- *              *
- * This program is distributed in the hope that it will beuseful,       *
- * but WITHOUT ANY WARRANTY; without even the implied warranty of        *
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
- * GNU General Public License for more details.              *
- *              *
- * You should have received a copy of the GNU General Public License     *
- * along with this program; if not, write to the              *
- * Free Software Foundation, Inc.,              *
- * 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
- *               *
- *************************************************************************/
+/* AUTO GEN PLEASE DO NOT MODIFY IT */
+/* AUTO GEN PLEASE DO NOT MODIFY IT */

 UCHAR FirmwareImage [] = {
diff -urpN 2011_0107_RT3070_RT3370_Linux_STA_v2.5.0.1_DPO-orig/os/linux/config.mk 2011_0107_RT3070_RT3370_Linux_STA_v2.5.0.1_DPO/os/linux/config.mk
--- 2011_0107_RT3070_RT3370_Linux_STA_v2.5.0.1_DPO-orig/os/linux/config.mk      2011-01-07 11:20:51.000000000 +0900
+++ 2011_0107_RT3070_RT3370_Linux_STA_v2.5.0.1_DPO/os/linux/config.mk   2011-01-18 18:08:15.011707777 +0900
@@ -11,7 +11,8 @@ HAS_QA_SUPPORT=n
 HAS_XLINK=n

 # Support Wpa_Supplicant
-HAS_WPA_SUPPLICANT=n
+#HAS_WPA_SUPPLICANT=n
+HAS_WPA_SUPPLICANT=y

 # Support Native WpaSupplicant for Network Maganger
 HAS_NATIVE_WPA_SUPPLICANT_SUPPORT=n
@@ -415,6 +416,10 @@ ifeq ($(PLATFORM),PC)
     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-rame-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)
diff -urpN 2011_0107_RT3070_RT3370_Linux_STA_v2.5.0.1_DPO-orig/os/linux/usb_main_dev.c 2011_0107_RT3070_RT3370_Linux_STA_v2.5.0.1_DPO/os/linux/usb_main_dev.c
--- 2011_0107_RT3070_RT3370_Linux_STA_v2.5.0.1_DPO-orig/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/os/linux/usb_main_dev.c      2011-01-20 14:49:31.713651825 +0900
 @@ -40,6 +40,7 @@ MODULE_DESCRIPTION("RT2870 Wireless Lan 
 #ifdef CONFIG_STA_SUPPORT
 #ifdef MODULE_VERSION
 MODULE_VERSION(STA_DRIVER_VERSION);
+MODULE_LICENSE("GPL");
 #endif
 #endif /* CONFIG_STA_SUPPORT */
注:  EXTRA_CFLAGS := -D__KERNEL__ -DMODULE=1 -I$(LINUX_SRC)から-nostdinc -iwithprefix include $(WFLAGS)までは1行になります。

USB Wifi (RT3070USB) ドライバー 配置について

接続設定の詳細については 2011_0107_RT3070_RT3370_Linux_STA_v2.5.0.1_DPO/README_STA_usb 
をご覧ください。

$ sudo mkdir ~/TI-Android-FroYo-DevKit-V2/out/target/product/bc10/bc10-image/system/lib/modules
$ sudo mkdir -p ~/TI-Android-FroYo-DevKit-V2/out/target/product/bc10/bc10-image/system/etc/Wireless/RT2870STA
$ sudo cp -afr os/linux/rt3070sta.ko ~/TI-Android-FroYo-DevKit-V2/out/target/product/bc10/bc10-image/system/lib/modules/
$ sudo cp -afr RT2870STA.dat ~/TI-Android-FroYo-DevKit-V2/out/target/product/bc10/bc10-image/system/etc/Wireless/RT2870STA/
$ cd ~
$ unzip RT2870_Firmware_V22.zip
$ cd RT2870_Firmware_V22/
$ sudo mkdir ~/TI-Android-FroYo-DevKit-V2/out/target/product/bc10/bc10-image/system/etc/firmware
$ sudo cp -afr * ~/TI-Android-FroYo-DevKit-V2/out/target/product/bc10/bc10-image/system/etc/firmware/
$ sudo chown -R root.root ~/TI-Android-FroYo-DevKit-V2/out/target/product/bc10/bc10-image/system
$ sudo chmod -R 777 ~/TI-Android-FroYo-DevKit-V2/out/target/product/bc10/bc10-image/system

SGX SDK のビルド

bc10/froyoと同じ手順でTI Android SGX SDKを取得します。

(注):取得完了までに時間がかかることがあります。
bc10/froyoにてOMAP35x_Android_Graphics_SDK_3_01_00_03をインストール済みの場合は
同じファイルなので転用しても問題ありません、Rules.makeのディレクトリ位置の変更には
注意してください。再度ダウンロードの際は任意にバックアップもしくは削除などをしてください。

$ cd ~
$ git clone git://gitorious.org/rowboat/ti_android_sgx_sdk.git
$ cd ti_android_sgx_sdk/
$ ./OMAP35x_Android_Graphics_SDK_setuplinux_3_01_00_03.bin

インストールディレクトリ位置を聞かれるので今回はデフォルトインストールディレクトリ
の${HOME}/OMAP35x_Android_Graphics_SDK_3_01_00_03を指定します。

To download TI's Android SGX SDK

Rules.make の変更

Rules.make のHOME、GRAPHICS_INSTALL_DIR、ANDROID_ROOT、CSTOOL_DIR、
KERNEL_INSTALL_DIRをそれぞれのファイルPATHに合うよう修正してください。
以下のRules.makeは上記設定にあわせています。

$ cd ~/OMAP35x_Android_Graphics_SDK_3_01_00_03
$ vi  Rules.make
Rules.make 

PLATFORM=LinuxOMAP3

################# FIELDS MODIFIABLE BY THE USER ############
###################
#set home area HOME (relative location for all SDK operations)
#HOME=INVALIDVAL
HOME=/home/beat
#Current Directory where Graphics SDK is installed
GRAPHICS_INSTALL_DIR=$(HOME)/OMAP35x_Android_Graphics_SDK_3_01_00_03
#Android Specific
#Path of Android Root FS
#ANDROID_ROOT=$(HOME)/INVALIDVAL
ANDROID_ROOT=$(HOME)/TI-Android-FroYo-DevKit-V2/out/target/product/bc10/bc10-image
#set toolchain root path for arm-eabi
#CSTOOL_DIR=INVALIDVAL
CSTOOL_DIR=$(HOME)/TI-Android-FroYo-DevKit-V2/prebuilt/linux-x86/toolchain/arm-eabi-4.4.0
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=$(HOME)/INVALIDVAL
KERNEL_INSTALL_DIR=$(HOME)/bc10-rowboat-kernel
TARGETFS_INSTALL_DIR=$(ANDROID_ROOT)

GFX_TARGETFS_KERMOD_PATH=$(TARGETFS_INSTALL_DIR)/lib/modules/2.6.32

#Android
ANDROID_DISCIMAGE=$(TARGETFS_INSTALL_DIR)/ 

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

$ make 
$ make OMAPES=3.x install

u-boot

bc10(omap3530)でLinuxを動作させる場合、電源の投入後一般に以下のような順番で実行されます。

1. BootROM code
2. X-Loader
3. U-Boot
4. Linux kernel(uImage)

u-bootはbc10起動時に実行される2段目のブートローダです。
bc10のブートプロセスについての情報はbc10/bootingを参照してください。

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

ビルド後出来たu-boot.binはSDカードFATパーティションにMLOファイルコピー後コピーします。
SDカードイメージ作成についてはページ下部にありますSDカードイメージ作成をご覧ください。

x-loader

x-loaderはbc10起動時に実行される第一段ブートローダです。

$ cd ~
$ 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という名前でSDカードのFATパーティション先頭に、
書き込むためのファイルです。

SDカードイメージ作成についてはページ下部にありますSDカードイメージ作成をご覧ください。

boot.scr

このファイルはシリアルコンソールでu-bootのコマンドプロンプトからsetenvで
設定するのと同じ内容を作成し、起動時に毎回手動で設定する手間を省略するためのものです。
また、メモリマッピングを変えないよう設定します。
boot.scrを配置することで bc10起動時にu-boot.bin内に設定している
bc10の起動内容(setenvの内容)をboot.scrに記載した起動内容(setenvの内容)で起動します。

boot.scr作成のためにboot.scriptというファイルを作成し以下の内容を記載します。
(setenvからcli6010.enable=0'までは1行で記載してください )
mkimageでboot.scriptをboot.scrに変換し完了です。

$ 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 omapfb.mode=dvi:1024x768MR-24@60 omapdss.def_disp=lcd cli6010.enable=0'
bootm 84000000
注:setenvからcli6010.enable=0'までは1行です。
$ mkimage -A arm -O linux -T script -C none -a 0 -e 0 -n ./boot.script -d ./boot.script ./boot.scr &> /dev/null

以上の作成ファイルを圧縮したものがprebuiltイメージになります。

prebuilt イメージの配置手順

prebuilt-image

上記手順にて作成しましたイメージをsourceforge.jpからダウンロードできます。
ダウンロードしてきたファイルはホームディレクトリの/home/beat/に置くものとして記載します。

以下のURLからbc10-boot-sd-image--release20110127.tar.gzをダウンロードしてください。
http://sourceforge.jp/projects/bc10-dev/releases/50734

bc10-boot-sd-image--release20110127.tar.gz を展開すると

FAT.tar.gz
EXT3.tar.gz

上記の二つのアーカイブが入っています。
それぞれをSDカードのFAT32パーティションとEXT3パーティションに書き込んで下さい。
書き込みの手順は以下のようになります。

SD カードイメージ作成

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

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

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

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

SDカードのアンマウント

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

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

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

$ umount /media/disk

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

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

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

Disk /dev/sdc: 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/sdc1   *           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/sdc: 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/sdc1   *           1          51      409626    c  W95 FAT32 (LBA)
/dev/sdc2              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/sdc1 -n FAT32]
mkfs.msdos 2.11 (12 Mar 2005)
$ [sudo mkfs.ext3 -L EXT3 /dev/sdc2]
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: 

prebuilt-image のファイルの配置

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

FAT32パーティションのファイルには配置方法に制限がありますので、
作業環境でアーカイブを一旦展開します。

$ mkdir ~/FAT
$ [tar xvfz FAT.tar.gz -C FAT/]

展開すると以下のファイルが含まれています。

$ ls FAT
MLO  boot.scr  u-boot.bin  uImage

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

$ [cp MLO /media/FAT32/]

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

$ [cp u-boot.bin boot.scr uImage /media/FAT32/]

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

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

ext3パーティションのファイルの配置には特に制限はありませんので、
アーカイブを直接SDカード上に展開します。

$ [sudo tar xvfz ext3.tar.gz -C /media/EXT3]


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

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

SDカードからの起動

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

補足

制限事項について

USBデバイスの認識について

USBカメラ接続時にUSBデバイスがdisconnectされUSBデバイスが動作しないことがあります。
その際は電源を切り再度電源を入れなおしてください。
またAC給電のUSBハブ経由でも起こることがあります。
詳細は現在調査中です。

CameraPreview Overlayについて

Android 起動時の build.prop

デフォルトの表示デバイスro.sf.lcd_densityは120に設定しています。
DVIに出力の際はアイコン表示など画面に比べて小さく表示されている場合は任意で
ro.sf.lcd_densityを160に変更して再起動してください。

$ cd  ~/TI_Android_FroYo_DevKit-V2/Android_Source_Manifest/rowboat-android/out/target/product/bc10/bc10-image/system
$ vi build.prop

(略)
ro.sf.lcd_density=120

Performance_Apps の導入について

注:このPerformance_Appsの導入については必須ではありません。
Performance_Appsは 2D、3Dの描画やCPUベンチマークソフト群です。
ベンチマークを導入したい場合は以下の手順をご覧ください。
デフォルト設定の状態でインストールすると、LuncherからLuncher2への入れ替えと
Contacts、Mms、SpeechRecorderが削除されます。

TI_Android_DevKit 02_00_00 Product Download Page
上記WebページにあるPerformance_Apps.tar.gzをダウンロードします。
Performance_Appsはapkで提供されています。 また標準で Luncher2 もコピーされContactsが削除されるため
HOME画面上のボタン表示が変化します。
(電話アイコンの位置にPerformance_Apps アイコンが表示されます。)

$ wget http://software-dl.ti.com/dsps/dsps_public_sw/sdo_tii/TI_Android_DevKit/02_00_00/exports/Performance_Apps.tar.gz
$ tar xvfz Performance_Apps.tar.gz
$ cd Performance_Apps

install_rowboperf.shを実行時にエラーが発生します、
以下のように修正をします。

$ vi install_rowboperf.sh
*** 13,18 ****
--- 13,19 ----
echo "Error: Rootfs location `basename $1` does not exist"
exit $E_BADARGS
fi
+ cd -

echo "Rootfs location is $1"

完了後Android userlandを指定してスクリプトを実行します。

$ ./install_rowboperf.sh ~/TI_Android_FroYo_DevKit-V2/Android_Source_Manifest/rowboat-android/out/target/product/bc10/bc10-image

install_rowboperf.shで追加されるapkと削除されるapkは以下のとおりです。

cp -r ./0xbench/Benchmark-release.apk $1/system/app/
cp -r ./0xbench/armeabi/* $1/system/bin/
cp ./3D/OGLES* $1/system/app/
cp ./3D/lib* $1/system/lib/
cp ./StorageIO/StorageIO.apk $1/system/app/
cp ./rowboatBench/rowboat.benchmark.runner-debug.apk $1/system/app/
cp -r ./RowboPERF/bin/armeabi-v7a/* $1/system/bin/
cp ./RowboPERF/RowboPERF.apk $1/system/app/
cp ./StorageIO/StorageIO.apk $1/system/app/
cp ./Launcher2/Launcher2.apk $1/system/app/ 

rm $1/system/app/Contacts.apk
rm $1/system/app/Mms.apk
rm $1/system/app/SpeechRecorder.apk

Android SGX について

init.rc の最終行に記載のとおりSGX 機能が有効の設定になっています。
不要の場合はコメントアウトで無効にしてください。
注:無効にした際にGUIの再描画が行われているため画面に若干のチラツキが発生します。

またkernel 、userland更新時は更新されたkernel、userlandを含む
SGXのリビルドが必要になります。

$ vi /media/LABEL2/init.rc
# Start PowerVR SGX DDK
service pvr /system/bin/sgx/rc.pvr start

bc10 Wifi 設定手順

Android GUI上からのWifi ON/OFF機能を実装していません。
起動の際にシリアルコンソールでinsmod、netcfgコマンドで動作確認をしています。
対象となるUSB-Wifi機器はRT3070 搭載の以下の機器になります。

メーカー   型番              対応 Device ID
Buffalo    WLI-UC-GN         0411:015d

上記のRT3070USBデバイスをbc10 に接続し起動します。
シリアルコンソールで以下のようなデバイス認識を確認します。
以下の例はWLI-UC-GNでの接続例です。

...
usb 1-2.4: new high speed USB device using ehci-omap and address 3
usb 1-2.4: New USB device found, idVendor=0411, idProduct=015d
usb 1-2.4: New USB device strings: Mfr=1, Product=2, SerialNumber=3
usb 1-2.4: Product: 802.11 n WLAN
usb 1-2.4: Manufacturer: Ralink
usb 1-2.4: SerialNumber: 1.0
...

rt3070sta.koファイルをinsmod し、netcfgコマンドでデバイスのup dhcpを行います。
RT2870STA.datはファイル内で指定したSSID への接続に使用します。
以下にシリアルコンソールからのnetcfg dhcp接続までの例を記載します。
(出力されるログは省略しています)

# cd /system/lib/modules
# ls
rt3070sta.ko
# netcfg
lo       UP    127.0.0.1       255.0.0.0       0x00000049
# insmod rt3070sta.ko
...
# netcfg
lo       UP    127.0.0.1       255.0.0.0       0x00000049
ra0      DOWN  0.0.0.0         0.0.0.0         0x00001002
# netcfg ra0 up

...
# netcfg
lo       UP    127.0.0.1       255.0.0.0       0x00000049
ra0      UP    0.0.0.0         0.0.0.0         0x00001043
# netcfg ra0 dhcp
# netcfg
lo       UP    127.0.0.1       255.0.0.0       0x00000049
ra0      UP    192.168.13.4    255.255.255.0   0x00001043
#
SSID=XXX-BC
(略)
AuthMode=OPEN
EncrypType=WEP
WPAPSK=
DefaultKeyID=1
Key1Type=1
Key1Str=xxx.testessid
Key2Type=0

参照URL

更新記録

2011/01/27 初稿記載、文言修正
2011/02/01 文言追加および修正


BC::labsへの質問は、bc9-dev @ googlegroups.com までお願い致します。
トップ   新規 一覧 単語検索 最終更新   最終更新のRSS