bc9/bc9-android-sdk

bc9-android-sdk

Vmware

bc9-android-sdk でのVmwareイメージの設定を記述します。

  • Version:6.5互換
  • Disk 容量:仮想ディスク20G(2Gごとに分割の設定)
  • CPU数:cpu 1
  • memory:512M
    • VMイメージの cpu、memory を増やしたい場合は、bc9-android-sdk--release20090801.vmx(VMware 仮想マシン構成ファイル)の numvcpus、memsize を増やしてください。
  • Network:bridge network
  • OS
    • Ubuntu 8.04.3 LTS(8.04.2LTSでインストール後 update)
    • アプリケーションは以下の設定以外はインストール後の default のまま
    • /bin/sh のシンボリックリンクがdashになっているので bash に変更します。
      • sudo dpkg-reconfigure dash
    • gnome-games ほか game 関連は削除します。(容量削減のため)
      • sudo apt-get remove gnome-cards-data gnome-games gnome-games-data libggzmod4
    • ssh、ntp、vim、lv、nautilus-open-terminal、adobe falsh 10、adobe acroread 追加インストール
    • vmware-tools インストール済みです。
    • default 解像度 1280x768に設定しています。
    • network は dhcp でアドレスを取得する設定です。
    • 作業用に作成してある user は beat、beat の password は beatcraft です。

android (Android Open Source project)

repo のインストールなど android の build に必要な setup の手順は下記 URL に従ってください。

今回使用する branch は android-sdk-1.5_r3 です。

初期化

/home/beat/ に android-sdk-1.5_r3 ディレクトリを作成しrepoの初期化します。

$ cd ~/
$ mkdir android-sdk-1.5_r3
$ repo init -u git://android.git.kernel.org/platform/manifest.git -b android-sdk-1.5_r3

取得内容の追加(local_manifest)

repo init 後、.repo に以下の内容で local_manifest.xml を作成します。

<?xml version="1.0" encoding="UTF-8"?>
<manifest>
       <project path="kernel" name="kernel/common" revision="refs/heads/android-2.6.29"/>
       <project path="external/alsa-lib" name="platform/external/alsa-lib"/>
       <project path="hardware/alsa_sound" name="platform/hardware/alsa_sound"/>
</manifest>

ソースの取得

上記設定が終了したら、repo syncをしソースを取得します。

$ repo sync

ソースファイル修正

repo sync 後、取得したソースに以下の修正を追加します。

  • alsaの追加
    android-sdk-1.5_r3/external/alsa-lib/Android.mk を以下のように修正します。
--- Android.mk.orig     2009-07-09 07:05:41.000000000 -0700
+++ Android.mk  2009-07-09 07:05:48.000000000 -0700
@@ -55,7 +55,7 @@
        -fPIC -DPIC -D_POSIX_SOURCE \
        -DALSA_CONFIG_DIR=\"/system/usr/share/alsa\" \
        -DALSA_PLUGIN_DIR=\"/system/usr/lib/alsa-lib\" \
-       -DALSA_DEVICE_DIRECTORY=\"/dev/snd/\"
+       -DALSA_DEVICE_DIRECTORY=\"/dev/\"
 LOCAL_SRC_FILES := $(sort $(call all-c-files-under, src))
  • ALSA が audio hardware library として使用されるよう build 内容調整します。
    android-sdk-1.5r3/build/target/board/generic/BoardConfig.mk を以下のように修正します。
# config.mk
#
# Product-specific compile-time definitions.
#
# The generic product target doesn't have any hardware-specific pieces.
TARGET_NO_BOOTLOADER := true
TARGET_NO_KERNEL := true
TARGET_NO_RADIOIMAGE := true
HAVE_HTC_AUDIO_DRIVER := true
BOARD_USES_ALSA_AUDIO := true
#BOARD_USES_GENERIC_AUDIO := true ※コメントアウト
  • 電源 電源管理patch(dummy-battery.patch)を適用します。
$ cd android-sdk-1.5_r3
$ patch -p1 < ../dummy-battery.patch

ビルド

ここまでの調整が終わったら build します。

$ cd android-sdk-1.5_r3
$ make

OpenWnn

上記の build では OpenWnn は build されないので、source に調整を加え追加 build を行います。
2009/08/18追記
bc9 は landscape での動作が基本ですが、android-sdk-1.5r3 branch の OpenWnn は landscape を有効にすると build ができません。
そのため、android-sdk-1.5_r3/packages/inputmethods/OpenWnn/ の branch を切り替えます。

$ cd android-sdk-1.5_r3/packages/inputmethods/OpenWnn
$ git checkout korg/cupcake-release

branch 切り替え後、landscape 表示時の software keyboard を有効にします。

$ vim android-sdk-1.5_r3/packages/inputmethods/OpenWnn/src/jp/co/omronsoft/openwnn/JAJP/DefaultSoftKeyboardJAJP.java

843行目 Create the keyboard for landscape mode 以下、
createKeyboardsLandscape の中のコメントアウトされている keylist をすべて有効にします。
修正完了後、OpenWnnの追加 buildをします。

$ cd android-sdk-1.5_r3
$ make OpenWnn
2009/08/18追記
make OpenWnn では OpenWnn.apk しか build されず、OpenWnn の動作に必要な shared Library が build されません。
以下が正しい手順です。

$ cd android-sdk-1.5_r3/build/
$ source envsetup.sh
$ cd android-sdk-1.5_r3/packages/inputmethods/OpenWnn
$ mm

これで、OpenWnn.apk と、 android-sdk-1.5r3/out/target/product/generic/system/lib/ 以下に OpenWnnのlibファイル群がビルドされます。

oggファイル

android-sdk-1.5_r3/frameworks/base/data/sounds
にある AudioPackage2.mk を Android.mk にリネームし、以下のように android の make を実行します。

$ cp AudioPackage2.mk Android.mk 
$ cd android-sdk-1.5_r3/build/
$ source envsetup.sh 
$ cd android-sdk-1.5_r3/frameworks/base/data/sounds
$ mm 

これで android-sdk-1.5_r3/out/target/product/generic/system/media/audio/以下に音声ファイルがコピーされます。

rootfilesystemの作成

androidのビルドが正常に完了したら、android-rootというディレクトリを作成し以下に
必要なファイルを配置します。

$ cd ~/
$ mkdir android-root
$ cp -a ~/android-sdk-1.5_r3/out/target/product/generic/root/* ~/android-root/
$ cp -a ~/android-sdk-1.5_r3/out/target/product/generic/system/* ~/android-root/system/

init.rcの編集

android-root/init.rc に以下を追加します。
場所はon bootの直前です。

   chmod 0666 /dev/bc9_leds
       
   setprop alsa.mixer.playback.master Master
   setprop alsa.mixer.capture.master Capture
   setprop alsa.mixer.playback.earpiece Master
   setprop alsa.mixer.capture.earpiece Capture
   setprop alsa.mixer.playback.headset Master
   setprop alsa.mixer.playback.speaker Master
   chmod 0777 /dev/pcmC0D0c
   chmod 0777 /dev/pcmC0D0p
   chmod 0777 /dev/controlC0
   chmod 0777 /dev/timer
   chown root audio /dev/controlC
   chown root audio /dev/pcmC0D0c
   chown root audio /dev/pcmC0D0p
   chown root audio /dev/timer
  
   on boot
   # basic network init

また、yaffs2 でmountしている箇所をコメントアウトします。

default.propの編集

android-root/default.prop の末尾に以下を追加します。

net.eth0.dns1=208.66.222.222
net.dns1=208.67.222.222

次に、音を鳴らすための設定をします。

asound.stateの作成

android-root/system/etc/ に asound.state と asound.conf を作成します。
以下の asound.state は bc9 を OpenEmbedded で起動して alsamixer で作成したものです。

state.Gumstix {
   control.1 {
       comment.access 'read write'
       comment.type INTEGER
       comment.count 1
       comment.range '0 - 4'
       iface MIXER
       name 'Tone Control - Bass'
       value 0
   }
   control.2 {
       comment.access 'read write'
       comment.type INTEGER
       comment.count 1
       comment.range '0 - 2'
       iface MIXER
       name 'Tone Control - Treble'
       value 0
   }
   control.3 {
       comment.access 'read write'
       comment.type BOOLEAN
       comment.count 1
       iface MIXER
       name 'Headphone Playback Switch'
       value true
   }
   control.4 {
       comment.access 'read write'
       comment.type BOOLEAN
       comment.count 1
       iface MIXER
       name De-emphasis
       value false
   }
   control.5 {
       comment.access 'read write'
       comment.type BOOLEAN
       comment.count 1
       iface MIXER
       name 'DC Filter'
       value true
   }
   control.6 {
       comment.access 'read write'
       comment.type BOOLEAN
       comment.count 1
       iface MIXER
       name 'Hi-pass Filter'
       value true
   }
   control.7 {
       comment.access 'read write'
       comment.type BOOLEAN
       comment.count 1
       iface MIXER
       name 'ADC Filter'
       value true
   }
   control.8 {
       comment.access 'read write'
       comment.type BOOLEAN
       comment.count 1
       iface MIXER
       name 'Master Playback Switch'
       value true
   }
   control.9 {
       comment.access 'read write'
       comment.type INTEGER
       comment.count 2
       comment.range '0 - 63'
       iface MIXER
       name 'Master Playback Volume'
       value.0 63
       value.1 63
   }
   control.10 {
       comment.access 'read write'
       comment.type ENUMERATED
       comment.count 2
       comment.item.0 Mic
       comment.item.1 CD
       comment.item.2 Video
       comment.item.3 Aux
       comment.item.4 Line
       comment.item.5 Mix
       comment.item.6 'Mix Mono'
       comment.item.7 Phone
       iface MIXER
       name 'Capture Source'
       value.0 Mic
       value.1 Mic
   }
   control.11 {
       comment.access 'read write'
       comment.type BOOLEAN
       comment.count 1
       iface MIXER
       name 'Capture Switch'
       value true
   }
   control.12 {
       comment.access 'read write'
       comment.type INTEGER
       comment.count 2
       comment.range '0 - 15'
       iface MIXER
       name 'Capture Volume'
       value.0 15
       value.1 15
   }
   control.13 {
       comment.access 'read write'
       comment.type BOOLEAN
       comment.count 1
       iface MIXER
       name 'Loudness (bass boost)'
       value false
   }
}

asound.confの作成

以下の asound.conf は asound.state を元に作成したものです。

ctl.AndroidPlayback {
	type hw
	card 0
}

ctl.AndroidRecord {
	type hw
	card 0
}

pcm.AndroidPlayback {
	type hooks
	slave.pcm {
		type hw
		card 0
		device 0
	}
	hooks.0 {
		type ctl_elems
		hook_args [
			{ name 'Tone Control - Bass'	   value 0           } 
			{ name 'Tone Control - Treble'	   value 0           } 
			{ name 'Headphone Playback Switch' value true	     }
			{ name 'De-emphasis'		   value false	     }
			{ name 'DC Filter'		   value true	     }
			{ name 'Hi-pass Filter'		   value true	     }
			{ name 'ADC Filter'		   value true	     }
			{ name 'Master Playback Switch'	   value true	     }
			{ name 'Master Playback Volume'	   value [ 55 55 ]   }
			{ name 'Capture Source'		   value [ Mic Mic ] }
			{ name 'Capture Switch'		   value true	     }
			{ name 'Capture Volume'		   value [ 15 15 ]   }
			{ name 'Loudness (bass boost)'	   value false	     }
		]
	}
}

pcm.AndroidPlayback_Speaker_normal {
	type hooks
	slave.pcm {
		type hw
		card 0
		device 0
	}
	hooks.0 {
		type ctl_elems
		hook_args [
			{ name 'Tone Control - Bass'       value 0	     }
			{ name 'Tone Control - Treble'     value 0	     }
			{ name 'Headphone Playback Switch' value true	     }
			{ name 'De-emphasis'		   value false	     }
			{ name 'DC Filter'		   value true	     }
			{ name 'Hi-pass Filter'	           value true	     }
			{ name 'ADC Filter'		   value true        }
			{ name 'Master Playback Switch'	   value true	     }
			{ name 'Master Playback Volume'	   value [ 55 55 ]   }
			{ name 'Capture Source'		   value [ Mic Mic ] }
			{ name 'Capture Switch'		   value true	     }
			{ name 'Capture Volume'		   value [ 15 15 ]   }
			{ name 'Loudness (bass boost)'	   value false	     }
		]
	}
}
pcm.AndroidPlayback_Speaker {
	type hooks
	slave.pcm {
		type hw
		card 0
		device 0
	}
	hooks.0 {
		type ctl_elems
		hook_args [
			{ name 'Tone Control - Bass'       value 0	     }
			{ name 'Tone Control - Treble'     value 0	     }
			{ name 'Headphone Playback Switch' value true	     }
			{ name 'De-emphasis'		   value false	     }
			{ name 'DC Filter'		   value true	     }
			{ name 'Hi-pass Filter'	           value true	     }
			{ name 'ADC Filter'		   value true        }
			{ name 'Master Playback Switch'	   value true	     }
			{ name 'Master Playback Volume'	   value [ 55 55 ]   }
			{ name 'Capture Source'		   value [ Mic Mic ] }
			{ name 'Capture Switch'		   value true	     }
			{ name 'Capture Volume'		   value [ 15 15 ]   }
			{ name 'Loudness (bass boost)'	   value false	     }
		]
	}
}

pcm.AndroidPlayback_Headset {
	type hooks
	slave.pcm {
		type hw
		card 0
		device 0
	}
	hooks.0 {
		type ctl_elems
		hook_args [
			{ name 'Tone Control - Bass'       value 0	     }
			{ name 'Tone Control - Treble'     value 0	     }
			{ name 'Headphone Playback Switch' value true	     }
			{ name 'De-emphasis'		   value false	     }
			{ name 'DC Filter'		   value true	     }
			{ name 'Hi-pass Filter'	           value true	     }
			{ name 'ADC Filter'		   value true        }
			{ name 'Master Playback Switch'	   value true	     }
			{ name 'Master Playback Volume'	   value [ 55 55 ]   }
			{ name 'Capture Source'		   value [ Mic Mic ] }
			{ name 'Capture Switch'		   value true	     }
			{ name 'Capture Volume'		   value [ 15 15 ]   }
			{ name 'Loudness (bass boost)'	   value false	     }
		]
	}
}

pcm.AndroidPlayback_Speaker_incall {
	type hooks
	slave.pcm {
		type hw
		card 0
		device 0
	}
	hooks.0 {
		type ctl_elems
		hook_args [
			{ name 'Tone Control - Bass'       value 0	     }
			{ name 'Tone Control - Treble'     value 0	     }
			{ name 'Headphone Playback Switch' value true	     }
			{ name 'De-emphasis'		   value false	     }
			{ name 'DC Filter'		   value true	     }
			{ name 'Hi-pass Filter'	           value true	     }
			{ name 'ADC Filter'		   value true        }
			{ name 'Master Playback Switch'	   value true	     }
			{ name 'Master Playback Volume'	   value [ 55 55 ]   }
			{ name 'Capture Source'		   value [ Mic Mic ] }
			{ name 'Capture Switch'		   value true	     }
			{ name 'Capture Volume'		   value [ 15 15 ]   }
			{ name 'Loudness (bass boost)'	   value false	     }
		]
	}
}

pcm.AndroidPlayback_Headset_incall {
	type hooks
	slave.pcm {
		type hw
		card 0
		device 0
	}
	hooks.0 {
		type ctl_elems
		hook_args [
			{ name 'Tone Control - Bass'       value 0	     }
			{ name 'Tone Control - Treble'     value 0	     }
			{ name 'Headphone Playback Switch' value true	     }
			{ name 'De-emphasis'		   value false	     }
			{ name 'DC Filter'		   value true	     }
			{ name 'Hi-pass Filter'	           value true	     }
			{ name 'ADC Filter'		   value true        }
			{ name 'Master Playback Switch'	   value true	     }
			{ name 'Master Playback Volume'	   value [ 55 55 ]   }
			{ name 'Capture Source'		   value [ Mic Mic ] }
			{ name 'Capture Switch'		   value true	     }
			{ name 'Capture Volume'		   value [ 15 15 ]   }
			{ name 'Loudness (bass boost)'	   value false	     }
		]
	}
}

pcm.AndroidPlayback_Earpiece_incall {
	type hooks
	slave.pcm {
		type hw
		card 0
		device 0
	}
	hooks.0 {
		type ctl_elems
		hook_args [
			{ name 'Tone Control - Bass'       value 0	     }
			{ name 'Tone Control - Treble'     value 0	     }
			{ name 'Headphone Playback Switch' value true	     }
			{ name 'De-emphasis'		   value false	     }
			{ name 'DC Filter'		   value true	     }
			{ name 'Hi-pass Filter'	           value true	     }
			{ name 'ADC Filter'		   value true        }
			{ name 'Master Playback Switch'	   value true	     }
			{ name 'Master Playback Volume'	   value [ 55 55 ]   }
			{ name 'Capture Source'		   value [ Mic Mic ] }
			{ name 'Capture Switch'		   value true	     }
			{ name 'Capture Volume'		   value [ 15 15 ]   }
			{ name 'Loudness (bass boost)'	   value false	     }
		]
	}
}

pcm.AndroidPlayback_Bluetooth {
	type hooks
	slave.pcm {
		type hw
		card 0
		device 0
	}
	hooks.0 {
		type ctl_elems
		hook_args [
			{ name 'Tone Control - Bass'       value 0	     }
			{ name 'Tone Control - Treble'     value 0	     }
			{ name 'Headphone Playback Switch' value true	     }
			{ name 'De-emphasis'		   value false	     }
			{ name 'DC Filter'		   value true	     }
			{ name 'Hi-pass Filter'	           value true	     }
			{ name 'ADC Filter'		   value true        }
			{ name 'Master Playback Switch'	   value true	     }
			{ name 'Master Playback Volume'	   value [ 55 55 ]   }
			{ name 'Capture Source'		   value [ Mic Mic ] }
			{ name 'Capture Switch'		   value true	     }
			{ name 'Capture Volume'		   value [ 15 15 ]   }
			{ name 'Loudness (bass boost)'	   value false	     }
		]
	}
}

pcm.AndroidRecord_Microphone {
	type hooks
	slave.pcm {
		type hw
		card 0
		device 0
	}
	hooks.0 {
		type ctl_elems
		hook_args [
			{ name 'Tone Control - Bass'       value 0	     }
			{ name 'Tone Control - Treble'     value 0	     }
			{ name 'Headphone Playback Switch' value true	     }
			{ name 'De-emphasis'		   value false	     }
			{ name 'DC Filter'		   value true	     }
			{ name 'Hi-pass Filter'	           value true	     }
			{ name 'ADC Filter'		   value true        }
			{ name 'Master Playback Switch'	   value true	     }
			{ name 'Master Playback Volume'	   value [ 55 55 ]   }
			{ name 'Capture Source'		   value [ Mic Mic ] }
			{ name 'Capture Switch'		   value true	     }
			{ name 'Capture Volume'		   value [ 15 15 ]   }
			{ name 'Loudness (bass boost)'	   value false	     }
		]
	}
}

vold.confの作成

sdcard の mount は vold がおこないます。
vold は以下の場所の設定ファイルに従って動作するので、まず設定ファイルを作ります。

$ vi android-root/system/etc/vold.conf

書式は以下のようにします。

## vold configuration file for bc9
volume_sdcard {
  media_path     /devices/platform/pxa2xx-mci.0/mmc_host/mmc0
  media_type     mmc
  mount_point    /sdcard
  ums_path       /devices/platform/usb_mass_storage/lun0
}

キー割り当て

bc9にはボタンが3つあり、上からキーボードのF1,F2,F3が
割り当てられています。
Androidで必要なHome,Menu,Backをそれぞれ割り当てます。

android-root/system/usr/keylayout
にqwerty.klがあります。
以下のように編集してください。

--- qwerty.kl-orig      2009-07-02 20:28:21.000000000 +0900
+++ qwerty.kl   2009-07-02 20:29:42.000000000 +0900
@@ -11,18 +11,18 @@ key 10    9
 key 11    0
 key 158   BACK              WAKE_DROPPED
 key 230   SOFT_RIGHT        WAKE
-key 60    SOFT_RIGHT        WAKE
+key 60    MENU              WAKE
 key 107   ENDCALL           WAKE_DROPPED
 key 62    ENDCALL           WAKE_DROPPED
 key 229   MENU              WAKE_DROPPED
 key 139   MENU              WAKE_DROPPED
-key 59    MENU              WAKE_DROPPED
+key 59    HOME              WAKE
 key 127   SEARCH            WAKE_DROPPED
 key 217   SEARCH            WAKE_DROPPED
 key 228   POUND
 key 227   STAR
 key 231   CALL              WAKE_DROPPED
-key 61    CALL              WAKE_DROPPED
+key 61    BACK              WAKE
 key 232   DPAD_CENTER       WAKE_DROPPED
 key 108   DPAD_DOWN         WAKE_DROPPED
 key 103   DPAD_UP           WAKE_DROPPED

android-SDK

Android 1.5 SDK, Release 3
http://developer.android.com/sdk/1.5_r3/index.html
をインストール(ADB、emulator などが使えるように)

eclipse

Installing the Android SDK の記述に従い、
Eclipse 3.4.2 と android 開発用 plugin をインストール

linux kernel source

android-sdk-1.5_r3 に local_manifest を追加して取得した android-2.6.29 kernel を使用します。
/home/beat/ に kernel_work ディレクトリを作成しそこへ kernel をコピー、linux-android-2.6.29 にリネームし
これに bc9 用 patch を当てます。

$ cd /home/beat/kernel_work/linux-android-2.6.29/
$ mv ../patch-kernel-2.6.29.4-bc9/patch-all.sh .
$ mv ../patch-kernel-2.6.29.4-bc9/*.patch .
$ ./patch-all.sh

17個 の patch がすべて当たったら、patch 済みとわかるよう名前を変えておきます。

$ mv linux-android-2.6.29 linux-android-2.6.29-bc9-r3

cross toolchain

bc9-oe-sdk で build した gumstix-oe の cross toolchain を /home/beat/kernel_work/cross 以下にコピーします。
/home/beat/kernel_work/envsetup.sh で kernel の ARM cross compile が通るようにして kernel の cross build は確認済みです。


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