[[bc9/bc9-android-sdk]] bc9-android-sdk -version --bc9-android-sdk--release20090801 #contents * Vmware [#p80852e6] bc9-android-sdk でのVmwareイメージの設定を記述します。~ -Version:6.5互換 -Disk 容量:仮想ディスク20G(2Gごとに分割の設定) -CPU数:cpu 1 -memory:512M --VMイメージの cpu、memory を増やしたい場合は、bc9-android-sdk--release20090801.vmx(VMware 仮想マシン構成ファイル)の memsize、numvcpus を増やしてください。 --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) [#m93cc150] repo のインストールなど android の build に必要な setup の手順は下記 URL に従ってください。~ -http://source.android.com/download ~ 今回使用する branch は android-sdk-1.5_r3 です。~ ** 初期化 [#waf2b56c] /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) [#ad5c532d] 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> ** ソースの取得 [#ce572f01] 上記設定が終了したら、repo syncをしソースを取得します。~ $ repo sync ** ソースファイル修正 [#ed745241] 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 ** ビルド [#ybc519c0] ここまでの調整が終わったら build します。~ $ cd android-sdk-1.5_r3 $ make ***OpenWnn [#e55cd59f] 上記の build では OpenWnn は build されないので、source に調整を加え追加 build を行います。~ COLOR(blue){2009/08/18追記}~ COLOR(blue){bc9 は landscape での動作が基本ですが、android-sdk-1.5r3 branch の OpenWnn は landscape を有効にすると build ができません。}~ COLOR(blue){そのため、}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 %%~ COLOR(blue){2009/08/18追記}~ COLOR(blue){make OpenWnn では OpenWnn.apk しか build されず、OpenWnn の動作に必要な shared Library が build されません。}~ COLOR(blue){以下が正しい手順です。} $ cd android-sdk-1.5_r3/build/ $ source envsetup.sh $ cd android-sdk-1.5_r3/packages/inputmethods/OpenWnn $ mm COLOR(blue){これで、OpenWnn.apk と、 android-sdk-1.5r3/out/target/product/generic/system/lib/ 以下に} COLOR(blue){OpenWnnのlibファイル群がビルドされます。} ** oggファイル [#ndaa1208] 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の作成 [#tfbfc06b] 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の編集 [#xa5a254a] 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の編集 [#c55e519d] android-root/default.prop の末尾に以下を追加します。~ net.eth0.dns1=208.66.222.222 net.dns1=208.67.222.222 次に、音を鳴らすための設定をします。~ ** asound.stateの作成 [#sd213aff] 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の作成 [#hb0044bb] 以下の 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の作成 [#v8ad16ba] 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 } ** キー割り当て [#b03ec7a6] 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 [#kd7a7e72] Android 1.5 SDK, Release 3~ http://developer.android.com/sdk/1.5_r3/index.html~ をインストール(ADB、emulator などが使えるように) * eclipse [#q7b6cb81] [[Installing the Android SDK:http://developer.android.com/sdk/1.5_r3/installing.html]] の記述に従い、~ Eclipse 3.4.2 と android 開発用 plugin をインストール * linux kernel source [#i127f099] 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 [#j81bad54] 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 は確認済みです。~