[[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 は確認済みです。~

BC::labsへの質問は、bc9-dev @ googlegroups.com までお願い致します。
トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   最終更新のRSS